Designer’s guide to developing gear along with AJDT and AspectJ

Designer’s guide to developing gear along with AJDT and AspectJ

This site is intended to support anyone creating equipment to give or assist AJDT/AspectJ. Please subscribe to this page with any relevant ideas, like example laws utilising the AJDT and/or AspectJ APIs.

These pages is out of big date. Our intention will be modify this site for AJDT 1.6.1, but we perhaps not have energy because of this yet. Please understand that some of understanding on this webpage might no longer be proper. For those who have any questions, please submit these to the subscriber list ajdt-dev.


  • 1 getting crosscutting commitment ideas from AJDT
  • 2 Collection Units in AJDT
    • 2.1 obtaining the belongings in an AJCompilationUnit
  • 3 by using the AspectJ AST parser
  • 4 Known restrictions, pests, and outstanding dilemmas
  • 5 The program hardware are anticipated to use to operate a vehicle the AspectJ compiler

Acquiring crosscutting commitment information from AJDT

In case you are developing an eclipse plugin and call for accessibility crosscutting records whenever a task is built, possible sign up a listener with AJDT. Their plug-in will need to rely on org.eclipse.ajdt.core, org.eclipse.core.resources and org.eclipse.jdt.core, and org.aspectj.weaver. When you look at the org.eclipse.ajdt.core plug-in there was an IAdviceChangedListener screen with just one adviceChanged() technique.

Sign-up this using AJBuilder class in this way (inside plug-in’s start() method for instance):

Presently (AJDT 1.6) this will be labeled as after every build of an AspectJ venture (in other words. every *potential* information change). In a future production this may be optimized becoming just known as when the suggestions possess really changed. AJDT/UI uses this apparatus to update the tangerine arrow image decorator.

Crosscutting information can then become extracted from the AJProjectModelFacade lessons. Discover an example with a few pseudo-code you can adjust:

A few records relating to this:

  1. The API may have some small changes in the long term. Please deliver an email towards the ajdt-dev mailing list if something about page is beyond go out.
  2. The AJProjectModelFacade object is a lightweight entry into the AspectJ business. It is simply appropriate through to the subsequent develop. Thus, you shouldn’t save all of them. Make use of them and dispose as needed.
  3. AJProjectModelFacade things merely have information following basic successful acquire. You’ll be able to call the hasModel() solution to see if an AspectJ model is available when it comes down to job.
  4. As you can see, you will get the relationship both in guidelines. See AJRelationshipManager your complete listing of relationships, to merely require the relationship kinds you find attractive.
  5. IRelationship.getSourceHandle() and IRelationship.getobjectives() return Strings that portray AspectJ element manages. You should use these AJProjectModelFacade strategies to become model characteristics:
    • toProgramElement(sequence) — returns IProgramElement. From this point possible obtain information on the pointcut, intertype aspect, or declare element.
    • programElementToJavaElement(sequence) or programElementToJavaElement(IProgramElement) — returns IJavaElement. From here possible connect into JDT tooling.
  6. There isn’t any needs to join up a recommendations altered listener. You could get entry to the crosscutting design at any time (if the project has already established a fruitful acquire) making use of the preceding laws:

Compilation Units in AJDT

JDT brings collection models (cases of ICompilationproduct) for .java data. AJDT creates compilation models for .aj documents, that are cases of AJCompilationUnit (which implements ICompilationUnit). The course AJCompilationUnitManager (during the org.eclipse.ajdt.core plug-in) consists of some beneficial methods concerning this, such as for instance:

From an AJCompilationUnit you are able to acquire various architectural info including getAllTypes(). The main type for “.aj” files is typically an aspect, in fact it is represented from the AspectElement class, which contains aspect-specific means for example getPointcuts() and getAdvice(). These return furthermore aspect-specific factors like PointcutElement and AdviceElement.

Since AJDT 1.6.2 for Eclispe 3.4, we use the Eclipse weaving services to weave into JDT. One group of join factors that are encouraged are the ones regarding the development of CompilationUnit stuff. In the event the file keeps was *.aj document, AJCompilationUnit is generated rather than a regular coffee collectiondevice.

Getting the items in an AJCompilationUnit

Because JDT anticipates that most resource it truly does work with holds true Java code, JDT does not work well with AspectJ. In order to get around this, AJCompilationUnits preserve two buffers that contain source items. The first is a java compatible buffer additionally the 2nd could be the initial articles buffer. The coffee suitable buffer is the buffer that will be returned by default when AJCompilationUnit.getContents() is named. This buffer offers the AspectJ laws with aspect-specific syntax removed around. The original articles buffer includes (as you would count on) the original information of this document.

Including in the event the original contents buffer seems like:

the Java appropriate buffer becomes

Observe that the source stores regarding the identifiers are exactly the same in both buffers. This helps to ensure that guide acquiring and hyperlinking works as expected.

Any time you call for using the original articles of an AspectJ CompilationUnit ajdevice, can be done the annotated following:

What this technique do wants the AJCU to briefly switch its buffer toward AJ buffer from Java buffer. It is best to do this in a synchronized block so that you will you shouldn’t risk additional threads coming by and inadvertently utilising the incorrect buffer (AJDT itself doesn’t use a synchronized block with this, but it should).

By using the AspectJ AST parser

Important example, extracted from bug 88861

Gather the above and manage they:

Recognized restrictions, insects, and outstanding issues

Restriction: there can be presently no AST service for solving type bindings: insect 146528

Leave a Comment

Your email address will not be published.