Hello. Much time has passed since my posts on habre (
tyk ,
tyk ) on the topic of Consulo. Below I will tell you what has changed during this time.
For those who missed my posts:
Consulo is a fork of IntelliJ IDEA Community Edition that has support for .NET (C # currently), Java, Javascript (NodeJS), and more. The project has collected many open plug-ins in itself. At the same time, the code remained open.

I would like to clarify. So far,
Consulo is not suitable for working at Production, everything is developing very slowly and by the forces of one person (that is, me).
')
But look what I achieved.
Comparison of the Java & C # implementation using a simple example (attention is given to two large gifs)Java:

C # (Mono):

MSIL :
From the very beginning of writing support for C # decompilation was only in C # code. After a while, I realized that it was very bad (it turns out that C # was at the top of the .NET language pyramid, although, in fact, it has the same rights as Java (ikvm.net), nemerle, vb). This problem forced to invent some bicycles. Plus, it greatly influenced the performance (the search inside the library took a lot of time).
The plugin has already been half a year, it was very expensive for me to redo it. But, I weighed the pros and cons. And he decided. You can see the amount of work in PullRequest on Github:
github.com/consulo/consulo-dotnet/pull/691 commit - 3 days. The implementation has given a lot. The search speed inside the binary code has greatly increased and the opportunity has appeared to look at the MSIL code (without instructions, as long as it is not a priority for me):
Configuration profilesSince IDEA does not have built-in support for profiles, a poor implementation was made inside the .NET plugin itself:

But it created a lot of bugs for plugins that depend on .NET (for example, NUnit, IronPython). There was another problem with addictions. For example, if we have a project for Microsoft .NET & Mono .NET and are used, for example, Apache Thrift lib, the problem is that the builds need different, and it was impossible to connect 2 libraries.
There was only one way out - rewrite inside the Consul itself. I took this task for a long time, but decided to do it anyway. At the same time plug-ins ala Haxe / Google Go / Java (and others) got the opportunity to change configurations, which was not possible inside IDEA.
DebuggerSo far, I have not gotten Microsoft debugger (there are suggestions how to do it, but no hands). But at the same time I improve the Mono .NET debugger. During this time I fixed a lot of bugs. Various problems were fixed, for example, when the debugger could not attach to the application. Work with nested classes has been fixed.
NunitThe most important problem was how to load NUnit with its logger. As a result,
dotnet-loader was written. It loads the specified module (.exe file), the necessary dll-ku and calls the desired method from the class. As it turned out, this is a universal way, and it came in handy for me to
NAnt (before that I had NAnt fork).
NAnt extensionsNUnit ExtensionsNUnit setup and operation example Mono vs windowsFor all the time working with Mono, I saw a lot of bugs. For example, NUnit (like Windows.Forms) does not work. This bug is in version
3.2 . As it turned out, the bug was fixed (in 3.6) - only this is a joke, there are no official builds for Windows. For MacOS there is build
3.6 .
Unhandled Exception:
System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.WindowsFormsSynchronizationContext ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.ThemeEngine ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.ThemeWin32Classic ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.KnownColors ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Drawing.GDIPlus ---> System.DllNotFoundException: /tmp/install/lib/libgdiplus.so
IKVM.NET is also broken. The first is the wrong location of the .exe file in relation to its files. Secondly, someone forgot to add the Preprocessor Variable
MONO at compile time
ikvmc.exe . Horror.
...Describe different things for a long time. I not only do C # plugin (including .NET). Today, for example, closed yet Composite Formatting. Later I will improve, but I need support for
External Attributes .

There are tests in the direction of NodeJS (debug already exists) and JavaScript (there is also a plugin).