You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

features.txt 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. AspectJ 1.1 Features
  2. ------------------------------------------------------------
  3. ------------------------------
  4. About this document
  5. This document contains information about the proposed features of
  6. AspectJ 1.1. It assumes as a baseline that AspectJ 1.1 includes all
  7. the features of AspectJ 1.0.6. Any feature difference, especially
  8. incompatible changes, should be noted. It is organized by DOWNLOAD.
  9. Inside the tools download there are sections per feature.
  10. Feel free to just stick shorthand notes at the end of this file, and
  11. move them up to the New Features (or other) section as we want.
  12. ------------------------------
  13. OPEN ISSUES
  14. * -sourceroots/-injars matrix completeness
  15. * do we release ant tasks in beta?
  16. * do we call beta alpha or alpha beta?
  17. ------------------------------
  18. DOWNLOAD: Tools
  19. General deliverables: Two licence files. A readme. Possibly a changes.
  20. ---- runtime
  21. Deliverable: aspectjrt.jar
  22. Changes:
  23. * RUNTIME_LICENCE: AspectjRT.jar now has a BSD-style licence [NOT BETA]
  24. * JOINPOINT_NAMES: Added constant fields holding constant names for
  25. the join points.
  26. * NO_COLUMN_NUMBER: thisJoinPoint.getSourceLocation().getColumn()
  27. is incompatible with bytecode weaving and can not be supported.
  28. Do we want to remove the method or make it return -1?
  29. * NOT_10_BINARY_COMPATIBLE: Some modifications to classes in internal
  30. packages means that code built with 1.1 won't run on the 1.0 version
  31. of aspectjrt.jar.
  32. [XXX this has always been true and sounds more scary than it is.
  33. The readme/docs do/should always say that you need to compile and
  34. run with at least the same version of the runtime classes as
  35. the compiler]
  36. ---- tools
  37. Deliverable: aspectjtools.jar
  38. * Single jar containing .class files for all components listed below.
  39. This will contain code under both the CPL and the MPL.
  40. ---- ajc
  41. Deliverable: ajc, ajc.bat
  42. Changes:
  43. -- new features
  44. * NO_SOURCE: -source/-usejavac options are not supported [INCOMPATIBLE]
  45. * SOURCEROOT: -sourceroots option indicates that all source files in
  46. a particular directory tree should be compiled [NEW]
  47. This option is the only way that sourcefiles can currently be
  48. specified for incremental compilation on the command-line.
  49. * BYTECODE_WEAVING: supporting bytecode-containing jar files as input
  50. for the compiler. [NEW]
  51. * Command-line: -injars option
  52. Not supported in incremental mode.
  53. * Eclipse: not supported [BETA]
  54. This has a ripple effect on "code the compiler controls" issues.
  55. There are obfustication issues that should be discussed in the readme
  56. * OUTJAR: supports generating a single .jar file with the results of a
  57. compilation, rather than separate .class files. This should be
  58. most useful when weaving into existing .jar files. The resulting jar
  59. file has no meta-information, just classes. [question: compression level?]
  60. [NEW]
  61. * BINARY_ASPECTS: Aspects may be compiled to a standalone bytecode
  62. form, and later be used in a linking/compiling phase to affect join
  63. points. [NEW]
  64. This will only be partially working in beta1: The front-end is not
  65. reading the binary aspects. [BETA]
  66. * INCREMENTAL: incremental compilation [NEW]
  67. * Command-line: interface is using -sourceroots and typing <enter>
  68. for an incremental recompile. Better interfaces are possible
  69. in the future.
  70. * Eclipse: invisible
  71. * JBuilder/Netbeans: ??
  72. * Emacs: possibly using new command-line interface?
  73. * Ant: unsupported in BETA
  74. * NORMAL_OPTIONS: now supporting many javac options ajc failed to in 1.0:
  75. essentially those supported in the ECLIPSE_OPTIONS [NEW]
  76. * ECLIPSE_OPTIONS: The eclipse compiler provides a large number of
  77. options for controlling its behavior, i.e. -warn:unusedLocals. All
  78. of these options may be passed to the command-line ajc compiler. Mik should
  79. be bugged to get full list and description of the options [NEW]
  80. -- features not supported yet
  81. * NO_WEAVE: An option with unknown name that generates code but does
  82. no back-end weaving [NO BETA]
  83. * SOURCE_INFORMATION: Source file information in error messages may be
  84. either better or worse (depending on how well we do our eclipse
  85. integration, this may not happen). [INCOMPATIBLE, MINIMAL]
  86. JSR 45 information is not created/maintained. [BETA]
  87. * NO_AROUND_OPTIMIZATION: -XinlineAroundClosure not implemented.
  88. [INCOMPATIBLE] No inlining at all [BETA].
  89. * NO_CALLEE_SIDE_CALL: Not implemented [BETA]
  90. * OTHER_X_OPTIONS: XaddSafePrefix (not used anymore, but we make some
  91. weak guarantees about this), XserializableAspects [see below]
  92. XTargetNearSource [see below]
  93. -- features no longer supported
  94. * NO_SOURCE: -preprocess/-usejavac/-nocomment/-workingdir options are
  95. not supported [INCOMPATIBLE]
  96. * NO_STRICT_LENIENT: The -strict/-lenient flags are no longer
  97. supported, since we no longer own the compiler [INCOMPATIBLE, MINIMAL]
  98. * NO_PORTING: The -porting flag is no longer supported.
  99. ---- Ajdb
  100. * NO_AJDB: Ajdb is no longer supported, shipped, talked about,
  101. seen, or believed to exist. We write a nice couple of paragraphs
  102. about JSR 45. [INCOMPATIBLE]
  103. ---- Ajdoc
  104. * NO_AJDOC: Ajdoc is not provided [BETA, possibly but not certainly
  105. FINAL as well]
  106. ---- ajbrowser
  107. * NO_CROSSCUTTING_STRUCTURE: Crosscutting structure is not shown
  108. [BETA_ONLY]
  109. ------------------------------
  110. DOWNLOADS: AJDE for Jbuilder, AJDE for Netbeans, AJDE for Emacs
  111. Deliverables: 3 downloads, same as 1.0.6 (Mik, expand?)
  112. Changes:
  113. * NO_AJDE_INCREMENTAL_COMPILATION: the 1.1 compiler will only
  114. work in batch mode [BETA_ONLY]
  115. * NO_TARGET_NEAR_SOURCE: -XTargetNearSource option is not supported in
  116. the 1.1 command-line compiler. [INCOMPATIBLE]
  117. ------------------------------
  118. DOWNLOAD: ajc ant tasks
  119. Deliverables: 1 download, same as 1.0.6
  120. Changes:
  121. - adding experimental taskdef based on DefaultCompilerAdapter
  122. - updated taskdef to use new compiler interface
  123. - neither support incremental mode [XXX leave ant running, touch tag file?]
  124. ------------------------------
  125. DOWNLOAD: Source distributions
  126. Tools Source: completely revamped, includes license for org.eclipse package
  127. AJDE-JBuilder Source: basically the same, if aspectjtools.jar is one jar
  128. AJDE-Netbeans Source: basically the same, if aspectjtools.jar is one jar
  129. ------------------------------
  130. DOWNLOAD: Documentation
  131. Deliverable: 1 or 0 downloads. Main deliverable is fleshed-out
  132. version of this document with outgoing links to bare or updated 1.0.6
  133. documentation.
  134. Changes (language changes):
  135. * THROWS_PATTERN: Typename patterns are allowed in place of typenames
  136. in throws clauses. This is
  137. http://aspectj.org/home/hugunin/features11.html#throws-patterns [NEW]
  138. * CALLEE_SIDE_CALLS: 1.1 may pick out different callee-side call join
  139. points than 1.0.6 on the same code. [INCOMPATIBLE]
  140. * SINGLE_INTERCLASS_TARGET: 1.1 does not allow inter-class
  141. declarations to be made with a TypePattern as target. (workaround
  142. available, defense can be presented if asked). [INCOMPATIBLE]
  143. * SINGLE_TYPENAME_PATTERN_TARGET: A simple type-name pattern with no
  144. wildcard can match no more than one type. The type that it matches
  145. is determined at compile-time. [INCOMPATIBLE]
  146. [THIS IS NO LONGER THE CASE, SO IT IS NOT DOCUMENTED AS SUCH]
  147. * ASPECT_PRECEDENCE: Dominates is replaced/mirrored with alternate
  148. declare-space specification, or it's not. (??) [INCOMPATIBLE, or
  149. NEW, or NOTHING]
  150. * UNAVAILABLE_JOIN_POINTS: [INCOMPATIBLE, MINIMAL]
  151. * Initializer Execution join points no longer exist. The
  152. information needed to pick them out doesn't exist in bytecode.
  153. there was not kinded pcd for it, and we're not sure anyone will
  154. actually notice the difference.
  155. * Others? (??)
  156. * CONSTRUCTOR_EXECUTION_IS_BIGGER: constructor execution join points
  157. (of constructors which call super) include the code for instance
  158. initialization (the code inside the old initializer execution join
  159. point). Again, the information needed to NOT include this code
  160. isn't available in bytecode. This could be a big deal... before
  161. advice on many constructor execution join points will run before the
  162. dynamic initializers run. [INCOMPATIBLE]
  163. * NEW_PCDS: Kinded PCDs are available for every kind of join
  164. point. This is
  165. http://aspectj.org/home/hugunin/features11.html#kinded-pcds [NEW]
  166. * adviceExecution (spelling?)
  167. * preInitialization (spelling?)
  168. * WITHIN_MEMBER_TYPES: Within of a member type (NOT a package-level
  169. type) such as within(pkg.Type.MemberType) is not guaranteed to pick
  170. out code inside anonymous and local types. (JLS 13.1). If anyone
  171. cares, we can do tests on jikes/javac/eclipse to see if we actually
  172. do, but this is hopefully a completely minimal issue [INCOMPATIBLE,
  173. MINIMAL]. It is unclear if this is a fundamental limitation of
  174. bytecode weaving or if it can be fixed with further work.
  175. Documentation caveats:
  176. - example code not updated [XXX?]
  177. - quick ref
  178. -
  179. ------------------------------
  180. Future work
  181. There are a number of changes that clearly would be either useful or
  182. easy (hopefully things that are both useful and easy are already
  183. done), but we don't plan to actually ship them in 1.1.
  184. * HANDLER_EXCLUDES_NON_EXCEPTIONS: (PR826)
  185. * SUPERTYPES_TYPE_PATTERN:
  186. * DYNAMIC_CLASSLOADER_WEAVER:
  187. * SOURCE_WEAVING:
  188. ------------------------------
  189. Shorthand notes
  190. - no optimizations for per* aspects
  191. - declare soft unimplemented [this is on the table for not doing for beta]
  192. - privileged unimplemented [this is on the table for not doing for beta]
  193. - declare dominates (?) [decided before beta]
  194. - declare error/warning source locations are weaker than just missing column [BETA]
  195. - a note for the dangerous bends section of the programming guide
  196. Base.m() throws IOException
  197. Derived.m() [no throws]
  198. call(void Base.m() throws IOException)
  199. --> this doesn't match new Derived().m(), but will without the throws
  200. - The status of the -XserializableAspects flag is iceberg-like.
  201. - Don't implement intra-type static members onto interfaces
  202. - Don't handle introduced fields with constant values
  203. - no crosscuting structure means no inline annotations w/ -emacssym, but speedbar still
  204. shows declaration tree