123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
- <html> <head>
- <title>AspectJ 1.7.0 Readme</title>
- <style type="text/css">
- <!--
- P { margin-left: 20px; }
- PRE { margin-left: 20px; }
- LI { margin-left: 20px; }
- H4 { margin-left: 20px; }
- H3 { margin-left: 10px; }
- -->
- </style>
- </head>
-
- <body>
- <div align="right"><small>
- © Copyright 2011 Contributors.
- All rights reserved.
- </small></div>
-
- <h1>AspectJ 1.7.0 Readme</h1>
-
- <p>The full list of resolved issues in 1.7.0 is available
- <a href="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</a></h2>.</p>
-
- <ul>
- <li>1.7.0 available 2-Jul-2012
- <li>1.7.0.RC1 available 25-May-2012
- <li>1.7.0.M1 available 16-Dec-2011
- </ul>
-
- <h2>Notable Changes</h2>
-
- <h3>Java 7 bytecode weaving</h3>
- <p>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.
- </p>
- <h3>Bytecode caching for loadtime weaving</h3>
- <p>Under <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=367673">bug 367673</a> 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:</p>
- <pre><code>-Daj.weaving.cache.enabled=true
- -Daj.weaving.cache.dir=/tmp/aspectj-cache/
- </code></pre>
-
- <h3>Upgrade to Java 7</h3>
- <p>
- 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.
- </p>
- <p>
- It means that you can now use the new Java 7 language constructs in your programs:</p>
- <p>
- - Diamond operator in advice:
- <code><pre>
- aspect Foo {
- before(): execution(* *(..)) {
- List<String> ls = new ArrayList<>();
- }
- }
- </pre></code>
- <p>
- - Diamond operator in ITD:
- <code><pre>
- public List<String> DiamondITD.ls = new ArrayList<>();
- </pre></code>
- <p>
- - Underscore literals and binary literals in advice:
- <code><pre>
- before(): execution(* *(..)) {
- int onemill = 1_000_000;
- int four =0b100;
- }
- </pre></code>
- <p>
- - Multi-catch:<code><pre>
- before(): execution(* main(..)) {
- try {
- foo("abc");
- } catch (ExceptionA | ExceptionB ex) {
- bar(ex);
- }
- }
- </pre></code>
- <p>
- - String switch:<code><pre>
- before(String s): execution(* *(..)) && args(s) {
- switch(s) {
- case "quux":
- foo();
- break;
- case "bar":
- foo();
- break;
- default:
- foo();
- break;
- }
- }
- </pre></code>
- <p>
- - Try with resources:<code><pre>
- try (
- InputStream in = new FileInputStream(src);
- OutputStream out = new FileOutputStream(dest))
- {
- // code
- }
- </pre></code>
- </p>
- <h4>
- <!-- ============================== -->
- </body>
- </html>
|