Eclipse 3.2 M4 - Old and Already Implemented

An annotated version of "Eclipse 3.2 M4 - New and Noteworthy"

by

Some people think that because Eclipse is better than Visual Studio, it must be the best there is. I've made a table out of the Eclipse 3.2 M4 "New and Noteworthy" document which lists new features and describes which competitor already had that feature. Some features are indeed new, and are not implemented by any other product; however, most "new" features were already present in existing tools and frameworks (mainly in Swing and IntelliJ IDEA).

You may want to read the original Eclipse 3.2 M4 New and Noteworthy.

Eclipse Feature
(from New and Noteworthy document)
My Comparison

Platform UI


[omitted eclipse-specific features]

JFace field assistance

JFace introduces new support for assisting the user in completing fields inside dialogs and forms. The org.eclipse.jface.fieldassist package provides classes that let you decorate arbitrary controls with images and corresponding hover text. These can be used for purposes such as marking required fields in a dialog, showing field-based error conditions, or showing content-assist prompts. The package also allows you to install content proposals on a control, including a popup dialog with content proposals, secondary popups for further information, and options for invoking proposals explicitly or in an automatic (type-ahead) style. Try it out and get your requests in before the M5 API freeze!

(Swing does not provide an automated framework for such popups and tooltips.)

User Assistance


[omitted eclipse-specific features]

SWT


HSB color support

A color can be created by specifying the hue, saturation, and brightness. In addition, for a given color, the hue, saturation, and brightness values can be queried.

For an example, see the SWT snippet

HSB support has been in AWT since Java 1.1, and is present in the Swing color chooser. See Color.HSBtoRGB

StyledText alignment, indentation, justification

StyledText now supports indenting, justifying and aligning text.

For an example, see the SWT snippet

Swing has supported indentation and justification since Swing 1.0 in JDK 1.1. See ParagraphConstants for example.

Embedded objects in StyledText

StyledText now allows you to embed objects such as images or widgets inside the text. Objects wrap with the text.

For an example, see the SWT snippet

Any Swing or AWT component can be embedded into text components since Swing 1.0 in JDK 1.1. See JTextPane.insertComponent

Background image

A background image can be set into a control. In addition, the background can be inherited by child widgets such as labels.

For an example, see the SWT snippet

(Neither Swing nor AWT provides a method to easily set a background image.)

Any Swing component can be given a background image by overriding the component class.


Native image loading

The constructor Image(Device device, String filename) will now load images using native operating system calls. This has improved performance of image loading and increased the maximum size of image that can be loaded.

(AWT and ImageIO do not use native image loading calls.)

Dragging text

If the SWT.DragDetect event is hooked on Text or StyledText, the selection will not be cleared when the user drags from within a selected range of text. This makes it possible to support dragging from the Text and StyledText widgets.

For an example, see this SWT snippet

Swing text components have supported drag and drop since Java 1.4, released 3 years ago.

Team/CVS


