Why we dropped Eclipse in favour of IntelliJ

September 12, 2013 by Nikita Salnikov-Tarnovski

As a background – all of us in Plumbr have all been using Eclipse for as long as we can possibly remember. But when I just looked around in the office I saw our whole team being converted to IntelliJ IDEA users. So what made us to jump the old free-to-ride warhorse and go with something we need to pay up to $600 per seat? If you bear with me I give you several reasons why you could also consider the move.

For years, our friend Anton Arhipov has tried to convince us. He kept failing until he demoed something as simple as ALT+ENTER. Based on the documentation it is not doing much – just using the suggested quick fix. But this feature is backed by something that makes many other IntelliJ features so much more pleasing to use.

Indexing. Whatever the JetBrains guys are doing under the hood, their indexing is blazingly fast and supports different content. This benefits of the fast indexing are paying off in several different usability features:

  • As-you-type code smells and warnings. In Eclipse you have to launch the analyzing manually, in IntelliJ you will have the feedback on those immediately.
  • Code completion and code generation support offered is orders of magnitude better due to the very same indexes.  I guess you all remember the infamous java.awt.List autoimport on Lists which took years to be removed from the “top recommendation”. No such annoyances when using IntelliJ.
  • The fixes offered by the ALT+ENTER make sense in so many occasions that it already starts to frighten me. On some cases I have suspected they have an Amazon Mechanical Turk watching me as I type – the recommendations are just so good.

IntelliJ shortcuts

Language support. They way IntelliJ is behaving on different content type feels just natural and uniformed. Whether I am editing a Java, Javascript, HTML or a JPA query – the syntax support is really good and the operations I perform are uniformed across languages. I do not need to learn a set of new shortcuts each time I switch away from Java. And the code completion support, especially in Javascript is something I failed to see in Eclipse. It just wasn’t there.

Perspectives. Or actually, lack of the perspectives. Eclipse tried to offer “the best perspective” for me while I was dealing with different issues at hand. For me it meant that my screen layout got mangled each time I switched from development to debugging or refactoring. It always annoyed me and now having just one extra context-dependent window for the additional operations I feel I have a solution I am actually enjoying

Debugger. It is blazingly fast. And I will not even start with the Eclipse debugging perspective, which has to be someone’s evil joke driving me nuts every time I recall using it. And the feature set is also more pleasant, my favourite being the “Smart step into” which allows me to select which method to step into, if I have a code line with multiple method calls.

Support. Eclipse is built by a foundation. This is not bad per se, but the different interest groups in this foundation make the governing and execution somewhat difficult. For me as a developer it results in support tickets disappearing into a void for weeks. No such problems with IntelliJ where I always have my questions answered in time and without bouncing the topics between different areas of responsibility.

Several minor things I only list some of the recent favourable discoveries:

  • JPA query syntax correctness is being checked as you type. Has saved me a day or two already not having to discover the errors in runtime.
  • Property files integration. While in a property file, I can see where in the source code this property is being used and detect unused properties immediately.
  • Integration with different browsers. To test my HTML, I can launch different browsers right from the IDE itself, so I do not have to go the extra mile (ok, an inch) and open them by myself.
  • CSS colors are visible right from the IDE, so I do not even have to check the browser for this.

IntelliJ property file support

So I can only ensure that after your monthly trial will end there is no going back. But to be fully honest, there is one thing I do miss from the Eclipse as well – the “Save Actions”. If you haven’t used it, this is a possibility to create triggers being launched when you press CTRL+S. So for example I can have the imports organized, code formatted and @Override annotations added without any effort from my side. Haven’t found the IntelliJ equivalent for this one so far.

So, even though we cannot actually measure if we are more productive after the conversion, we are somewhat happier with the tools at hand. And we do believe that a good craftsman has to have the best possible tools in order to create the best possible craft.

If you enjoyed the content and wish to get updates on what the craftsmen are up to, then subscribe to our Twitter feed.

 

Can't figure out what causes your OutOfMemoryError? Read more

ADD COMMENT

COMMENTS

Nice post, despite of all its good thing, I have yet to try IntelliJ, how about its Java 8 support, is it better than Netbeans?

Thanks
Javin

