123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- = AspectJ 1.7.0
-
- _© Copyright 2011 Contributors. All rights reserved._
-
- The full list of resolved issues in 1.7.0 is available
- https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;bug_status=RESOLVED;bug_status=VERIFIED;bug_status=CLOSED;product=AspectJ;target_milestone=1.7.0;[here]
-
- _Release info:_
-
- * _1.7.0 available 2-Jul-2012_
- * _1.7.0.RC1 available 25-May-2012_
- * _1.7.0.M1 available 16-Dec-2011_
-
- == Notable Changes
-
- === Java 7 bytecode weaving
-
- The first milestone of 1.7.0 upgraded the compiler but this still left
- the weaver with some issues if it had to weave into bytecode containing
- some of the new features that were allowed by Java 1.7. In particular
- this meant any bytecode containing the INVOKEDYNAMIC (new instruction
- for 1.7) and the related new constant pool entry types that support it.
- RC1 now supports weaving into bytecode containing these features.
- However, the new INVOKEDYNAMIC instruction does not surface as a join
- point yet so you cannot write a pointcut to match on it. If you use
- execution() pointcuts as opposed to call() then you will still be able
- to advise what the invokedynamic actually calls.
-
- === Bytecode caching for loadtime weaving
-
- Under https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673[bug 367673]
- we have had a contribution (thanks John Kew!) that enables a bytecode
- cache for loadtime weaving. The details and some rudimentary benchmark
- numbers are in the bug. Basically it caches woven bytecode on first
- start of a system using LTW and then reuses that woven bytecode on
- subsequent starts - this saves weaving time and also memory consumption.
- To activate it, use the following system properties:
-
- [source, text]
- ....
- -Daj.weaving.cache.enabled=true
- -Daj.weaving.cache.dir=/tmp/aspectj-cache/
- ....
-
- === Upgrade to Java 7
-
- For AspectJ 1.7.0, AspectJ moved from Eclipse JDT Core 0.785_R33x
- (Eclipse 3.3) to Eclipse JDT Core 0.B79_R37x (Eclipse 3.7). This is a
- big change where AspectJ is picking up four years of change from the
- Eclipse compiler.
-
- It means that you can now use the new Java 7 language constructs in your
- programs:
-
- - Diamond operator in advice:
-
- [source, java]
- ....
- aspect Foo {
- before(): execution(* *(..)) {
- List ls = new ArrayList<>();
- }
- }
- ....
-
- - Diamond operator in ITD:
-
- [source, java]
- ....
- public List DiamondITD.ls = new ArrayList<>();
- ....
-
- - Underscore literals and binary literals in advice:
-
- [source, java]
- ....
- before(): execution(* *(..)) {
- int onemill = 1_000_000;
- int four =0b100;
- }
- ....
-
- - Multi-catch:``
-
- [source, java]
- ....
- before(): execution(* main(..)) {
- try {
- foo("abc");
- } catch (ExceptionA | ExceptionB ex) {
- bar(ex);
- }
- }
- ....
-
- - String switch:``
-
- [source, java]
- ....
- before(String s): execution(* *(..)) && args(s) {
- switch(s) {
- case "quux":
- foo();
- break;
- case "bar":
- foo();
- break;
- default:
- foo();
- break;
- }
- }
- ....
-
- - Try with resources:``
-
- [source, java]
- ....
- try (
- InputStream in = new FileInputStream(src);
- OutputStream out = new FileOutputStream(dest))
- {
- // code
- }
- ....
|