views:

7623

answers:

33

I have heard from people who have switched either way and who swear by the one or the other.

Being a huge Eclipse fan but having not had the time to try out IntelliJ, I am interested hearing from IntelliJ users who are "ex-Eclipsians" some specific things that you can do with IntelliJ that you can not do with Eclipse.

Note: This is not a subjective question nor at all meant to turn into a holy IDE war. Please downvote any flamebait answers. Thanks.

+2  A: 

IntelliJ has intellisense and refactoring support from code into jspx documents.

krosenvold
Could you clarify what you mean by intellisense? Eclipse has auto-completion as well, but do you mean something else?
Epaga
Eclipse does not have autocompletion in jspx documents AFAIK. In regular jsp yes, jspx no.
krosenvold
He means that if you have a JSP that refers to a property on a POJO, and you rename the property, your JSP is updated correctly. IntelliJ's JSP support kicks Eclipse/WTP!
erickson
I can't get Eclipse's auto complete to work in JSP EL expressions, period. JSP or JSPX, it doesn't matter, it's just clueless. IntelliJ handles tagx and jspx just as you'd expect: like a tag or jsp file.
erickson
Yes, that too ;)
krosenvold
Its nice to see how eclipse users vote down the things they dont like. If my observations are wrong, please respond with a comment. Tell me how to do this in eclipse !
krosenvold
+7  A: 

The IntelliJ debugger has a very handy feature called "Evaluate Expression", that is by far better than eclipses pendant. It has full code-completion and i concider it to be generally "more useful".

Mo
Eclipse also has an expression evaluator that offers code completion. Go to Window -> Show View -> Debug -> DisplayWhen stopped at a breakpoint in the debugger you can evaluate arbitrary expressions in that Display View.
laz
It's not as intuitive as IntelliJ's though...
Daniel Cassidy
so you were wrong
01
+10  A: 

IntelliJ has some pretty advanced code inspections (comparable but different to FindBugs).

Although I seriously miss a FindBugs plugin when using IntelliJ (The Eclipse/FindBugs integration is pretty cool).

Here is an official list of CodeInspections supported by IntelliJ

EDIT: Finaly, there is a findbugs-plugin for IntelliJ. It is still a bit beta but the combination of Code Inspections and FindBugs is just awesome!

Mo
yeah findbugs is one of the few static code analyzers that actually truly finds practical honest-to-goodness bugs. :)
Epaga
Do you have a specific example of its code inspection? What kind of stuff can it detect?
Epaga
Another link about inspections: http://hamletdarcy.blogspot.com/2008/04/10-best-idea-inspections-youre-not.html
Mo
I find IntelliJ's code inspection finds more bugs, has useful quick fixes, it can give warnings and fix lines as you type them. (You don't have to save the file and it doesn't have to compile) These niceties make it more practical to fix bugs as soon as possible.
Peter Lawrey
+8  A: 

Well, for me it's a thousand tiny things. Some of the macros, the GUI layout in general in Eclipse I find awful. I can't open multiple projects in different windows in Eclipse. I can open multiple projects, but then it's view based system swaps a bunch of things around on me when I switch files. IntelliJ's code inspections seem better. Its popup helpers to fix common issues is nice. Lots of simple usability things like the side bar where I can hover over a hot spot and it'll tell me every implementing subclass of a method or the method I'm implementing and from where.

Whenever I've had to use, or watch someone use, Eclipse it seems like they can do most of the things I can do in IntelliJ, but it takes them longer and it's clunkier.

Chris Kessel
+41  A: 

CTRL-click that brings you to where clicked object is defined works everywhere - not only in java classes and variables in java code, but in spring configuration (you can click on class name, or property, or bean name), in hibernate (you can click on property name or class, or included resource), you can navigate within one click from java class to where it is used as spring or hibernate bean; clicking on included JSP or JSTL tag also works, ctrl-click on javascript variable or function brings you to the place it is defined or shows a menu if there are more than one place, including other .js files and js code in html or jsp files.

Autocomplete in HSQL expressions, in hibernate configuration (including class, property and DB column names), in spring configuration

<property name="propName" ref="<hit CTRL-SPACE>"

and it will show you list of those beans which you can inject into that property.