Javin Paul

I’m using both IntelliJ and NetBeans (abandoned Eclipse long ago), and most of the times I prefer NetBeans. It’s just prettier, feels cleaner, and has a better Gradle integration, which is what I need. IntelliJ is great for Clojure, though.

pron

Does it have incremental compilation yet? While I have found the various other tools of IDEA faster the thing that kills me is waiting for the compiles when I go through a green/red cycle for TDD. In eclipse its instant, and with the right plugins its automatic. In IDEA the compilation doesn’t happen on file save (because well it doesn’t have it) but rather on the compilation which is largely driven by an external tool like Maven. That extra time over and over through the day really adds up and its the only thing stopping me making the transition and has been for years.

Paul Keeble

Yes, it has. Save happens automatically, and so does compilation a moment after that.

iNikem

I think nobody has enough time to become an Eclipse expert and Idea expert to convince other people that this IDE is better than the other.
I think I was lucky when I was forced to use Idea after only 2 years of using Eclipse and now Idea goes with me everywhere. Of course it will be difficult when you join a company where everything is configured to use with Eclipse and when you don’t know about the application structure, but when you understand the application structure, there’s nothing difficult to use that highly-configured-to-use-with-Eclipse application in Idea.

However, in my current company which also uses Eclipse, an Eclipse plugin is used (I don’t remember the plugin name but I’ll explain what it does later) and I haven’t found any way in Idea to do something similar. This is my situation: there are 2 different source code directory named V2N and V2I. V2N is a web app while V2I isn’t. If we want to build our web app with ant, we do like this: compile V2I and pack it in a jar, say V2I.jar, then we compile V2N with V2I.jar in the classpath and when the V2N web app is built, V2I.jar will be in /WEB-INF/lib. Now the challenge with Idea is that there are some duplicate classes in V2N and V2I (i.e. the same class names in the same package names). In Eclipse plugin I mentioned above can tell Eclipse that if Eclipse sees a duplicate class in V2N and V2I, use the one in V2N which makes sense because at the end the duplicate class in V2N will be in /WEB-INF/classes while the duplicate class in V2I will be in /WEB-INF/lib/V2I.jar. Idea always refuses to compile because of duplicate classes even when I go to the Settings | Compiler to ignore some .java files.

If anybody understands what I am talking (English is not my native language) and has any idea for my problem, please help. I’ll be very grateful.

LG Optimusv

First solution would be, obviously, to name different classes with different names :)
More seriously though, are V2N and V2I two different modules in your IJ project? When V2N depends upon V2I. I would expect IJ to handle this situation gracefully. If not, then may be you should file a bug to IJ. Or may be Andrey or arhan can comment on this?

iNikem

I can setup the Idea project so that V2N and V2I are 2 different modules and V2N depends on V2I, but will it solve the duplicate class issue? I’ll find out later.

LG Optimusv

What about all the MDA (i.e. ECORE, OCL, Acceleo, QVT, etc.) and DSL (i..e Xtext) plugins which are very well supported in Eclipse ? is there anything equivalent in IDEA?

lowcoupling

I used intellij for years (had to because thats what they used at my job at the time)..I learned all shotscuts, I did all in my power to be comfortable with IJ.
But it was just a huge pain. When we’re talking pure editing, navigation, refactoring..nothing out there even remotely compares with Eclipse.

Tom Dane

I’ve used both for years and I still prefer Eclipse. I cant really see where intellij outshines Eclipse.
One of the thing that really bothers me with IJ is autocomplete and import of classes.
For example, when I want to import Customer, I simply start typing customer, and Eclipse will show it in its autocomplete popup and import it if I so chose.
Intellij doesnt do that. You will have to type the entire word Customer then it will ask you “Do you want to import Customer ? Hit alt enter”
This is just silly. You would expect that typing “Cust” and hitting ctrl+space would bring you a list of classes starting with “Cust” from which you can select.
That is a serious problem in larger projects where you don’t remember the exact name of a class.
This is just one thing that bothers me with IJ..there’s tons of small nuisances like that.
Eclipse simply let’s you code blazingly fast. IntelliJ feels slow and sluggish.
In eclipse I reach everything using only the keyboard (or most everything). In IJ I more often than not have to use the mouse.

