Project Plan For AspectJ, version 1.0

Introduction

AspectJ major versions match up with Java versions. Currently Java is at 1.7 and AspectJ is about to release the 1.7 version after 13 releases at 1.6 (1.6.0 -> 1.6.12). The AspectJ project then releases service refreshes to that major version every few months. The current release model is at least something every 3 months - sometimes a milestone, sometimes a full release.
AspectJ always maintains that HEAD will build clean and pass all the tests we have (currently around 4400). This means the development builds created from HEAD after every commit are always at least as good as the previous build.

Release Deliverables

AspectJ releases are delivered as a single .jar download that installs a compiler and the related tools and documentation when executed. The packaging of an AspectJ release into plugins consumable in an Eclipse environment is done by the AJDT project.

Table of Contents

Release Milestones

1.6.1210/18/2011
AspectJ 1.6.12 (service refresh on 1.6)
1.7.0M112/16/2011
AspectJ 1.7.0 milestone 1

Table of Contents

Target Environments

During AspectJ 1.6.6 development the decision was made to exploit generics internally and this has improved the quality of the codebase. However, this means the 1.6.6 weaver (and therefore compiler) now require a Java 1.5 runtime. Previous versions of AspectJ required only Java 1.4
The woven code produced by AspectJ will run on any VM from Java 1.3 onwards.
The compiler/weaver will run on 1.5 but with AspectJ 1.7 these have the ability to compile 1.7 source code (using 1.7 features like the diamond operator) or weave into 1.7 bytecode that is exploiting new bytecode features like invokedynamic.

Internationalization

We have bundles for many of the messages in the project but they are not translated.

Table of Contents

Compatibility with Previous Releases

AspectJ is strong on compatibility and any level of AspectJ is always intended to parse code/aspects built with any earlier version of AspectJ without requiring recompilation.

Table of Contents

Themes and Priorities

These are the larger themes and priorities right now:

Improving the IDE experience

This is about maintaining an expected level of functionality and responsiveness when a user switches from a Java project to an AspectJ project. The latest requirement in this area is the need to persist project state between eclipse restarts - otherwise a costly full build is necessary each time eclipse is started. This is *not* easy as the object graph after a build is not currently of the right form to persist.

Memory Usage

Improving it across all parts of AspectJ: compilation, weaving and load-time weaving.

Groovy weaving

Given the popularity of groovy, these enhancements cover coping with weaving groovy class files

Full set of work items for next release

The fixes and enhancements that are in 1.7.0 development builds and those still scheduled to be completed before final release.
  • Committed

    • upgrade to Java7 (Eclipse 3.7.1) [364525] (target milestone: 1.7.0)
    • attribute problems with Java 7 compilation [376351] (target milestone: 1.7.0)
    • iajc does not support source compliance level 1.7 [376990] (target milestone: 1.7.0)
    • VerifyError: Expecting a stackmap frame [353467] (target milestone: 1.7.0)
    • neo4j NPE [362956] (target milestone: 1.7.0)
    • NPE got when dealing with Bootstrap classloaded classes [363962] (target milestone: 1.7.0)
    • MissingImplementationException when an annotation exists with child annotations. [363979] (target milestone: 1.7.0)
    • Cannot use pointcut in @DeclareError; stack overflow [364380] (target milestone: 1.7.0)
    • LTW weaved and generated byte code caching [367673] (target milestone: 1.7.0)
    • java.lang.NullPointerException at MethodVerifier.checkForRedundantSuperinterfaces [368018] (target milestone: 1.7.0)
    • type construction for signature makes mistakes with wildcards [371684] (target milestone: 1.7.0)
    • org.aspectj.weaver.BCException compiling @DeclareParents with value using "||" [371998] (target milestone: 1.7.0)
    • NotSerializableException: JoinPointImpl$StaticPartImpl while serializing the load time woven classes [373130] (target milestone: 1.7.0)
    • Memory leak in CompilationAndWeavingContext leading to PermGen OOME [373195] (target milestone: 1.7.0)
    • NPE in MethodVerifier.checkForRedundantSuperinterfaces [373733] (target milestone: 1.7.0)
    • Performance regression in 1.6.12 [374745] (target milestone: 1.7.0)
    • Performance - improve pointcut expensiveness calculation [374964] (target milestone: 1.7.0)
    • AspectJ throws Nullpointer after its IDE plugin update [376139] (target milestone: 1.7.0)
    • update wizard install location to 1.7 from 1.6 [380822] (target milestone: 1.7.0)
    • NPE in BcelTypeMunger.createBridgeMethod [382189] (target milestone: 1.7.0)
    • Problems with "nested" generic return types in ITDs [382435] (target milestone: 1.7.0)
    • An package-level abstract generic privileged aspect, which extends an abstract generic aspect, gives a IlligalStateException on a method call in around advice [382723] (target milestone: 1.7.0)
    • make ajcore file creation optional [384189] (target milestone: 1.7.0)
    • upgrade to Eclipse 3.6 JDT core [310504] (target milestone: 1.7.0)
    • NullPointerException at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodVerifier.checkForRedundantSuperinterfaces [372962] (target milestone: 1.7.0)

Planned changes for future releases

Items planned

Table of Contents