Tuesday, May 10, 2011

Eclipse Day India 2011


Anshu Jain started of the day with an excellent talk Eclipse - A Framework of Frameworks. In his talk he went through the design of a very simple calculator framework to explain all the things that Eclipse does - extensions, dynamic loading, plugin discovery etc. There was also a .cff file (calculator framework format) equivalent to plugin.xml in Eclipse. The example code from his talk is available at his site - highly recommended for someone starting of with plug-in development.

Ankur followed up with another great talk Good Practices for Plug-in Developers.  Some of the images he used to drive his point home were really funny and awesome. I thought my session JDT Bootcamp (JDT Tips and Tricks, and Extending JDT) went well, of course the fact that Satyam did a fantastic job of explaining the Java Model and the Search APIs helped a great deal.

There was a lot of interest in What's new in Java 7 talk by Ayush (the guy with the funny pose in the above pic), which was nice to see. After this Praveen talked about his experience at Adobe with migrating a Eclipse 3.x application to Eclipse 4.x platform. It was nice to hear that Adobe wants to stay on the latest Eclipse platform and has made considerable progress in this regard.

The day ended with an interesting talk about Eclipse UOMo project. Werner Keil gave a few funny examples on what can go wrong if the proper care is not taken in consistently interpreting the units, for e.g. if one team uses inches and feet and the another team interprets the values as meters and centimeters. The image of an upside down NASA shuttle because someone messed up the measurement units will always stay in my mind :)


Lastly a big thank you to SAP Laps for hosting the event! You have been a great host for Eclipse Day India 2011 and the demo camp in Nov 2010. However I would like to see the next Eclipse event in Bangalore hosted at a different venue - just for variety :) Maybe other organizations can step forward. 

I almost forgot, the 'discussion' over drinks in the evening with fellow Eclipse committers and Eclipse users was 'entertaining' ;-) Those who could not join us for drinks, please do next time.

Monday, May 2, 2011

Eclipse JDT and Java 7

Will Eclipse 3.7 include support for Java 7?
Short answer: No
Slightly longer answer: "Due to late availability of JSR-292 (Invoke Dynamic) and JSR-334 (Project Coin) and due to the official release date (July 28, 2011) of Java 7 being after 3.7 ships we had to defer the Java 7 support to 3.7.1. It has not yet been decided whether this will be available as part of the 3.7.1 downloads or as separate feature update.

The work for the Java 7 features is currently in progress in the 'BETA_JAVA7' branch and we will deliver separate updates for the stable builds in order to provide early access to the Java 7 features for interested parties."
See bug 288548.

What is the current status of support for Java 7 in JDT ?
Take a look at the wiki page: http://wiki.eclipse.org/JDT_Core/Java7

I want to try some of the new features of Java 7 in Eclipse
At this point in time you will need to
  • Create a new CVS repository location to:
    • :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse
  • Check out the following projects from BETA_JAVA7 branch:
    • org.eclipse.jdt.core
    • org.eclipse.jdt.ui
  • Launch another eclipse application from this workspace or export the two plugins into the host eclipse.
  • Of course you will also need to install a JDK7 build as an installed JRE.

Thursday, April 28, 2011

Debugging Eclipse builders

Do you think Eclipse builds too often ? Do you think Eclipse build too much ? At least I do, or maybe I just got tired of seeing 'Building workspace: (12%)' in the status bar. Anyway I decided to see for myself what the heck the builders were doing.

I use JDT and PDE which means there are two builders of interest
  • Java Builder
  • API Analysis Builder
There are also Plug-in Manifest Builder and Extension Point Schema Builder, but I think these two do not do much and hence do not take much time.

To know what these two builders are doing in your running Eclipse instance two things are required
  • Start Eclipse with -debug option, to me more precise I used the following to redirect the debug output to a file as the debug output can grow large very soon and overflow the console buffer
    •  eclipsec –debug > log.txt
  • Enable debug options for three plug-ins (details below)
    • org.eclipse.core.resources
    • org.eclipse.jdt.core
    • org.eclipse.pde.api.tools
All three plug-ins ship a .options file containing all the debug options provided by these plug-ins, just open the the corresponding jars in your eclipse installation to get the .options files. Create a single .options file from these and place it in the same directory as eclipsec.exe before starting eclipse.

I had the following options set to true in my .options file
###################################################################
# Turn on debug tracing for org.eclipse.jdt.core plugin
org.eclipse.jdt.core/debug=true

# Reports java  builder activity : nature of build, built state reading, indictment process
org.eclipse.jdt.core/debug/builder=true

# Reports java builder stats
org.eclipse.jdt.core/debug/builder/stats=true

###################################################################
# Debugging options for the org.eclipse.core.resources plugin.

# Turn on debugging for the org.eclipse.core.resources plugin.
org.eclipse.core.resources/debug=true

# Reports the start and end of all builder invocations
org.eclipse.core.resources/build/invoking=true