And finally..MYLYN ! Why the hell didnt they make a Mylyn plugin for IJ ?
task focus is extremely important in larger projects.
Eclipse had it for years, IJ simply ignores it. This is a much more needed feature than bettter Javascript debugger or whatever non crucia feature they decided to concentrate on.

After a day of developing with IJ my hands and head hurt.

Tom Dane

Wow, we have some problem here.
1. If you start typing “Cust” then IJ will suggest you possible autocompletions even without pressing any shortcut. You can select the correct one with arrow key and press Enter. IJ will add import as well.
2. IJ has an order of magnitude more shortcuts than Eclipse. You can do everything without mouse. Try Key Promoter plugin for learning those shortcuts.
3. IJ has tasks, changesets etc. Not Mylyn per se, but it works perfectly. And has integration with JIRA at least.

In writing code IJ is definitely faster than Eclipse.

iNikem

1) Ehm..no. Not for classes not already imported in your file
2) Thats a bold statement. Theres a shortcut for everything in eclipse
3) Yes and that sucks compared to mylyn.

Last statement is just your subjective opinion.

Tom Dane

1. Ok, true. For classes not already imported you have to press Ctrl-space. So just like in Eclipse.
2. Your statement was that you have to use mouse in IJ, because it has not that much shortcuts as Eclipse does. I claim that I do much more with shortcuts, not mouse, in IJ, that I used to in Eclipse.
3. That is subjective :)

iNikem

Simple test. Without a mouse, please jump into the project view from the editor, and come back. Then to some other view (let’s say, structure view) and come back to the editor? Good navigation, huh?

Eclipse is _very_ limited in shortcuts for Navigation. The best you can do – use Ctrl/Cmd+F7. Of course you can have a shortcut for everything of you assign it a shortcut.

arhan

Outline : ctrl + O..

OR
Alt+SHift+W left you select navigator, outline, project explorer or whatever you have open.

Tom Dane

Or you can configure your key combination under settings->keys, “Show in explorer” “Show in navigator” etc
These are not bound by default so you would have to do it yourself

Tom Dane

“You would expect that typing “Cust” and hitting ctrl+space” < < very bold and subjective statement. I could say the say exactly the opposite: "I would expect hitting Alt+Enter"

And it is just silly to complain about this kind of things. If this kind of things disturb you – it is just not your IDE, nothing personal.

Mylyn is as opinionated as IntelliJ is. A lot of people would try it and run away. So it is not surprising that it doesn’t exist in IntelliJ. There’s a light support for contexts though.

“After a day of developing with IJ my hands and head hurt.” < < well, you just didn’t get your hands around it. Just stay on eclipse :)

arhan

Mylyn is no opinionated..theres a difference in seeing 5 relevant files in your tree view and seeing 2000. Thats not an opinion.
That you want even give in to this just shows how biased you are. Intellij can do no wrong.
I’ve tried intelli, really gave it a chance. Ive years experience with it for Christ sake ! And still I prefer Eclipse.
Im not trying to win someone over but this little glowing review needs a counter argument. I

Tom Dane

Please note, that this is not a review. Title says: “Why we prefer IntelliJ”. By definition it is very personal list of highly subjective things :)

iNikem

Each to his own I guess.

Tom Dane

Well, those guys have been using Eclipse for 10+ years. The preference comes from _what_ you’re doing with the tool and how it supports your style of work.

arhan

Anyway they could just MAKE mylyn for Intellij. Its not like it’s rocket science..then people could use it or not.
A little faster UI and mylyn, and IJ would be ok in my book..and a lot of other Eclipse users as well.

Tom Dane

For Mylyn it was asked if it could be integrated and it seems it is not going to happen. Or if it will – in a little different form than Mylyn

http://youtrack.jetbrains.com/issue/IDEA-74594

As for the UI – it has been a problem in the past for me also. But in recent versions it has become quite fast and responsive – can’t see it being an argument any more.

arhan

“theres a difference in seeing 5 relevant files in your tree view and seeing 2000″

Here’s my receipt to this. I set number of visible tabs to no more than 5-6 so that the would not wrap. I use only the shortcuts to navigate recently edited/opened files. Mylyn is no use in my workflow.