Very smart autocomplete in java code:

interface Person {
    String getName();
    String getAddress();
    int getAge();
}
//---
Person p;
String name = p.<CTRL-SHIFT-SPACE>

and it shows you ONLY getName(),getAddress() and toString() (only they are compartible by type) and getName() is first in the list because it has more relevant name. Lastest version 8 which is still in EAP has even more smart autocomplete.

interface Country{
}
interface Address {
    String getStreetAddress();
    String getZipCode();
    Country getCountry();
}
interface Person {
    String getName();
    Address getAddress();
    int getAge();
}
//--- 
Person p;
Country c = p.<CTRL-SHIFT-SPACE>

and it will silently autocomplete it to

Country c = p.getAddress().getCountry();

Smart autocomplete in javascript.

function Person(name,address) {
    this.getName = function() { return name };
    this.getAddress = function() { return address };
}

Person.prototype.hello = function() {
    return "I'm " + this.getName() + " from " + this.get<CTRL-SPACE>;
}

and it shows ONLY getName and getAddress, no matter how may get* methods you have in other JS objects in your project, and ctrl-click on this.getName() brings you to where this one is defined, even if there are some other getName() functions in your project.

Lastest version has language injection, so you can declare that you custom JSTL tag usually contains javascript and it will highlight javascript inside it.

<ui:obfuscateJavaScript>function something(){...}</ui:obfuscateJavaScript>

Indexed search across all project. You can use Find Usages of any java class or method and it will find where it is used including not only java classes but hibernate, spring, JSP and other places. Rename Method refactoring renames method not only in java classes but anywhere including comments (it can not be sure if string in comments is realy method name so it will ask). And it will find only your method even if there are methods of another class with same name. Good source control integration (does SVN support changelists? IDEA support them for every source control), ability to create a patch with your changes so you can send your changes to other team member without commiting them.

When I look at HashMap in debugger's watch window, I see logical view - keys and values, last time I did it in eclipse it was showing entries with hash and next fields - I'm not really debugging HashMap, I just want to look at it contents.

It validates spring and hibernate configuration right when you edit it, so I do not need to restart server to know that I misspelled class name, or added constructor parameter so my spring cfg is invalid.

Last time I tried, i could not run eclipse on Windows XP x64.

Autocomplete and ctrl-clicking in JSP EL and JSF EL. Type <h:outputText value="#{person.<CTRL-SPACE>

and it will suggest you person.name or person.address. Ctrl-click on person.name and it will navigate you to getName() method of Person class.

Type Pattern.compile(""); put \\ there, hit CTRL-SPACE and see helpful hint about what you can put into your regular expression. You can also use language injection here - define your own method that takes string parameter, declare in IntelliLang options dialog that your parameter is regular expression - and it will give you autocomplete there as well. Needless to say it highlights incorrect regular expressions.

There are few features which I'm not sure are present in eclipse or not. But at least each member of our team who uses eclipse, also uses some merging tool to merge local changes with changes from source control, usually WinMerge. I never need it - merging in IDEA is enough for me. By 3 clicks I can see list of file versions in source control, by 3 more clicks I can compare previous versions, or previous and current one and possibly merge.

It allows to to specify that I need all .jars inside WEB-INF\lib folder, without picking each file separately, so when someone commits new .jar into that folder it picks it up automatically.

Did I mention autocomplete and ctrl-clicking in paths to files, like <script src="", <img src="", etc?

Autocomplete in html tag attributes. Autocomplete in style attribute of html tags, both attribute names and values. Autocomplete in class attributes as well. Type <div class="<CTRL-SPACE> and it will show you list of css classes defined in your project. Pick one, ctrl-click on it and you will be redirected to where it is defined.

Mentioned above is probably 10% of what it does. I do not use maven, flex, swing, ejb and a lot of other stuff, so I can not tell how it helps with them. But it does.