[omitted - I am not familiar with CVS or either IDE's support for it]

JDT Core


Support for secondary types

Secondary types (i.e. top-level types defined in a file with a different name than the type) are now found by the reconciler, code assist, etc.

picture of Java perspective with secondary type

This language feature has been supported in almost every IDE since their first releases.

Completion on labels

Code completion is now available on labels in break and continue statements.

picture of Java editor completing on a label

Label completion is present in IntelliJ IDEA 5.0.

CamelCase support in code completion

Code completion now supports CamelCase patterns. For example, completing on "NPE" will propose "NullPointerException". This support can be enabled or disabled using the Java > Editor > Content Assist > Match CamelCase proposals preference.

picture of Java editor completing on NPE

Present in IntelliJ IDEA 5.0, released six months ago.

Support for Java-like extensions

Files with a file extension other than '.java' and containing pure Java code are now supported. Adding a Java-like extension is done using the General > Content Types > Text > Java Source File preference.

picture of Java perspective with Y.abc compilation unit

All file types are configurable in IntelliJ IDEA for many years.

Resources


Linked resources anywhere

You can now create linked resources at any depth within your projects. This allows you to put resources from different places in the file system anywhere you like in the project structure, including below other linked resources.

(IntelliJ IDEA does not support linked resources in this way.)

JDT UI


Clean Up wizard

The Code Clean Up wizard has been extended with the following new options:

  • Remove unused private field
  • Remove unused local variable
  • Convert for loops to enhanced for loops
  • Convert control statement body to block
  • Qualify access to static field with declaring class
  • Change indirect access to static member to direct access

Select a project, package, or file and start Source > Clean Up... to start this wizard.

"Clean up" is not present in IntelliJ IDEA. Equivalent inspections & quick fixes are available in the editor as warnings, and in batch mode as reports. These inspections have been present since various versions of IntelliJ IDEA.

Surround-with template

The existing Surround With Quick Fix is now aware of variables that need to be pulled out or made final. Select the lines to surround (full line selection required!) and press Ctrl+1 to see all templates.

Surround with runnable code transformation

Note that you can add your custom 'surround-with' templates on the Java > Editor > Templates page. All the template needs is a ${line_selection} variable.
This feature is partly present in IntelliJ IDEA: Surround With will extract variable definitions from surrounded code if necessary, but will not make variables final. The feature has been present for several years.

Content Assist remembers right hand sides

Content assist (Ctrl+Space on most platforms) remembers the types most recently used in similar situations. For example, if you always assign ArrayList instances to List variables, the ArrayList proposal will rank higher than other type proposals. Also, the remembered types will be shown even if there is no prefix.

Screenshot: Invoking content assist to assign a List variable shows proposals for the most recently used List implementations

IntelliJ IDEA orders or preselects by usage in all completion and import popups since version 4.0, released 2-3 years ago.

Rename Type updates similarly named elements

The Rename Type refactoring has been extended to rename variables and methods with names similar to the renamed type. Name matching can be configured with a new option dialog. There is also a new preview page which shows all affected elements.

Update Similar Declarations UI

This feature is partly present in IntelliJ IDEA: it offers to rename variables and getters and setters, but not all methods.

Delete Package is now hierarchical

Deleting a package now automatically removes empty parent packages. A new option in the delete confirmation dialog allows deleting subpackages as well.

Hierarchical Package Delete

Recursive deletion has been present in every commonly used filesystem, file explorer, and IDE, for over 20 years.

Refactoring-aware JAR File Import/Export

The current refactoring tools of JDT have been extended to support applying refactorings across different workspaces.

Refactoring information can now be exported using the JAR Export Wizard. This feature can be enabled on the first page of the JAR Export Wizard by checking the option Annotate JAR file with refactoring information.

JAR Export Wizard

A corresponding JAR Import Wizard is available as well, guiding the user through the process of updating an existing version of a JAR file with a new one, executing all refactorings performed between the two versions of a JAR library.

This works for the following refactorings:

  • Rename Package, Type, Method, and Field
  • Move Method
  • Change Method Signature
(Reapplying a refactoring log is not present in IntelliJ IDEA.)

Javadoc view and tool tips from attached Javadoc

The Javadoc view and the Javadoc hovers now extract the information from the attached Javadoc for libraries that do not have source attached. IntelliJ IDEA has extracted Javadoc from generated HTML since version 4.0, released 2-3 years ago.

Java Outline view and Quick Outline for Java files that aren't in the workspace

The Java Outline page and the Quick Outline can now show the outline for external Java files and Java files from repositories. (IntelliJ IDEA does not offer outlines for files outside the project.)

Smart caret positioning in dialogs showing Java names

Text fields for editing Java names now support smart caret positioning as you know it from the Java editor.

Ctrl+Left and Ctrl+Right now stop at camel case boundaries inside a name. Their shifted equivalents extend the selection in small steps, and Ctrl+Delete / Ctrl+Backspace delete the next / previous part of a name.


Smart caret positioning in dialog
Ctrl+Right:
Smart caret positioning in dialog
Ctrl+Shift+Right:
Smart caret positioning in dialog
write "Equal":
Smart caret positioning in dialog
Ctrl+Delete:
Smart caret positioning in dialog
write "To":
Smart caret positioning in dialog
IntelliJ IDEA has provided rich editing in dialogs gradually since version 3.0, released 5 years ago. Today, most code or symbols in dialogs are edited with a rich editor with camel case, completion, auto-import, and so on.

Quick fixes for annotations

New quick fixes have been added to deal with Java 1.5 annotations:

  • Add a missing annotation attribute
    Quick fix for missing annotation attribute
  • Add a new annotation member
    Quick fix for new annotation member
(IntelliJ IDEA does not offer these quick fixes.)

Platform Runtime


[omitted eclipse-specific features]

Debug


Execution environments

You can now specify a JRE to use for running, debugging and building based on execution environment. An execution environment describes the capabilities of a Java runtime - for example, J2SE-1.4. The new Execution Environments preference page displays the JREs installed in your workspace compatible with each execution environment. JREs that meet the exact requirements of an execution environment are displayed in bold, and JREs that surpass the requirements of an environment are displayed in the default font. When more than one JRE is compatible with an execution environment, you can select a default JRE to use for that environment by checking it.

A build path or launch configuration that references an execution environment is more portable than one that references an explicit JRE as a JRE's execution environment can be resolved independently of its name. Use the JRE tab or Edit Library wizard to specify an execution environment for running and building.

(This JRE abstraction mechanism is not present in IntelliJ IDEA. JRE's must be specified manually.)

PDE


[omitted eclipse-specific features]

Structural compare and syntax highlighting for manifest.mf files

When comparing two versions of a bundle manifest.mf file, the new structure compare viewer will let you easily see what headers have been added, removed or modified.

Syntax highlighting has also been added to the manifest.mf source page. Colors and fonts preferences can be set on the Plug-in Development > Editors preference page.

(Structural compare is not present in IntelliJ IDEA.)

IntelliJ IDEA supports syntax highlighting in manifest files through a free plugin.

Templates for launching arguments

[omitted]

Update


Install/Update enhancements

[omitted]