AspectJ Browser GUI tool for compiling programs with ajc and navigating the crosscutting structure Overview The AspectJ Browser can edit program source files, compile using the AspectJ compiler ajc, run a program, and graphically navigate the program's crosscutting structure. Launch the browser from the command line either by typing "ajbrowser" to invoke the script in {aspectj}/bin (if AspectJ is installed correctly) or by using the aspectjtools.jar directly: java -jar aspectj1.1/lib/aspectjtools.jar ... Program Build Configurations To work with a particular program, point the AspectJ browser to the program source files listed in a ".lst" build configuration file. (Build configuration files are described in the documentation for ajc.) Open a build configuration file from the GUI using the File menu, "open" item, or by using the "Open Build Configuration" button ( ). From the command line you can also pass any number of ".lst" paths. (If you pass in any non-".lst" arguments, it will run the command-line compiler directly.) You can work with multiple build configurations; select, add, or remove them using the corresponding toolbar buttons. Global build options are stored in an .ajbrowser file in your HOME directory. Edit these from the GUI by clicking the "Options" button or selecting the Tools menu item "Options...". This is how you can set classpath, aspectpath, etc. (ajbrowser, unlike ajc, does not support setting these options from the ".lst" files.). Compiling a Program Build Configuration To compile click the "Build" button ( ), or click <ctrl>F11. You may select from different build configurations in the GUI (see label 1 in the graphic below). (If you get classpath or other errors, set up the global build options as described above.) Navigating the Program Structure Select nodes in the program structure by clicking them (see label 2). If one node is related to one or more other nodes by an association the name of the association will appear below that node and will be displayed in italics. Links to other structure nodes appear in blue below the association. If there is no corresponding source for the link it will appear light-blue. Example: Exploring the "Spacewar" sample code Launch ajbrowser Choose "File -> Open" or click the "Open Build Configuration" button ( ) and select the configuration file for debugging the spacewar example, in examples/spacewar/debug.lst. Click the "Build" button ( ) to compile. The left pane should fill with a spacewar declaration tree. If there is a compiler error, the clickable error message shows up as in label 4. Note: If you did not install in the default location, the compile will fail with a message that you need to install aspectjrt.jar on your compile classpath. To do that, select "Tools -> Options" or click the "Options" button ( ). Click the Build Options tab to view the Build Paths pane. Edit the classpath entry to use your install location, ok the dialog, and retry the compile. Different structure views: The structure tree at the left can display different orderings and granularity for structure: The package hierarchy view shows the traditional hierarchy of package, class, and members. The inheritance view shows the hierarchy from topmost parent classes through subclasses to members. The crosscutting view shows the aspect members and the code they affect. Additional buttons in the pane can be used to change the granularity and filter out items. Whenever you select an item in the tree view, the source pane scrolls to that item. If you select a leaf item representing another program element, then the tree selection will go to the corresponding node. (See below for how to use two panes to maintain your place.) When working with aspects, it helps to be able to navigate between different program elements: When looking at a method, find the advice that affects it. When looking at a pointcut, find the advice that uses it. When looking at advice, find what it advises - e.g., method calls or executions, initializers, etc. When looking at a type, find any aspects that declare members or supertypes of the type, or vice-versa. You can view the advice on a particular method using the default, hierarchical view. Navigate to the tree item for spacewar.Registry.register(SpaceObject) in the debug.lst config file. Now, in the lower, file view, you can see and navigate to the advice using the subtree whose parent is the method affected by relation. You can also use crosscutting view to see the advice using a pointcut or the methods affected by advice. For example, to see what advice uses a particular pointcut, navigate to the tree item for the pointcut spacewar.Debug.allConstructorsCut() in the debug.lst config file. You can see and navigate to the advice that uses the pointcut using the pointcut used by relation. As an example of seeing the methods affected by advice, while still in the same view, select the first before advice in spacewar.Debug. It has relation sub-trees for both uses pointcut and affects constructions. The affects relations will list different kinds of join points - constructor or method calls, etc. Note that the AspectJ browser can only display static structure (whether hierarchical or crosscutting). That means that dynamicly-determined pointcuts (like cflow(pointcut)) will not be shown as picking out static points in source code. Displayable pointcuts roughly correspond to those that can be used in a declare error statement.