Basic Software Development with Eclipse
In Lab 1 you learned Eclipse basics; today you'll learn about more advanced software development features:
Initial Setup
We'll be working with Freemind, a medium-sized (50 KLOC) open source application. You will need 65 MB of available space (or find a partner who does). On the composer machines, you should have no more than 37000 KB used (quota -v
).
Setup instructions for composer machines (can be adapted to other OS's):
Download & extract Freemind
-
Open a terminal and navigate to the file (most likely in 'Desktop')
Unzip & untar (gunzip freemind-src-0.9.0_RC_4.tar.gz;
tar xvf freemind-src-0.9.0_RC_4.tar
)
If space is tight, delete the tar file once extracted (rm freemind-src-0.9.0_RC_4.tar
)
Import Freemind into Eclipse
open eclipse (eclipse &
)
Select File > New > Java Project
Name the project “freemind”, and select “create from existing source”
Browse to your freemind folder (e.g., $USER_HOME/Desktop/freemind
)
Running Freemind
Freemind is mind mapping software often used for knowledge and content management. It's a hierarchical editor that supports “folding”–that is, collapsing and expanding sections of the hierarchy. Today we'll focus on understanding how the folding functionality is implemented.
The easiest way to understand the concept of folding is to try it out:
In the package explorer, right click on the freemind folder & select “Run As > Java Application”
Select “freemind.main.FreemindStarter” as the main class to execute (ignore errors written to console)
Create a new mind map about Software Engineering:
Select a middle node (not leaf or root) and attempt to fold it. There are 3 ways to change a node's folding status:
Using the type & call hierarchy to understand code
Call Hierarchy
The call hierarchy shows calling relationships between methods in a program. For example:
Navigate to the method toggleFolded(ListIterator listIterator)
in class freemind.modes.minmapmode.actions.ToggleFoldedAction
Right click the method name and select “Open Call Hierarchy”
Look at the callers
and callees
Going back to the callers, expand toggleFolded
& toggleFolded
again. Look at the callers of actionPerformed
.
Try looking at the callers of other methods, such as nameSetFolded
What information does the call hierarchy give you? Why is it useful for understanding a program?
Type Hierarchy
The type hierarchy shows how types are related. For example:
What information does the type hierarchy give you? Why is it useful for understanding a program?
Exercise: Show me an interesting call hierarchy and type hierarchy on your own project code (where “interesting” = more than 3 nodes)
Basic Refactoring
What is refactoring? Why use it?
Rename
Right click on toggleFolded
and select “Refactor > Rename”
Add your name at the end of toggleFolded
Verify your change is complete by looking at the call hierarchy & double clicking the callers
Why rename?
In the renamed toggleFolded
, select the 3 statements (6 lines) starting with modeController.getAction…
Right click & select “Refactor > Extract Method”
Enter a name (e.g., “initiateToggleAction”) and hit enter
Why extract methods?
Debugging in Eclipse
What's debugging? What's a debugger?
Task: How does the UI toggle folding action (click, space, etc.) initiate the toggleFolded
implementation?
In the margin next to toggleFolded
, right click & select “Toggle Breakpoint”
In the menubar, select “Window > Open Perspective > Debug”
Make sure freemind isn't running
Next to the green “play” arrow, select the green bug icon
- there will be some delay
Toggle a node. Notice the upper-left “Debug” pane, investigate the upper-right “Variables” pane, and see the current statement in the editor pane. The arrows in the debug pane
let you step through the execution by one method call, by one statement, or by returning.
Exercise: Show me a debugging trace for toggleFolded
. Which method calls in the trace do you think handle your input method (click, space, right click, etc.)?