Pavel Feldman
The two examples about auto-completing java code work identically in eclipse. Could someone with more rep delete just the java examples please?
Craig P. Motlin
Most of your examples are available in Eclipse, either directly or via 3rd party plugins. I know of no one who uses an external tool for svn merge in Eclipse. For spring/hibernate/javascript editors (and autocomplete) there are 3rd party plugins. As for regex and jsp EL, you beat me :)
Yoni
Last time I saw JS plugin for eclipse, it definitely was better than nothing, but still not so powerful as IDEA. At least I did not saw autocomplete in one .js file using fields and methods from another one. May be things has changed,
Pavel Feldman
The Jboss Tools plugin adds autocomplete of Hibernate and JSF expressions.
Damo
For the eclipse debugging view there is an option to show the contents of the collections rather than the implementation details. For lists and sets, it'll show their contents. For maps, it'll show a list of key-value pairs. It's also possible to set custom displays up.
deterb
The Ctrl+Click also works in ant build xml+props file combinations :)
talonx
SpringIDE (that you can get bundled in Spring Tool Suite) gives you strong typing of Spring configuration file. No need to restart a server to check this at runtime. With all due respect to IntelliJ, there are just too much inexact information in this answer.
Pascal Thivent
"With all due respect to IntelliJ, there are just too much inexact information in this answer." It was written almost a year ago and it is community wiki, you are welcome to correct it. I don't use Eclipse that often, so I obviously may not know something about it.
Pavel Feldman
+13  A: 

Probably is not a matter of what can/can't be done, but how.

For instance both have editor surrounded with dock panels for project, classpath, output, structure etc. But in Idea when I start to type all these collapse automatically let me focus on the code it self; In eclipse all these panels keep open leaving my editor area very reduced, about 1/5 of the total viewable area. So I have to grab the mouse and click to minimize in those panels. Doing this all day long is a very frustrating experience in eclipse.

The exact opposite thing happens with the view output window. In Idea running a program brings the output window/panel to see the ouput of the program even if it was prevously minimized. In eclipse I have to grab my mouse again and look for the output tab and click it to view my program ouput, because the output window/panel is just another one, like all the rest of the windows, but in Idea it is treated in a special way: "If the user want to run his program, is very likely he wants to see the output of that program!" It seems so natural when I write it, but eclipse fails in this basic user interface concept.

Probably there's a shortcut for this in eclipse ( autohide ouput window while editing and autoshow it when running the program ) , but as some other tens of features the shortcut must be hunted in forums, online help etc while in Idea is a little bit more "natural".

This can be repeated for almost all the features both have, autocomplete, word wrap, quick documentation view, everything. I think the user experience is far more pleasant in Idea than in eclipse. Then the motto comes true "Develop with pleasure"

Eclipse handles faster larger projects ( +300 jars and +4000 classes ) and I think IntelliJ Idea 8 is works on this.

All this of course is subjective. How can we measure user experience?

OscarRyz
in eclipse you can press control-m to min/max the edit window, or double-click its editor tab - this helps a great deal
Scott Stanchfield
Wow... thanks a lot. It would be very helpful if eclipse had a way I know this ( beside reading the hotkey cheat sheet ) Thanks a lot. Is there a way yo change to the output window?
OscarRyz
ALT-SHIFT-Q brings up a Show View window... C is for consoleALT-SHIFT-Q, C is the shortcut to go to the console.
Instantsoup
Ctrl+Shift+L shows you a list of hotkeys available in the current context.
Dan Berindei
Great help. ( I hope not to forget it )
OscarRyz
+9  A: 

Structural search and replace.

For example, search for something like:

  System.out.println($string$ + $expr$);

Where $string$ is a literal, and $expr$ is an expression of type my.package.and.Class, and then replace with:

  $expr$.inspect($string$);
Darron
Actually you can search for the type casts /()-operator/ in your code, virtually impossible with plain text search
+8  A: 

If you have the cursor on a method then CTRL+SHIFT+I will popup the method implementation. If the method is an interface method, then you can use up- and down- arrows to cycle through the implementations:

Map<String, Integer> m = ...
m.contains|Key("Wibble");

Where | is (for example) where your cursor is.

