123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- AspectJ 1.1 Features
- ------------------------------------------------------------
-
-
- ------------------------------
- About this document
-
- This document contains information about the proposed features of
- AspectJ 1.1. It assumes as a baseline that AspectJ 1.1 includes all
- the features of AspectJ 1.0.6. Any feature difference, especially
- incompatible changes, should be noted. It is organized by DOWNLOAD.
- Inside the tools download there are sections per feature.
-
- Feel free to just stick shorthand notes at the end of this file, and
- move them up to the New Features (or other) section as we want.
-
-
- ------------------------------
- OPEN ISSUES
-
- * -sourceroots/-injars matrix completeness
-
- * do we release ant tasks in beta?
-
- * do we call beta alpha or alpha beta?
-
- ------------------------------
- DOWNLOAD: Tools
-
- General deliverables: Two licence files. A readme. Possibly a changes.
-
- ---- runtime
-
- Deliverable: aspectjrt.jar
-
- Changes:
-
- * RUNTIME_LICENCE: AspectjRT.jar now has a BSD-style licence [NOT BETA]
-
- * JOINPOINT_NAMES: Added constant fields holding constant names for
- the join points.
-
- * NO_COLUMN_NUMBER: thisJoinPoint.getSourceLocation().getColumn()
- is incompatible with bytecode weaving and can not be supported.
- Do we want to remove the method or make it return -1?
-
- * NOT_10_BINARY_COMPATIBLE: Some modifications to classes in internal
- packages means that code built with 1.1 won't run on the 1.0 version
- of aspectjrt.jar.
- [XXX this has always been true and sounds more scary than it is.
- The readme/docs do/should always say that you need to compile and
- run with at least the same version of the runtime classes as
- the compiler]
-
- ---- tools
-
- Deliverable: aspectjtools.jar
-
- * Single jar containing .class files for all components listed below.
- This will contain code under both the CPL and the MPL.
-
- ---- ajc
-
- Deliverable: ajc, ajc.bat
-
- Changes:
-
- -- new features
- * NO_SOURCE: -source/-usejavac options are not supported [INCOMPATIBLE]
-
- * SOURCEROOT: -sourceroots option indicates that all source files in
- a particular directory tree should be compiled [NEW]
- This option is the only way that sourcefiles can currently be
- specified for incremental compilation on the command-line.
-
- * BYTECODE_WEAVING: supporting bytecode-containing jar files as input
- for the compiler. [NEW]
- * Command-line: -injars option
- Not supported in incremental mode.
- * Eclipse: not supported [BETA]
- This has a ripple effect on "code the compiler controls" issues.
- There are obfustication issues that should be discussed in the readme
-
- * OUTJAR: supports generating a single .jar file with the results of a
- compilation, rather than separate .class files. This should be
- most useful when weaving into existing .jar files. The resulting jar
- file has no meta-information, just classes. [question: compression level?]
- [NEW]
-
- * BINARY_ASPECTS: Aspects may be compiled to a standalone bytecode
- form, and later be used in a linking/compiling phase to affect join
- points. [NEW]
- This will only be partially working in beta1: The front-end is not
- reading the binary aspects. [BETA]
-
- * INCREMENTAL: incremental compilation [NEW]
- * Command-line: interface is using -sourceroots and typing <enter>
- for an incremental recompile. Better interfaces are possible
- in the future.
- * Eclipse: invisible
- * JBuilder/Netbeans: ??
- * Emacs: possibly using new command-line interface?
- * Ant: unsupported in BETA
-
- * NORMAL_OPTIONS: now supporting many javac options ajc failed to in 1.0:
- essentially those supported in the ECLIPSE_OPTIONS [NEW]
-
- * ECLIPSE_OPTIONS: The eclipse compiler provides a large number of
- options for controlling its behavior, i.e. -warn:unusedLocals. All
- of these options may be passed to the command-line ajc compiler. Mik should
- be bugged to get full list and description of the options [NEW]
-
-
- -- features not supported yet
-
- * NO_WEAVE: An option with unknown name that generates code but does
- no back-end weaving [NO BETA]
-
- * SOURCE_INFORMATION: Source file information in error messages may be
- either better or worse (depending on how well we do our eclipse
- integration, this may not happen). [INCOMPATIBLE, MINIMAL]
- JSR 45 information is not created/maintained. [BETA]
-
- * NO_AROUND_OPTIMIZATION: -XinlineAroundClosure not implemented.
- [INCOMPATIBLE] No inlining at all [BETA].
-
- * NO_CALLEE_SIDE_CALL: Not implemented [BETA]
-
- * OTHER_X_OPTIONS: XaddSafePrefix (not used anymore, but we make some
- weak guarantees about this), XserializableAspects [see below]
- XTargetNearSource [see below]
-
-
- -- features no longer supported
- * NO_SOURCE: -preprocess/-usejavac/-nocomment/-workingdir options are
- not supported [INCOMPATIBLE]
-
- * NO_STRICT_LENIENT: The -strict/-lenient flags are no longer
- supported, since we no longer own the compiler [INCOMPATIBLE, MINIMAL]
-
-
- * NO_PORTING: The -porting flag is no longer supported.
-
- ---- Ajdb
-
- * NO_AJDB: Ajdb is no longer supported, shipped, talked about,
- seen, or believed to exist. We write a nice couple of paragraphs
- about JSR 45. [INCOMPATIBLE]
-
-
- ---- Ajdoc
-
- * NO_AJDOC: Ajdoc is not provided [BETA, possibly but not certainly
- FINAL as well]
-
- ---- ajbrowser
-
- * NO_CROSSCUTTING_STRUCTURE: Crosscutting structure is not shown
- [BETA_ONLY]
-
-
- ------------------------------
- DOWNLOADS: AJDE for Jbuilder, AJDE for Netbeans, AJDE for Emacs
-
- Deliverables: 3 downloads, same as 1.0.6 (Mik, expand?)
-
- Changes:
-
- * NO_AJDE_INCREMENTAL_COMPILATION: the 1.1 compiler will only
- work in batch mode [BETA_ONLY]
-
- * NO_TARGET_NEAR_SOURCE: -XTargetNearSource option is not supported in
- the 1.1 command-line compiler. [INCOMPATIBLE]
-
-
- ------------------------------
- DOWNLOAD: ajc ant tasks
-
- Deliverables: 1 download, same as 1.0.6
-
- Changes:
- - adding experimental taskdef based on DefaultCompilerAdapter
- - updated taskdef to use new compiler interface
- - neither support incremental mode [XXX leave ant running, touch tag file?]
-
- ------------------------------
- DOWNLOAD: Source distributions
-
- Tools Source: completely revamped, includes license for org.eclipse package
- AJDE-JBuilder Source: basically the same, if aspectjtools.jar is one jar
- AJDE-Netbeans Source: basically the same, if aspectjtools.jar is one jar
-
- ------------------------------
- DOWNLOAD: Documentation
-
- Deliverable: 1 or 0 downloads. Main deliverable is fleshed-out
- version of this document with outgoing links to bare or updated 1.0.6
- documentation.
-
- Changes (language changes):
-
- * THROWS_PATTERN: Typename patterns are allowed in place of typenames
- in throws clauses. This is
- http://aspectj.org/home/hugunin/features11.html#throws-patterns [NEW]
-
- * CALLEE_SIDE_CALLS: 1.1 may pick out different callee-side call join
- points than 1.0.6 on the same code. [INCOMPATIBLE]
-
- * SINGLE_INTERCLASS_TARGET: 1.1 does not allow inter-class
- declarations to be made with a TypePattern as target. (workaround
- available, defense can be presented if asked). [INCOMPATIBLE]
-
- * SINGLE_TYPENAME_PATTERN_TARGET: A simple type-name pattern with no
- wildcard can match no more than one type. The type that it matches
- is determined at compile-time. [INCOMPATIBLE]
- [THIS IS NO LONGER THE CASE, SO IT IS NOT DOCUMENTED AS SUCH]
-
- * ASPECT_PRECEDENCE: Dominates is replaced/mirrored with alternate
- declare-space specification, or it's not. (??) [INCOMPATIBLE, or
- NEW, or NOTHING]
-
- * UNAVAILABLE_JOIN_POINTS: [INCOMPATIBLE, MINIMAL]
- * Initializer Execution join points no longer exist. The
- information needed to pick them out doesn't exist in bytecode.
- there was not kinded pcd for it, and we're not sure anyone will
- actually notice the difference.
- * Others? (??)
-
- * CONSTRUCTOR_EXECUTION_IS_BIGGER: constructor execution join points
- (of constructors which call super) include the code for instance
- initialization (the code inside the old initializer execution join
- point). Again, the information needed to NOT include this code
- isn't available in bytecode. This could be a big deal... before
- advice on many constructor execution join points will run before the
- dynamic initializers run. [INCOMPATIBLE]
-
- * NEW_PCDS: Kinded PCDs are available for every kind of join
- point. This is
- http://aspectj.org/home/hugunin/features11.html#kinded-pcds [NEW]
- * adviceExecution (spelling?)
- * preInitialization (spelling?)
-
- * WITHIN_MEMBER_TYPES: Within of a member type (NOT a package-level
- type) such as within(pkg.Type.MemberType) is not guaranteed to pick
- out code inside anonymous and local types. (JLS 13.1). If anyone
- cares, we can do tests on jikes/javac/eclipse to see if we actually
- do, but this is hopefully a completely minimal issue [INCOMPATIBLE,
- MINIMAL]. It is unclear if this is a fundamental limitation of
- bytecode weaving or if it can be fixed with further work.
-
-
- Documentation caveats:
-
- - example code not updated [XXX?]
- - quick ref
- -
-
- ------------------------------
- Future work
-
- There are a number of changes that clearly would be either useful or
- easy (hopefully things that are both useful and easy are already
- done), but we don't plan to actually ship them in 1.1.
-
- * HANDLER_EXCLUDES_NON_EXCEPTIONS: (PR826)
-
- * SUPERTYPES_TYPE_PATTERN:
-
- * DYNAMIC_CLASSLOADER_WEAVER:
-
- * SOURCE_WEAVING:
-
- ------------------------------
- Shorthand notes
-
- - no optimizations for per* aspects
-
- - declare soft unimplemented [this is on the table for not doing for beta]
-
- - privileged unimplemented [this is on the table for not doing for beta]
-
- - declare dominates (?) [decided before beta]
-
- - declare error/warning source locations are weaker than just missing column [BETA]
-
-
- - a note for the dangerous bends section of the programming guide
-
- Base.m() throws IOException
- Derived.m() [no throws]
-
- call(void Base.m() throws IOException)
- --> this doesn't match new Derived().m(), but will without the throws
-
-
- - The status of the -XserializableAspects flag is iceberg-like.
-
- - Don't implement intra-type static members onto interfaces
-
- - Don't handle introduced fields with constant values
-
- - no crosscuting structure means no inline annotations w/ -emacssym, but speedbar still
- shows declaration tree
-
|