# Reports the start and end of build delta calculations
org.eclipse.core.resources/build/delta=true

# For incremental builds, displays which builder is being run
# and because of changes in which project.
org.eclipse.core.resources/build/needbuild=true

# Prints a stack trace every time an operation finishes that requires a build
org.eclipse.core.resources/build/needbuildstack=true

###################################################################
# Turn on debug tracing for org.eclipse.pde.api.tools plugin
org.eclipse.pde.api.tools/debug=true

# Reports incremental builder activity : nature of build, indictment process,...
org.eclipse.pde.api.tools/debug/builder=true

# Print notified compatibility deltas
org.eclipse.pde.api.tools/debug/delta=true

# for the tag scanner
org.eclipse.pde.api.tools/debug/tagscanner=true

# for API profile
org.eclipse.pde.api.tools/debug/apiprofile=true

#for api analyzer
org.eclipse.pde.api.tools/debug/apianalyzer=true

#for our workspace delta processor
org.eclipse.pde.api.tools/debug/workspacedeltaprocessor=true
###################################################################

So far I have found a few scenarios where the builders could do less work - Bug 344090, Bug 344110, Bug 344163, Bug 344137. I think there are more issues, but getting a reproducible test case is proving to be a little hard in some cases.

JDT at Eclipse Day India

Satyam and I will be speaking at Eclipse Day India 2011 in Bangalore next week. We have one session JDT Bootcamp. This session consists of two parts. 

JDT - Tips and Tricks (30 min) - In the first 30 mins we will show off useful tips and tricks when working with JDT and Eclipse in general such as tricks in content assist, Java Editor tips, code navigation and debugging aids. 

Extending JDT (60 min) - In the next one hour, we will take you through APIs and extension points that JDT exposes to enable you to extend and customize the Java tooling. Using these APIs, one could create their own cleaunps, refactorings, quick fixes and other utilities.

You may also be interested in Ayush's talk What's new in Java 7 (30 min). This talk intends to describe new features of Java 7 such as switch on strings, binary integral literals and underscores in numeric literals, multi-catch and precise rethrow, diamond, try with resources, etc. The talk will also be interesting to those who want to know the status of Java 7 work in Eclipse compiler.

The three of us will be around the whole day, and would love to answer any questions or get into interesting discussions around JDT :)

See you at Eclipse Day!

Monday, April 25, 2011

Evaluating expressions in JDT Debugger


You can use the Display View to type in an expression and evaluate it in the context of the current stack frame. (The name Display is not great - see bug 342144).

- Use content assist to type expressions

- Select the expression and use Ctrl+Shift+I (Inspect) to show the result in a pop-up. You can also invoke the Inspect command from the context menu.

- Press Ctrl+Shift+I again to persist the result in the Expressions view.

See also Eclipse help.

Tuesday, March 8, 2011

JDT at EclipseCon 2011


Raksha Vasisht and I will be speaking at EclipseCon 2011 in Santa Clara. We have the following 2 talks

What's new in JDT
Monday, March 21 14:00 - 14:20, Stevens Creek

JDT - Tips and Tricks
Tuesday, March 22 14:00 - 14:20, Stevens Creek

We are also organizing a Bof
Eclipse - Tips and Tricks
Wednesday, March 23 19:30, Sonoma

See you soon at EclipseCon !

Sunday, February 6, 2011

JDT 3.7 M5 - New and Noteworthy

This time there are a bunch of interesting items in the debug area

There is now a history for recently used breakpoint conditions:

The global history shows the saved conditions across all conditional breakpoints, while the local history shows the history of one particular breakpoint.

In the Java editor, if you delete a breakpoint that has a condition set on it, you will now be prompted before the breakpoint gets deleted:

You can specify that you would not like to be notified again when trying to remove a conditional breakpoint. This can later be changed again via Prompt for confirmation when deleting a conditional breakpoint from editor on the Java > Debug preference page.


If you accidentally removed a breakpoint from the editor's vertical ruler or the Breakpoints view, you can now get it back using the standard undo functionality - Edit > Undo Delete Breakpoint (Ctrl+Z) - in the Breakpoints view or any other view that works against the global undo history.


The Add missing case statements quick assist is now available in the body of the switch statement:


The Quick Outline shows inherited members of top-level types when Ctrl+O is pressed twice. Now, it also shows inherited members of the type that contains the current editor selection:


The focus types that can show inherited members are marked with a triangle.


Two new compiler options have been added that mark methods which can be made static because they only refer to static members.


The first option marks private and final methods than can always be made static. The second option also marks other methods. Note that methods can be overridden in a subclass, so if you make a "potentially static" method static, this may break existing clients. These options are disabled by default.

Another interesting feature in the SDK is detached editors. This can be really useful in a dual monitor setup.

 Though while trying this out I 'lost' a couple of editors before filing Bug 336391