oxbow_lakes
Actually in Eclipse (at least the version I'm using), when you put your cursor on the name of a method and hit CTRL+T you get the entire hierarchy tree, from the topmost interface down to the leaf implementations, and can jump to any of them.
Yuval
In Eclipse you can also Ctrl+Click the method name to jump to the method definition / implementation (depending on context)
qualidafial
The point is that you're not actually navigating to the implementation. It is just shown popup, just like javadoc etc.
jackrabbit
A: 

Two things that IntelliJ does that Eclipse doesn't that are very valuable to me:

Method separators: those faint gray lines between methods make code much more readable

Text anti-aliasing: makes code look so nice in the IDE

yalestar
I actually found IntelliJ's anti-aliasing to be much worse than Eclipse. This was a few versions of IntelliJ ago however. Has it been improved?
laz
I use a Verdana proportional font which I think looks nicer than using anti-aliasing.
Peter Lawrey
A: 

CTRL-SHIFT-N to open any file in your project.

swapnonil
Sorry - CTRL-SHIFT-R does the same in eclipse
Mo
Also Ctrl+Shift+T can opens any Type (i.e. java class) in your workspace/classpath
qualidafial
A: 

Show Navigation Bar ALT-Home.

swapnonil
+2  A: 

One very useful feature is the ability to partially build a Maven reactor project so that only the parts you need are included.

To make this a little clearer, consider the case of a collection of WAR files with a lot of common resources (e.g. JavaScript, Spring config files etc) being shared between them using the overlay technique. If you are working on some web page (running in Jetty) and want to change some of the overlay code that is held in a separate module then you'd normally expect to have to stop Jetty, run the Maven build, start Jetty again and continue. This is the case with Eclipse and just about every other IDE I've worked with. Not so in IntelliJ. Using the project settings you can define which facet of which module you would like to be included in a background build. Consequently you end up with a process that appears seamless. You make a change to pretty much any code in the project and instantly it is available after you refresh the browser.

Very neat, and very fast.

I couldn't imagine coding a front end in something like YUI backing onto DWR/SpringMVC without it.

Gary Rowe
+7  A: 

One thing I use regularly is setting a breakpoint, but then controlling what it does. (At my last job, most everyone else used Eclipse... I remember being surprised that no one could find how to do this in Eclipse.)

For example, can have the breakpoint not actually stop, but just log a message to the console. Which means, I don't have to litter my code with "System.out.println(...)" and then recompile.

jgindin
+6  A: 

Don't forget "compare with clipboard".

Something that I use all the time in IntelliJ and which has no equivalent in Eclipse.

Daniel Alexiuc
A: 

I don't remember if word/line/method/class wrap is possible in Eclipse

In Intellij Idea you use Ctrl-W

OscarRyz
Ctrl+W is actually extend selection. In Eclipse it is bound to Shift+Alt+Up (Shift+Alt+Down reduces selection.)
Micke
+2  A: 

A few other things:

  • propagate parameters/exceptions when changing method signature, very handy for updating methods deep inside the call stack
  • SQL code validation in the strings passed as arguments to jdbc calls (and the whole newly bundled language injection stuff)
  • implemented in/overwritten in icons for interfaces & classes (and their methods) and the smart implementation navigation (Ctrl+Alt+Click or Ctrl+Alt+B)
  • linking between the EJB 2.1 interfaces and bean classes (including refactoring support); old one, but still immensely valuable when working on older projects
Andrei
+9  A: 

Idea 8.0 has the lovely ctrl+shift+space x 2 that does the following automcomplete:

 City city = customer.<ctrl-shift-space twice>

resolves to

 City city = customer.getAddress().getCity();

through any number of levels of getters/setters.

krosenvold
pretty cool though anything more than two levels is quite the code smell... ;)
Epaga
+10  A: 

There is only one reason I use intellij and not eclipse: Usability

Whether it is debugging, re-factoring, auto-completion.. Intellij is much easier to use with consistent key bindings, options available where you look for them etc. Feature-wise, it will be tough for intellij to catch up with ecplise, as the latter has much more plugins available that intellij, and much easily extensible.

A: 

Something which I use in IntelliJ all the time is refactoring as I type. I have re-written classes from a printout (originally written in eclipse) using both IDEs and I used about 40% less key strokes/mouse clicks to write the same classes in IntelliJ than eclipse.

I wouldn't want to use Eclipse until they support as much refactoring with incomplete pieces of code.