I haven’t tried Mylyn in recent years. Maybe it is not _that_ opinionated any more. However, when I tried to get my head around it some time ago, I figured you need to use special shortcuts so that it could track the context correctly. This is why I say it is opinionated.

arhan

Yea but if you quickly navigate a bunch of files you will end up with a lot tabs that you for sure is not going to use.
Closing/opening the right tabs is nothing more than you doing an analog version of Mylyn.
I cant live without Mylyn, at least not in large projects

Tom Dane

Nope. That’s the whole point – it closes the tabs for me. Either those that weren’t edited, or those that have been least frequently used. So I don’t explicitly open tabs – I only open what I need.
It is not as powerful as Mylyn of course – but I don’t need that many tabs to be opened.

arhan

No more plugin or upgrade war as it was in Eclipse (or MyEclipse or STS – used all of them before switching to IDEA). Never looked back also. You have to get used yourself to the specific build environments (e.g. IDEA plugin for Maven or Gradle) to setup migrated projects properly. This helps a lot.

Robert

“I do not need to learn a set of new shortcuts each time I switch away from Java.” – This is one BIG thing that drives me crazy everytime I try to convince myself that Eclipse is as good as intellij

Alex Wibowo

To me one killer feature after having switched is how smart it is in recognizing class-, function- and filenames by understanding CamelCasing. So just typing “lic” autocompletes to LoadImageCommand for example. But so does “loimco”, “lim”, “licommand”, “loadic” etc. Any combination works.

And function refactoring, which can add and shuffle parameters in all existing functions calls. Amazing.

(P.S: I’m doing JavaScript, CoffeeScript, SASS, ActionScript3. Not Java.)

micros

Eclipse supports it too (At last in case of Java).

tas

Exactly. Eclipse supports that for Java. IJ supports that for all languages that the majority of applications use today. Java, JS, HTML, CSS, SQL, HQL you name it

iNikem

Uses Intellij for 20 mins. Never looked back. Whole team now uses it.

Alex

Above points does not attract me to IntelliJ. Debugging and perspective (switching) is not an issue. You can customize your perspective as you want, and disable recommendations from eclipse perspective suggestion.

Mohammad Ilyas Soomro

I’ve tried many times to move to idea, never succeeded. Tried it again now, I’m struggling even with the most trivial things. Maybe you can help me? Or are there any materials that you’ve used during your migration process?

- What’s the replacement to eclipse quick access search (ctrl + 3)? I really would like to search all the possibilities instead of going through unknown menus one at a time.
- Does it have a plugin or some setting to ease migration pains? For example when I press ctrl+shift+T it kinda knows that I want to open type, can it suggest me a correct key binding?
- How do I configure it to put semicolons into correct places automatically? :) WIthout it writing every line of code feels super unnatural.
- What’s the shortcut to select an expression (alt+shift+left_arrow)? This is essential to write code non-linearly, write something, select an expression, extract variable or method, or just cut/copy.

I know that it’s not the best place to ask, I’m just a bit jealous that everyone moves to intellij and are all happy and so productive and I struggle.

Oleg

- You can you Go to Action via Shift+Cmd+A, or Go to Class/File/Symbol via Cmd+N/Shift+Cmd+N/Shift+Alt+Cmd+N – whatever you wish. Go to Everything is coming in IJ 13.
- Two ways: 1. Use Eclipse keymap. 2, Get used to IJ keymap (recommended).
- Didn’t get what you mean. Please provide more details on the use-case.
- Use Cmd+W/Shift+Cmd+W. This works just perfectly.

Andrey Cheptsov

And in IJ keymap open class is Cmd-O (or Ctrl-O in non-Mac keymap IIRC).

iNikem

Ctrl+O shows me “select methods to override/implement”

Oleg

Look at shortcut in Navigate-Class menu

iNikem

I don’t do menus! I know about ctrl + shift + A! :) Which is super awesome by the way.

But in fact it’s ctrl + n / ctrl + shift + n to navigate to class. This also usually does a different thing in programs, mainly creates or open something new.

But maybe it’s just me.

Oleg