Here is a longer list of features in IntelliJ 8.0/8.1 [http://www.jetbrains.com/idea/features/index.html]

Peter Lawrey
+8  A: 

Far, far, far more refactorings.

A: 

I not have coded a lot with IntellijIdea, but in IntellijIdea you can see where a block of code between brackets (if, try/catch, cycle, etc) begins and where finish.

In Eclipse (I code in Eclipse 3.2) you can identify the block only manually.

alepuzio
what do you mean by "manually"? In Eclipse, you have indeed to put the cursor on the { (or } ) to know where is the } (or { ). Another interesting thing is to double-click just *after* the { of a block. It will automatically select the whole { ... } block.
romaintaz
In Eclipse, if you have a block very long (I see block by 100-200 lines) you must use the mouse for well see the block. IntellijIdea print a red line in left side(at least, I remember this).I think that's a more confortable with long block.
alepuzio
+1  A: 

Preamble to my answer: My use of Eclipse is limited. We needed a Java IDE to work on both Windows and Mac and the Mac port slowed down day by day. This was years ago and I'm sure it's OK now. But that is what got us to switch to IntelliJ and we've been happy with it.

Now for my answer: One big difference I haven't seen mentioned yet is that tech support is better with IntelliJ/Jet Brains. We send an e-mail to JetBrains and get a definitive answer back in less than an hour. Looking for answers to Eclipse problems results in the usual, "You stupid idiot" answers (usually a small number of the replies) along with the much larger number of insightful, helpful replies. But it takes some sorting through to get the real answer.

Jim Dodd
+4  A: 

My favorite shortcut in IntelliJ that has no equivalent in Eclipse (that I've found) is called 'Go to symbol'. CTRL-ALT-SHIFT-N lets you start typing and glob up classes, method names, variable names, etc, from the entire project.

Paul Morie
+1  A: 

Introduce variable. (Ctrl+Alt+V on Windows, Cmd+Alt+V on OSX) Lets say you call a method, service.listAllPersons() Hit Ctrl+Alt+V and Enter, and variable for return value from method call is inserted: List list = service.listAllPersons();

Saves you typing, and you don't have to check the return type of the method you are calling. Especially useful when using generics, e.g. new ArrayList()

[introduce variable]

--> ArrayList stringArrayList = new ArrayList();

(of course you can easily change the name of the variable before hitting Enter)

rlovtang
This is Ctrl+2 L in Eclipse.
Micke
Nice, I didn't know, and neither did any of the Eclipse users I have asked. Has this feature been part of Eclipse for a long time?
rlovtang
A: 

Open a project from a Maven POM. Just select "Open project..." navigate to your top level pom.xml and hit Enter :) NetBeans now has this feature as well.

rlovtang
For Eclipse a plugin is needed for this feature. http://m2eclipse.sonatype.org/
Micke
A: 

I have discovered recently at least two advanteges of IntelliJ IDEA over Eclipse.

If one tries to use code formating in the JSP code editor the JSP scriptlets get broken. Eclipse is getting a little bit crazy, it ads random pieces of code here and there. IDEA behaves very nicely.

The other thing is speed of deployment of the application on the JBoss Server. IntelliJ is replacing the application in the JBoss's tmp folder, so the redeployment is really fast. Eclipse WTP is replacing application in the deploy folder, which, as it turns out, lasts much longer.

Piotr Kochański
+1  A: 

Intellij has a far superior SVN plug-in than either Subversive or Subclipse and it works! The amount of time we've wasted merging source files using Eclipse doesn't bear thinking about. This isn't an issue with IntelliJ because the plugin helps you much more.

Also the Subclipse plugin is unreliable - we regularly have instances where the plugin doesn't think there has been any code checked in to SVN by other developers, but there has - the CI server has processed them!

Tony Ruddock
A: 

For me, it's IDEA's maven support, especially in version 9 is second to none. The on-the-fly synchronizing of the project to the maven model is just fantastic and makes development pleasant.

mdma
+3  A: 

There are many things that idea solves in a much simpler way, or there's no equivalent:

  • Autocomplete actions: Doing ctrl+shift+a you can call any idea action from the keyboard without remembering its key combination... Think about gnome-do or launchy in windows, and you've got the idea! Also, this feature supports CamelCasing abbreviations ;)

  • Shelf: Lets you keep easily some pieces of code apart, and then review them through the diff viewer.

  • Local history: It's far better managed, and simpler.

  • SVN annotations and history: simpler to inspect, and also you can easily see the history only for such a part of a whole source file.

  • Autocomplete everywhere, such as the evaluate expression and breakpoint condition windows.

  • Maven integration... much, much simpler, and well integrated.

  • Refactors much closer to the hand, such as loops insertion, wrapping/casting, renaming, and add variables.

  • Find much powerful and well organized. Even in big projects

  • Much stable to work with several branches of a big project at the same time (as a former bugfixer of 1.5Gb by branch sources, and the need to working in them simultaneously, idea shown its rock-solid capabilities)

  • Cleaner and simpler interface...

  • And, simpler to use only with the keyboard, letting apart the need of using the mouse for lots of simple taks, saving you time and giving you more focus on the code... where it matters!

And now, being opensource... the Idea user base will grow exponentially.

Serginho
+1  A: 

Data flow analys : inter-procedural backward flow analysis and forward flow analysis, as described here. My experiences are based on Community Edition, which does data flow analysis fairly well. It has failed (refused to do anything) in few cases when code is very complex.

Ville Laitila
+1  A: 

VIM Emulator. This plugin provides nearly complete vi/vim/gvim emulation while editing files in IDEA. The following functionality is supported:

  • Motion keys
  • Deletion/Changing
  • Insert mode commands
  • Marks
  • Registers
  • VIM undo/redo
  • Visual mode commands
  • Some Ex commands
  • Some :set options
  • Full VIM regular expressions for search and search/replace
  • Macros
  • Diagraphs
  • Command line history
  • Search history
  • Jumplists
  • VIM help

some comments about this plugin from http://plugins.jetbrains.net/plugin/?id=164

I can't see ever going back to any other ide because of this plugin.. Best of both worlds... Awesome!. that's what i was lacking in all IDEs.
Maciek Kreft
I agree, I couldn't live without my IdeaVim plugin, however to be fair there is a Vim plugin for Eclipse, aptly named VimPlugin (http://vimplugin.org)
Keith
+1  A: 

My timing may be a little off in terms of this thread, but I just had to respond.

I am a huge eclipse fan -- using it since it's first appearance. A friend told me then (10+ years ago) that it would be a player. He was right.

However! I have just started using IntelliJ and if you haven't seen or used changelists -- you are missing out on programming heaven.

The ability to track my changed files (on my development branch ala clearcase) was something I was looking for in a plugin for eclipse. Intellij tracks all of your changes for a single commit, extremely easy. You can isolate changed files with custom lists. I use that for configuration files that must be unique locally, but are constantly flagged when I sync or compare against the repository -- listing them under a changelist, I can monitor them, but neatly tuck them away so I can focus on the real additions I am making.

Also, there's a Commit Log plugin that outputs a text of all changes for those SCCS that aren't integrated with your bug tracking software. Pasting the log into a ticket's work history captures the files, their version, date/time, and the branch/tags. It's cool as hell.

All of this could be supported via plugins (or future enhancements) in eclipse, I wager; yet, Intellij makes this a breeze.

Finally, I am really excited about the mainstream love for this product -- the keystrokes, so it's painful, but fun.

G Craig
A: 

There is one thing that IntelliJ does much much better than Eclipse and that is empty your pockets!

I do however prefer using it and one big advantage it has over Eclipce is the way it synchronises with the file system, for big projects and slow computers (yes in work environments the PC's are a lot slower than our ones at home) Eclipse seems to struggle where IntelliJ seems to be quicker albeit with a slower initial indexing time.

IntelliJ Community edition obviously makes using it free but you soon want those extra refactoring and nice little goodies not included in the CC edition.

In my opinion, its generally a better user experience but whether its worth the cost is a question for each developer to answer themselves.

But lets be grateful we have up to three great IDEs for Java right now with NetBeans getting better all the time.

Shawn
IntelliJ Ultimate Edition is indeed not free, but as a developer, I use my IDE about 8 to 10 hours a day. So I don't see his reasonable price as a flaw!!
romaintaz