We use different keymaps and that’s okay. I’m used to Mac OS X keymap (it’s similar to Windows’ one), but most people suggest to use Mac OS X 10.5+ (this is more Mac-friendly).

Andrey Cheptsov

Thanks for the reply! Shift+Cmd+A is awesome, I think it might help me learn idea way much easier.

Ctrl+W also works, but that is a peculiar combination to hit, usually it closes things :)

About semicolons, Eclipse has “automatically insert semicolons and braces” under typing settings, makes my life so much easier. Actually, it’s hard to explain what I mean, maybe I just type slowly and code in a strange way :)

About shortcuts, I don’t want to use Eclipse keymap in Idea, that kinda defeats the purpose. But I would accidentally hit keys that don’t make sense, can I have a plugin that would tell me: ok, you just used eclipse combination, here’s how you do that in idea.

Anyway, thanks again for your response, now it is much easier to navigate menus, I’ll give it another try :)

Oleg

As for the braces and semicolons, use Shift+Cmd+Enter it will complete any statement and add corresponding braces and semicolons. By default the IDE adds only paired braces.

Andrey Cheptsov

I was an eclipse user for nearly 8 years too. I switched to IntelliJ for android development (android studio) and now at the office for web development I’m starting to use NetBean. I could say that once that you break the barrier these two IDEs are better than eclipse.
Great comment, Regards

Alexandro Blanco

Save actions – I believe this is because IntelliJ automatically saves on a regular basis, e.g. when the window loses focus, or if the application is idle for a few seconds (I think 15 is the default).

If you didn’t already know the layout shortcut, it’s ctrl-alt-L – this will also optimise imports. ctrl-alt-O gives you direct access to import optimisation, with a bunch of options to fine-tune this.

Steve Chaloner

Yes, IntelliJ has autosave which is pretty quick. In a matter milliseconds actually. What I miss is a way to press one shortcut, which would format code, organize imports, add missing annotations etc…

iNikem

You can actually apply code styles and optimize imports by pressing Alt+Cmd+L. Or you can configure to do it automatically on commit.

Andrey Cheptsov

Adding missing annotations?

It seems that I have to update the post… :) IntelliJ is even more awesome!

iNikem

As for the annotation, as far as I know, you can do it via inspections. By default they are enabled on commit. And you can apply a quick-fix for the whole project. But this to be checked.

Andrey Cheptsov

A! I have just remembered one thing that Eclipse does better :) Gradle plugin for Eclipse, written by SpringSource team, is in fact better. IIRC, it supports gradle DSL with autocompletion et al…

iNikem

Never used it in Eclipse, is it really good?

Andrey Cheptsov

Just refreshed my memory and checked. No :( Somewhat better than yours, but not really good :(

iNikem

I agree that’s what we are working on right now. Please feel free to suggest ideas for improvements.

Andrey Cheptsov

Just open any non-trivial Gradle build file and make at least autocompletion work. Gradle DSL autocompletion I mean. Just now it does not even recognise names of Gradle tasks

iNikem

I’m also used to ctrl-alt-L, but if you are using a version control system, there is an option(s) to ‘tell’ IDEA to optimize imports, reformat code and do code inspection on the fly, before submitting the code.

Duca

Yes, that is pretty handy :)

iNikem

Can't figure out what causes your OutOfMemoryError? Read more

Latest
Recommended
You cannot predict the way you die
When debugging a situation where systems are failing due to the lack of resources, you can no longer count on anything. Seemingly unrelated changes can trigger completely different messages and control flows within the JVM. Read more
Tuning GC - it does not have to be that hard
Solving GC pauses is a complex task. If you do not believe our words, check out the recent LinkedIn experience in garbage collection optimization. It is a complex and tedious task, so we are glad to report we have a whole lot simpler solution in mind Read more
Building a nirvana
We have invested a lot into our continuous integration / delivery infrastructure. As of now we can say that the Jenkins-orchestrated gang consisting of Ansible, Vagrant, Gradle, LiveRebel and TestNG is something an engineer can call a nirvana. Read more
Creative way to handle OutOfMemoryError
Wish to spend a day troubleshooting? Or make enemies among sysops? Registering pkill java to OutOfMemoryError events is one darn good way to achieve those goals. Read more