]> source.dussan.org Git - aspectj.git/commitdiff
various changes to make more tests pass on Java9
authorAndy Clement <aclement@pivotal.io>
Fri, 22 Sep 2017 22:17:54 +0000 (15:17 -0700)
committerAndy Clement <aclement@pivotal.io>
Fri, 22 Sep 2017 22:17:54 +0000 (15:17 -0700)
22 files changed:
bcel-builder/.isJava5 [deleted file]
bcel-builder/.isJava7 [new file with mode: 0644]
bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java
lib/bcel/bcel-src.zip
lib/bcel/bcel-verifier.jar
lib/bcel/bcel.jar
org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java
testing/newsrc/org/aspectj/testing/OutputLine.java
testing/newsrc/org/aspectj/testing/OutputSpec.java
tests/src/org/aspectj/systemtest/ajc154/ajc154.xml
tests/src/org/aspectj/systemtest/ajc169/intertype.xml
tests/src/org/aspectj/systemtest/ajc170/ajc170.xml
tests/src/org/aspectj/systemtest/ajc190/sanity-tests-19.xml
tests/src/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java
util/src/org/aspectj/util/LangUtil.java
weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java
weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java
weaver/testdata/StaticTjpBeforeHelloWorld.1.9.txt [new file with mode: 0644]
weaver/testdata/TjpAround2HelloWorld.1.9.txt [new file with mode: 0644]
weaver/testdata/TjpAroundHelloWorld.1.9.txt [new file with mode: 0644]
weaver/testdata/TjpBeforeHelloWorld.1.9.txt [new file with mode: 0644]
weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java

diff --git a/bcel-builder/.isJava5 b/bcel-builder/.isJava5
deleted file mode 100644 (file)
index 136d063..0000000
+++ /dev/null
@@ -1 +0,0 @@
-  
\ No newline at end of file
diff --git a/bcel-builder/.isJava7 b/bcel-builder/.isJava7
new file mode 100644 (file)
index 0000000..136d063
--- /dev/null
@@ -0,0 +1 @@
+  
\ No newline at end of file
index 6204a3384cf2abf0eefa5c3f1c16ed121d68a561..1f624a003f4a1fd6837cc45a00412eedc096abb7 100644 (file)
@@ -1,9 +1,7 @@
-package org.aspectj.apache.bcel.util;
-
 /* ====================================================================
  * The Apache Software License, Version 1.1
  *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
+ * Copyright (c) 2001, 2017 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -53,12 +51,15 @@ package org.aspectj.apache.bcel.util;
  * information on the Apache Software Foundation, please see
  * <http://www.apache.org/>.
  */
+package org.aspectj.apache.bcel.util;
 
 import java.util.*;
 import java.util.zip.*;
 
 import java.io.*;
 import java.net.URI;
+import java.nio.file.FileVisitResult;
+import java.nio.file.SimpleFileVisitor;
 import java.nio.file.DirectoryStream;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
@@ -71,10 +72,13 @@ import java.nio.file.attribute.BasicFileAttributes;
  * Responsible for loading (class) files from the CLASSPATH. Inspired by
  * sun.tools.ClassPath.
  *
- * @version $Id: ClassPath.java,v 1.5 2009/09/09 19:56:20 aclement Exp $
- * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
+ * @author M. Dahm
+ * @author Mario Ivankovits
+ * @author Andy Clement
  */
 public class ClassPath implements Serializable {
+       private static final String JRT_FS = "jrt-fs.jar";
+
        private static ClassPath SYSTEM_CLASS_PATH = null;
 
        private PathEntry[] paths;
@@ -174,6 +178,7 @@ public class ClassPath implements Serializable {
                String class_path = System.getProperty("java.class.path");
                String boot_path = System.getProperty("sun.boot.class.path");
                String ext_path = System.getProperty("java.ext.dirs");
+               String vm_version = System.getProperty("java.version");
 
                ArrayList<String> list = new ArrayList<String>();
 
@@ -206,6 +211,12 @@ public class ClassPath implements Serializable {
                                buf.append(File.pathSeparatorChar);
                }
 
+               // On Java9 the sun.boot.class.path won't be set. System classes accessible through JRT filesystem 
+        if (vm_version.startsWith("9")) {
+                       buf.insert(0, File.pathSeparatorChar);
+                       buf.insert(0, System.getProperty("java.home") + File.separator + "lib" + File.separator + JRT_FS);                      
+        }
+
                return buf.toString().intern();
        }
 
@@ -405,20 +416,51 @@ public class ClassPath implements Serializable {
        }
        
        private static class JImage extends PathEntry {
-               private java.nio.file.FileSystem fs;
-               
-               private static URI JRT_URI = URI.create("jrt:/"); //$NON-NLS-1$
 
+               private static URI JRT_URI = URI.create("jrt:/"); //$NON-NLS-1$
                private static String MODULES_PATH = "modules"; //$NON-NLS-1$
                private static String JAVA_BASE_PATH = "java.base"; //$NON-NLS-1$
 
+               private java.nio.file.FileSystem fs;
+               
+               private final Map<String, Path> fileMap;        
+               
 
                JImage(File jimage) {
                        // TODO bizarre that you use getFileSystem with just the jrt:/ and not the path !! What happens
                        // if there are two?
-                       fs = FileSystems.getFileSystem(JRT_URI);//.create(jimage.getAbsolutePath()));
+                       fs = FileSystems.getFileSystem(JRT_URI);
+                       fileMap = buildFileMap();
                }
                
+
+               private Map<String, Path> buildFileMap() {
+                       final Map<String, Path> fileMap = new HashMap<>();
+System.out.println("Building filemap");
+                       final java.nio.file.PathMatcher matcher = fs.getPathMatcher("glob:*.class");
+                       Iterable<java.nio.file.Path> roots = fs.getRootDirectories();
+                       for (java.nio.file.Path path : roots) {
+                               try {
+                                       Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
+                        @Override
+                        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                            if (file.getNameCount() > 2
+                                && matcher.matches(file.getFileName())) {
+                                Path classPath = file.subpath(2, file.getNameCount());
+                                fileMap.put(classPath.toString(), file);
+                            }
+
+                            return FileVisitResult.CONTINUE;
+                        }
+                    });
+                               }
+                               catch (IOException e) {
+                                       throw new RuntimeException(e);
+                               }
+                       }
+                       return fileMap;
+               }
+               
                private static class ByteBasedClassFile implements ClassFile {
 
                        private byte[] bytes;
@@ -465,43 +507,56 @@ public class ClassPath implements Serializable {
                        //   /modules/java.base/java/lang/Object.class (jdk9 b74)
                        // so within a modules top level qualifier and then the java.base module
                        String fileName = name + suffix;
-                       try {
-                               Path p = fs.getPath(MODULES_PATH,JAVA_BASE_PATH,fileName);
-                               byte[] bs = Files.readAllBytes(p);
-                               BasicFileAttributeView bfav = Files.getFileAttributeView(p, BasicFileAttributeView.class);
-                               BasicFileAttributes bfas = bfav.readAttributes();
-                               long time = bfas.lastModifiedTime().toMillis();
-                               long size = bfas.size();
-                               return new ByteBasedClassFile(bs, "jimage",fileName,time,size);
-                       } catch (NoSuchFileException nsfe) {
-                               // try other modules!
-                               Iterable<java.nio.file.Path> roots = fs.getRootDirectories();
-                               roots = fs.getRootDirectories();
-                               for (java.nio.file.Path path : roots) {
-                                       DirectoryStream<java.nio.file.Path> stream = Files.newDirectoryStream(path);
-                                       try {
-                                               for (java.nio.file.Path module: stream) {
-                                                       // module will be something like /packages or /modules
-                                                       for (java.nio.file.Path submodule: Files.newDirectoryStream(module)) {
-                                                               // submodule will be /modules/java.base or somesuch
-                                                               try {
-                                                                       Path p = fs.getPath(submodule.toString(), fileName);
-                                                                       byte[] bs = Files.readAllBytes(p);
-                                                                       BasicFileAttributeView bfav = Files.getFileAttributeView(p, BasicFileAttributeView.class);
-                                                                       BasicFileAttributes bfas = bfav.readAttributes();
-                                                                       long time = bfas.lastModifiedTime().toMillis();
-                                                                       long size = bfas.size();
-                                                                       return new ByteBasedClassFile(bs, "jimage", fileName,time,size);
-                                                               } catch (NoSuchFileException nsfe2) {
-                                                               }
-                                                       }
-                                               }
-                                       } finally {
-                                               stream.close();
-                                       }
-                               }
-                               return null;                    
+                       
+//                     try {
+//                             Path p = fs.getPath(MODULES_PATH,JAVA_BASE_PATH,fileName);
+//                             byte[] bs = Files.readAllBytes(p);
+//                             BasicFileAttributeView bfav = Files.getFileAttributeView(p, BasicFileAttributeView.class);
+//                             BasicFileAttributes bfas = bfav.readAttributes();
+//                             long time = bfas.lastModifiedTime().toMillis();
+//                             long size = bfas.size();
+//                             return new ByteBasedClassFile(bs, "jimage",fileName,time,size);
+//                     } catch (NoSuchFileException nsfe) {
+//                             // try other modules!
+//                             Iterable<java.nio.file.Path> roots = fs.getRootDirectories();
+//                             roots = fs.getRootDirectories();
+//                             for (java.nio.file.Path path : roots) {
+//                                     DirectoryStream<java.nio.file.Path> stream = Files.newDirectoryStream(path);
+//                                     try {
+//                                             for (java.nio.file.Path module: stream) {
+//                                                     // module will be something like /packages or /modules
+//                                                     for (java.nio.file.Path submodule: Files.newDirectoryStream(module)) {
+//                                                             // submodule will be /modules/java.base or somesuch
+//                                                             try {
+//                                                                     Path p = fs.getPath(submodule.toString(), fileName);
+//                                                                     byte[] bs = Files.readAllBytes(p);
+//                                                                     BasicFileAttributeView bfav = Files.getFileAttributeView(p, BasicFileAttributeView.class);
+//                                                                     BasicFileAttributes bfas = bfav.readAttributes();
+//                                                                     long time = bfas.lastModifiedTime().toMillis();
+//                                                                     long size = bfas.size();
+//                                                                     return new ByteBasedClassFile(bs, "jimage", fileName,time,size);
+//                                                             } catch (NoSuchFileException nsfe2) {
+//                                                             }
+//                                                     }
+//                                             }
+//                                     } finally {
+//                                             stream.close();
+//                                     }
+//                             }
+//                             return null;                    
+//                     }
+                       Path p = fileMap.get(fileName);
+                       if (p == null) {
+                               return null;
                        }
+                       // Path p = fs.getPath(MODULES_PATH,JAVA_BASE_PATH,fileName);
+                       byte[] bs = Files.readAllBytes(p);
+                       BasicFileAttributeView bfav = Files.getFileAttributeView(p, BasicFileAttributeView.class);
+                       BasicFileAttributes bfas = bfav.readAttributes();
+                       long time = bfas.lastModifiedTime().toMillis();
+                       long size = bfas.size();
+                       ClassFile cf = new ByteBasedClassFile(bs, "jimage",fileName,time,size);
+                       return cf;
                }
        }
 
index 67795b8c8b53b89b042b218eed52bca113ec89dd..b3dbc2ea7a9ebba132b28eaff8ef8478e3d46fa1 100644 (file)
Binary files a/lib/bcel/bcel-src.zip and b/lib/bcel/bcel-src.zip differ
index b452664a742fd160f378df139419b359e7b754fb..c44a3365fc51e5bcf88aa172fae0d480c5236dc5 100644 (file)
Binary files a/lib/bcel/bcel-verifier.jar and b/lib/bcel/bcel-verifier.jar differ
index 790fe32b6fc33b88a0b7f2af68cc9c8c34d0d757..e70b115665adc6aa02a9610327c80d03a1ecb4ff 100644 (file)
Binary files a/lib/bcel/bcel.jar and b/lib/bcel/bcel.jar differ
index 1919d6727a36047ab58b69ccb039fbae5661977a..ef744fb146029c3355cf100aff3ff5fd8264c1e7 100644 (file)
@@ -108,7 +108,6 @@ public class AjcTestCase extends TestCase {
        public static final String JAVA5_CLASSPATH_ENTRIES = File.pathSeparator + ".." + File.separator + "aspectj5rt" + File.separator
                        + "bin" + File.pathSeparator + ".." + File.separator + "loadtime5" + File.separator + "bin" + File.pathSeparator + ".."
                        + File.separator + "weaver5" + File.separator + "bin"
-
                        + File.pathSeparator + ".." + File.separator + "aj-build" + File.separator + "jars" + File.separator + "aspectj5rt.jar"
                        + File.pathSeparator + ".." + File.separator + "aj-build" + File.separator + "jars" + File.separator + "loadtime5.jar"
                        + File.pathSeparator + ".." + File.separator + "aj-build" + File.separator + "jars" + File.separator + "weaver5.jar";
@@ -614,12 +613,13 @@ public class AjcTestCase extends TestCase {
                
                /* Sandbox -> AspectJ -> Extension -> Bootstrap */
                if ( !useFullLTW && useLTW) {
-                       URLClassLoader testLoader = (URLClassLoader) getClass().getClassLoader();
+//                     URLClassLoader testLoader = (URLClassLoader) getClass().getClassLoader();
                        /*
                         * Create a new AspectJ class loader using the existing test CLASSPATH and any missing Java 5 projects
                         */
-                       URL[] testUrls = testLoader.getURLs();
-                       URL[] java5Urls = getURLs(JAVA5_CLASSPATH_ENTRIES);
+                       URL[] testUrls = new URL[0];//testLoader.getURLs();
+                       // What are the URLs on java 8?
+                       URL[] java5Urls = getURLs(DEFAULT_CLASSPATH_ENTRIES);//getURLs(JAVA5_CLASSPATH_ENTRIES);
                        URL[] urls = new URL[testUrls.length + java5Urls.length];
                        System.arraycopy(testUrls, 0, urls, 0, testUrls.length);
                        System.arraycopy(java5Urls, 0, urls, testUrls.length, java5Urls.length);
@@ -628,7 +628,7 @@ public class AjcTestCase extends TestCase {
                        URL[] sandboxUrls = getURLs(cp.toString());
                        sandboxLoader = createWeavingClassLoader(sandboxUrls, aspectjLoader);
                        // sandboxLoader = createWeavingClassLoader(sandboxUrls,testLoader);
-               }else if(useFullLTW  && useLTW) {                       
+               } else if(useFullLTW  && useLTW) {                      
                        if(vmargs == null){
                                vmargs ="";
                        }
index d7350428ad6e2a614bcb50f99e2a929245ff6898..fc6fe4ce9931bd46c2c8cac9b1d0d833f846f6b2 100644 (file)
 package org.aspectj.testing;
 
 /**
- * @author colyer
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
+ * @author Adrian Colyer
+ * @author Andy Clement
  */
 public class OutputLine {
 
+       // Expected text
        private String text;
+
+       // Comma separated list of vm versions on which this is expected
+       private String vm;
        
-       /**
-        * @return Returns the text.
-        */
        public String getText() {
                return text;
        }
-       /**
-        * @param text The text to set.
-        */
+       
        public void setText(String text) {
                this.text = text;
        }
+       
+       public String getVm() {
+               return vm;
+       }
+       
+       public void setVm(String vm) {
+               this.vm = vm;
+       }
+       
 }
index ffb3362f32c46196760af4eedf3a8f7acd34e781..4f978f6b630c8899d347276cce1e9d0272071f03 100644 (file)
@@ -16,13 +16,16 @@ import java.util.ArrayList;
 import java.util.StringTokenizer;
 
 import org.aspectj.tools.ajc.AjcTestCase;
+import org.aspectj.util.LangUtil;
 
 public class OutputSpec {
        
        private List<String> expectedOutputLines = new ArrayList<String>();
 
        public void addLine(OutputLine line) {
-               expectedOutputLines.add(line.getText());
+               if (line.getVm() == null || line.getVm().contains(LangUtil.getVmVersionString())) {
+                       expectedOutputLines.add(line.getText());
+               }
        }
        
        public void matchAgainst(String output) {
index 6e897fdbdd3add5a1f6a3471e6efe59926c7bcb1..a3297e68c514751aa346580d04cc82f3b702798e 100644 (file)
@@ -27,7 +27,8 @@
      </compile>
      <run class="c.d.DistantResource">
      <stdout>
-       <line text="Annotation is @a.b.SimpleAnnotation(classname=oranges)"/>
+       <line text="Annotation is @a.b.SimpleAnnotation(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @a.b.SimpleAnnotation(classname=&quot;oranges&quot;)" vm="1.9"/>
      </stdout>
      </run>
    </ajc-test>
@@ -39,7 +40,8 @@
      </compile>
       <run class="c.d.DistantResource">
      <stdout>       
-       <line text="Annotation is @a.b.SimpleAnnotation(classname=oranges)"/>
+       <line text="Annotation is @a.b.SimpleAnnotation(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @a.b.SimpleAnnotation(classname=&quot;oranges&quot;)" vm="1.9"/>
      </stdout>
      </run>
    </ajc-test>
@@ -51,7 +53,8 @@
      </compile>     
      <run class="c.d.DistantResource">
      <stdout>
-       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=&quot;oranges&quot;)" vm="1.9"/>       
      </stdout>
      </run>
    </ajc-test>
@@ -63,7 +66,8 @@
      </compile>
      <run class="c.d.DistantResource">
      <stdout>
-       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=&quot;oranges&quot;)" vm="1.9"/>       
      </stdout>
      </run>
    </ajc-test>
@@ -76,7 +80,8 @@
      </compile>
      <run class="c.d.DistantResource">
      <stdout>
-       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=&quot;oranges&quot;)" vm="1.9"/>       
      </stdout>
      </run>
    </ajc-test>
@@ -90,7 +95,8 @@
      </compile>
      <run class="c.d.DistantResource">
      <stdout>
-       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=oranges)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="Annotation is @e.f.SimpleAnnotation2(classname=&quot;oranges&quot;)" vm="1.9"/>              
      </stdout>
      </run>
    </ajc-test>
index 063bee514177bc5d8ee9fd4fef57860778876f29..f9c788b0c130685eae795b1834dcf432d9fa6d65 100644 (file)
@@ -70,7 +70,8 @@
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
@@ -80,7 +81,8 @@
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
@@ -90,7 +92,8 @@
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_$choice)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_$choice.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
      <run class="a.b.c.Runner">
        <stdout>
        <line text="wibble"/>
-       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_)"/>
+       <line text="@a.b.c.RelatedType(value=class a.b.c.Vote$_)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+       <line text="@a.b.c.RelatedType(value=a.b.c.Vote$_.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
index 37963fc15ff096b8f082b73e4562357635bf1947..241ad3867652c4fcd4bafdee73700476b35583af 100644 (file)
            <line text="Annotations on field1? true"/>
            <line text="Annotation count is 4"/>
            <line text="@AnnoBoolean(value=true, zzz=false)"/>
-           <line text="@AnnoClass(value=class java.lang.Integer, ccc=class java.lang.String)"/>
+           <line text="@AnnoClass(value=class java.lang.Integer, ccc=class java.lang.String)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@AnnoClass(value=java.lang.Integer.class, ccc=java.lang.String.class)" vm="1.9"/>
            <line text="@AnnoLong(value=999, jjj=111)"/>
-           <line text="@AnnoString(value=set from xml, sss=xyz)"/>
+           <line text="@AnnoString(value=set from xml, sss=xyz)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@AnnoString(value=&quot;set from xml&quot;, sss=&quot;xyz&quot;)" vm="1.9"/>
            <line text="Annotations on field2? true"/>
            <line text="Annotation count is 1"/>
-           <line text="@AnnoClass(value=class java.lang.String, ccc=class java.lang.String)"/>
+           <line text="@AnnoClass(value=class java.lang.String, ccc=class java.lang.String)"  vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@AnnoClass(value=java.lang.String.class, ccc=java.lang.String.class)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
        <stdout>
            <line text="Annotations on field1? true"/>
            <line text="Annotation count is 4"/>
-           <line text="@AnnoChar(value=z, ccc=a)"/>
+           <line text="@AnnoChar(value=z, ccc=a)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@AnnoChar(value='z', ccc='a')" vm="1.9"/>
            <line text="@AnnoDouble(value=99.0, ddd=3.0)"/>
-           <line text="@AnnoFloat(value=6.0, fff=4.0)"/>
+           <line text="@AnnoFloat(value=6.0, fff=4.0)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@AnnoFloat(value=6.0f, fff=4.0f)" vm="1.9"/>
            <line text="@AnnoShort(value=8, sss=3)"/>
            <line text="Annotations on field2? true"/>
            <line text="Annotation count is 2"/>
        <stdout>
            <line text="Annotations on field1? true"/>
            <line text="Annotation count is 1"/>
-           <line text="@Annot(a=a, fred=false, value=abc)"/>
+           <line text="@Annot(a=a, fred=false, value=abc)" vm="1.2,1.3,1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@Annot(a='a', fred=false, value=&quot;abc&quot;)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
        <stdout>
            <line text="Annotations on field1? true"/>
            <line text="Annotation count is 1"/>
-           <line text="@Annot(a=a, fred=false, value=abc)"/>
+           <line text="@Annot(a=a, fred=false, value=abc)" vm="1.4,1.5,1.6,1.7,1.8"/>
+           <line text="@Annot(a='a', fred=false, value=&quot;abc&quot;)" vm="1.9"/>
        </stdout>
      </run>
    </ajc-test>
index 6662dbb7af42658ecfb546ac5d4c8464f6d9a0aa..4965b448a8ed6d0ef6a83443694255334d812d9e 100644 (file)
@@ -59,9 +59,9 @@
       <compile files="SimpleJ.java" options="-source 1.9"/>
     </ajc-test>
 
-    <!-- check class file version is 53.0 -->
-    <ajc-test dir="bugs160/simplejava" title="simple - l">
-      <compile files="SimpleJ.java" options="-source 1.9 -target 1.9"/>
+    <!-- check class file version is 49.0 -->
+    <ajc-test dir="bugs160/simplejava" title="simple - m">
+      <compile files="SimpleJ.java" options="-1.5"/>
     </ajc-test>
 
     <ajc-test dir="bugs160/simplejava" title="simple - n">
index 86302bfbaf0a8676002fbb00a59f1692bb62a2c2..a07bd87aa5140278021866aa1c05fd1d3826a8c6 100644 (file)
@@ -19,6 +19,7 @@ import java.util.Set;
 
 import org.aspectj.ajde.core.ICompilerConfiguration;
 import org.aspectj.ajde.core.IOutputLocationManager;
+import org.aspectj.util.LangUtil;
 
 /**
  * ICompilerConfiguration which mirrors the way AJDT behaves. Always returns that its 1.5 compliant and enables the setting of all
@@ -72,6 +73,9 @@ public class MultiProjTestCompilerConfiguration implements ICompilerConfiguratio
                                + "c:/batik/batik-1.6/lib/batik-awt-util.jar;" + "c:/batik/batik-1.6/lib/batik-dom.jar;"
                                + "c:/batik/batik-1.6/lib/batik-svggen.jar;" + File.pathSeparator + ".." + File.separator + "lib" + File.separator
                                + "test" + File.separator + "aspectjrt.jar";
+               if (LangUtil.is19VMOrGreater()) {
+                       cp = LangUtil.getJrtFsFilePath() + File.pathSeparator + cp;
+               }
 
                // look at dependant projects
                if (dependants != null) {
index 0f19124a97661b01b970f3bb1be3f8772e954f47..08c2da43a0d6d70c572f5147b885346995e346f8 100644 (file)
@@ -42,6 +42,13 @@ public class LangUtil {
 
        private static double vmVersion;
 
+       /**
+        * @return the vm version (1.1, 1.2, 1.3, 1.4, etc)
+        */
+       public static String getVmVersionString() {
+               return Double.toString(vmVersion);
+       }
+       
        static {
                StringWriter buf = new StringWriter();
                PrintWriter writer = new PrintWriter(buf);
index d041327aa8628cd1095f515421f8e0e41e18b986..92f6cbe6db5b031dc71be6817a5570653f8eebec 100644 (file)
@@ -29,10 +29,15 @@ import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.SimpleFileVisitor;
 import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -87,9 +92,6 @@ public class ClassPathManager {
        }
 
        private static URI JRT_URI = URI.create("jrt:/"); //$NON-NLS-1$
-
-       private static String MODULES_PATH = "modules"; //$NON-NLS-1$
-       private static String JAVA_BASE_PATH = "java.base"; //$NON-NLS-1$
        
        public void addPath(String name, IMessageHandler handler) {
                File f = new File(name);
@@ -108,7 +110,7 @@ public class ClassPathManager {
                        try {
                                if (lc.endsWith(LangUtil.JRT_FS)) {
                                        // Java9
-                                       entries.add(new JImageEntry(new File(f.getParentFile()+File.separator+"lib"+File.separator+"modules")));
+                                       entries.add(new JImageEntry());//new File(f.getParentFile()+File.separator+"lib"+File.separator+"modules")));
                                } else {
                                        entries.add(new ZipFileEntry(f));
                                }
@@ -298,78 +300,128 @@ public class ClassPathManager {
 
        }
        
-       public class JImageEntry extends Entry {
-               private FileSystem fs;
+       /**
+        * Maintains a shared package cache for java runtime image. This maps packages (for example:
+        * java/lang) to a starting root position in the filesystem (for example: /modules/java.base/java/lang).
+        * When searching for a type we work out the package name, use it to find where in the filesystem
+        * to start looking then run from there. Once found we do cache what we learn to make subsequent
+        * lookups of that type even faster.
+        */
+       public static class JImageEntry extends Entry {
                
-               public JImageEntry(File file) {
-                       fs = FileSystems.getFileSystem(JRT_URI);
-//                     Iterable<java.nio.file.Path> roots = fs.getRootDirectories();
-//                     java.nio.file.Path basePath = null;
-//                     try {
-//                             System.err.println("Find on javax.naming.Context: "+find("javax.naming.Context"));
-//                     } catch (IOException e) {
-//                             // TODO Auto-generated catch block
-//                             e.printStackTrace();
-//                     }
-//                     roots: for (java.nio.file.Path path : roots) {
-//                             System.err.println(">>"+path);
-//                             try (DirectoryStream<java.nio.file.Path> stream = Files.newDirectoryStream(path)) {
-//                                     for (java.nio.file.Path subdir: stream) {
-//                                             System.err.println(">>>"+subdir);
-////                                           if (subdir.toString().indexOf(JAVA_BASE_PATH) != -1) {
-////                                                   basePath = subdir;
-////                                                   break roots;
-////                                           }
-//                                 }
-//                             } catch (Exception e) {
-//                                     e.printStackTrace();
-//                             }
-//                     }
+               private final static FileSystem fs = FileSystems.getFileSystem(JRT_URI);
+               private final static Map<String, Path> fileCache = new HashMap<>();
+               private final static Map<String, Path> packageCache = new HashMap<>();
+               private static boolean packageCacheInitialized = false;
+
+               public JImageEntry() {
+                       buildPackageMap();
                }
                
-               @Override
-               public ClassFile find(String name) throws IOException {
-                       String fileName = name.replace('.', '/') + ".class";
-                       try {
-                               // /modules/java.base/java/lang/Object.class (jdk9 b74)
-                               Path p = fs.getPath(MODULES_PATH,JAVA_BASE_PATH,fileName);
-                               byte[] bs = Files.readAllBytes(p);
-                               return new ByteBasedClassFile(bs, fileName);
-                       } catch (NoSuchFileException nsfe) {
-                               // try other modules!
+               class PackageCacheConstructionVisitor extends SimpleFileVisitor<Path> {
+                       @Override
+                       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                               if (file.getNameCount() > 3 && file.toString().endsWith(".class")) {
+                                       int fnc = file.getNameCount();
+                                       if (fnc > 3) { // There is a package name - e.g. /modules/java.base/java/lang/Object.class
+                                               Path packagePath = file.subpath(2, fnc-1);
+                                               String packagePathString = packagePath.toString();
+       //                                      System.out.println("adding entry "+packagePath+" "+file.subpath(0, fnc-1));
+       //                                      if (packageMap.get(packagePath) != null && !packageMap.get(packagePath).equals(file.subpath(0, 2))) {
+       //                                              throw new IllegalStateException("Found "+packageMap.get(packagePath)+" for path "+file);
+       //                                      }
+                                               packageCache.put(packagePathString, file.subpath(0, fnc-1));
+                                       }
+                               }
+                               return FileVisitResult.CONTINUE;
+                       }
+               }
+               
+               /**
+                * Create a map from package names to the root area of the relevant filesystem (e.g.
+                * java/lang -> /modules/java.base).
+                */
+               private synchronized void buildPackageMap() {
+                       if (!packageCacheInitialized) {
+                               packageCacheInitialized = true;
+//                             long s = System.currentTimeMillis();
                                Iterable<java.nio.file.Path> roots = fs.getRootDirectories();
-                               for (java.nio.file.Path path : roots) {
-                                       DirectoryStream<java.nio.file.Path> stream = Files.newDirectoryStream(path);
-                                       try {
-                                               for (java.nio.file.Path module: stream) {
-                                                       // module will be something like /packages or /modules
-                                                       for (java.nio.file.Path submodule: Files.newDirectoryStream(module)) {
-                                                               // submodule will be /modules/java.base or somesuch
-                                                               try {
-                                                                       Path p = fs.getPath(submodule.toString(), fileName);
-                                                                       byte[] bs = Files.readAllBytes(p);
-                                                                       return new ByteBasedClassFile(bs, fileName);
-                                                               } catch (NoSuchFileException nsfe2) {
-                                                               }
-                                                       }
-                                               }
-                                       } finally {
-                                               stream.close();
+                               PackageCacheConstructionVisitor visitor = new PackageCacheConstructionVisitor();
+                               try {
+                                       for (java.nio.file.Path path : roots) {
+                                               Files.walkFileTree(path, visitor);
+                                       }
+                               }
+                               catch (IOException e) {
+                                       throw new RuntimeException(e);
+                               }
+//                             System.out.println("Time to build package map: "+(System.currentTimeMillis()-s)+"ms");
+                       }
+               }
+               
+               class TypeLocator extends SimpleFileVisitor<Path> {
+                       
+                       private String name;
+                       public Path found;
+                       public int filesSearchedCount;
+
+                       public TypeLocator(String name) {
+                               this.name = name;
+                       }
+
+                       @Override
+                       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                               filesSearchedCount++;
+                               if (file.getNameCount() > 2 && file.toString().endsWith(".class")) {
+                                       int fnc = file.getNameCount();
+                                       Path filePath = file.subpath(2, fnc);
+                                       String filePathString = filePath.toString();
+                                       if (filePathString.equals(name)) {
+                                               fileCache.put(filePathString, file);
+                                               found = file;
+                                               return FileVisitResult.TERMINATE;
                                        }
                                }
-                               return null;                    
+                               return FileVisitResult.CONTINUE;
                        }
                }
                
-               public ClassFile find(String module, String name) throws IOException {
-                       String fileName = name.replace('.', '/') + ".class";
+               private Path searchForFileAndCache(final Path startPath, final String name) {
+                       TypeLocator locator = new TypeLocator(name);
                        try {
-                               Path p = fs.getPath(module,fileName);
-                               byte[] bs = Files.readAllBytes(p);
-                               return new ByteBasedClassFile(bs, fileName);
-                       } catch (NoSuchFileException nsfe) {
-                               return null;                    
+                               Files.walkFileTree(startPath, locator);
+                       }
+                       catch (IOException e) {
+                               throw new RuntimeException(e);
+                       }
+                       return locator.found;
+               }
+
+               public ClassFile find(String name) throws IOException {
+                       String fileName = name.replace('.', '/') + ".class";
+                       Path p = fileCache.get(fileName);
+                       if (p == null) {
+                               // Check the packages map to see if we know about this package
+                               int idx = fileName.lastIndexOf('/');
+                               if (idx == -1) {
+                                       return null;
+                               }
+                               Path packageStart = null;
+                               String packageName = null;
+                               if (idx !=-1 ) {
+                                       packageName = fileName.substring(0, idx);
+                                       packageStart = packageCache.get(packageName);
+                                       if (packageStart != null) {
+                                               p = searchForFileAndCache(packageStart, fileName);
+                                       }
+                               }
+                       }
+                       if (p == null) {
+                               return null;
                        }
+                       byte[] bs = Files.readAllBytes(p);
+                       ClassFile cf = new ByteBasedClassFile(bs, fileName);
+                       return cf;
                }
 
        }
index 48ef6ae8a6e5a04a639ad838359cadeabad1280e..d0e24f8b27a27c30c252f6b229fe3a6a2958ed0e 100644 (file)
@@ -134,9 +134,11 @@ public class WeavingAdaptor implements IMessageContext {
                                warn("cannot determine classpath");
                        }
                }
-
                list.addAll(0, makeClasspath(System.getProperty("sun.boot.class.path")));
-
+               // On Java9 the sun.boot.class.path won't be set. System classes accessible through JRT filesystem 
+        if (LangUtil.is19VMOrGreater()) {
+                       list.add(0, LangUtil.getJrtFsFilePath());
+        }
                return list;
        }
 
diff --git a/weaver/testdata/StaticTjpBeforeHelloWorld.1.9.txt b/weaver/testdata/StaticTjpBeforeHelloWorld.1.9.txt
new file mode 100644 (file)
index 0000000..58863d8
--- /dev/null
@@ -0,0 +1,103 @@
+public class HelloWorld extends java.lang.Object:
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_0 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_1 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_2 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_3 [Synthetic]
+  public void <init>():
+                    ALOAD_0     // LHelloWorld; this   (line 5)
+                    INVOKESPECIAL java.lang.Object.<init> ()V
+    constructor-execution(void HelloWorld.<init>())
+    |               GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+    |               INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
+    |               RETURN
+    constructor-execution(void HelloWorld.<init>())
+  end public void <init>()
+
+  public static void main(String[]):
+    method-execution(void HelloWorld.main(java.lang.String[]))
+    |               GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;   (line 8)
+    |               INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
+    | field-get(java.io.PrintStream java.lang.System.out)
+    | |             GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+    | |             INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
+    | |             GETSTATIC java.lang.System.out Ljava/io/PrintStream;
+    | field-get(java.io.PrintStream java.lang.System.out)
+    |               LDC "hello world"   (line 9)
+    | method-call(void java.io.PrintStream.println(java.lang.String))
+    | |             GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+    | |             INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
+    | |             INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
+    | method-call(void java.io.PrintStream.println(java.lang.String))
+    |               RETURN   (line 11)
+    method-execution(void HelloWorld.main(java.lang.String[]))
+  end public static void main(String[])
+
+  static void <clinit>():
+                    INVOKESTATIC HelloWorld.ajc$preClinit ()V
+    staticinitialization(void HelloWorld.<clinit>())
+    |               RETURN
+    staticinitialization(void HelloWorld.<clinit>())
+  end static void <clinit>()
+
+  private static void ajc$preClinit():
+                    NEW org.aspectj.runtime.reflect.Factory
+                    DUP
+                    LDC "HelloWorld.java"
+                    LDC "HelloWorld"
+                    INVOKESTATIC java.lang.Class.forName (Ljava/lang/String;)Ljava/lang/Class;
+                    INVOKESPECIAL org.aspectj.runtime.reflect.Factory.<init> (Ljava/lang/String;Ljava/lang/Class;)V
+                    ASTORE_0
+                    ALOAD_0
+                    LDC "constructor-execution"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "HelloWorld"
+                    LDC ""
+                    LDC ""
+                    LDC ""
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeConstructorSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/ConstructorSignature;
+                    ICONST_5
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "field-get"
+                    ALOAD_0
+                    LDC "19"
+                    LDC "out"
+                    LDC "java.lang.System"
+                    LDC "java.io.PrintStream"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeFieldSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/FieldSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-call"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "println"
+                    LDC "java.io.PrintStream"
+                    LDC "java.lang.String"
+                    LDC "x"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 9
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-execution"
+                    ALOAD_0
+                    LDC "9"
+                    LDC "main"
+                    LDC "HelloWorld"
+                    LDC "[Ljava.lang.String;"
+                    LDC "args"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    RETURN
+  end private static void ajc$preClinit()
+end public class HelloWorld
diff --git a/weaver/testdata/TjpAround2HelloWorld.1.9.txt b/weaver/testdata/TjpAround2HelloWorld.1.9.txt
new file mode 100644 (file)
index 0000000..4e334a6
--- /dev/null
@@ -0,0 +1,505 @@
+public class HelloWorld extends java.lang.Object:
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_0 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_1 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_2 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_3 [Synthetic]
+  public void <init>():
+                    ALOAD_0     // LHelloWorld; ajc$this   (line 5)
+                    INVOKESPECIAL java.lang.Object.<init> ()V
+                    GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    ALOAD_0
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE_1
+    constructor-execution(void HelloWorld.<init>())
+    |               ICONST_2
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE_3
+    |               ALOAD_3
+    |               ICONST_0
+    |               ALOAD_0
+    |               AASTORE
+    |               ALOAD_3
+    |               ICONST_1
+    |               ALOAD_1
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure3
+    |               DUP
+    |               ALOAD_3
+    |               INVOKESPECIAL HelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_1
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    |               RETURN
+    constructor-execution(void HelloWorld.<init>())
+  end public void <init>()
+
+  public static void main(String[]):
+                    ALOAD_0
+                    ASTORE 9
+                    GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ACONST_NULL
+                    ALOAD 9
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
+    method-execution(void HelloWorld.main(java.lang.String[]))
+    |               ICONST_2   (line 8)
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 12
+    |               ALOAD 12
+    |               ICONST_0
+    |               ALOAD 9
+    |               AASTORE
+    |               ALOAD 12
+    |               ICONST_1
+    |               ALOAD 10
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure15
+    |               DUP
+    |               ALOAD 12
+    |               INVOKESPECIAL HelloWorld$AjcClosure15.<init> ([Ljava/lang/Object;)V
+    |               ALOAD 10
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    |               RETURN
+    method-execution(void HelloWorld.main(java.lang.String[]))
+  end public static void main(String[])
+
+  static void <clinit>():
+                    INVOKESTATIC HelloWorld.ajc$preClinit ()V
+    staticinitialization(void HelloWorld.<clinit>())
+    |               RETURN
+    staticinitialization(void HelloWorld.<clinit>())
+  end static void <clinit>()
+
+  static final void init$_aroundBody0(HelloWorld, org.aspectj.lang.JoinPoint):
+                    RETURN   (line 5)
+  end static final void init$_aroundBody0(HelloWorld, org.aspectj.lang.JoinPoint)
+
+  static final void init$_aroundBody2(HelloWorld, org.aspectj.lang.JoinPoint):
+                    ICONST_2
+                    ANEWARRAY java.lang.Object
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    ALOAD_0
+                    AASTORE
+                    ALOAD_2
+                    ICONST_1
+                    ALOAD_1
+                    AASTORE
+                    NEW HelloWorld$AjcClosure1
+                    DUP
+                    ALOAD_2
+                    INVOKESPECIAL HelloWorld$AjcClosure1.<init> ([Ljava/lang/Object;)V
+                    ALOAD_1
+                    INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+                    POP
+                    RETURN
+  end static final void init$_aroundBody2(HelloWorld, org.aspectj.lang.JoinPoint)
+
+  static final java.io.PrintStream out_aroundBody4(org.aspectj.lang.JoinPoint):
+                    GETSTATIC java.lang.System.out Ljava/io/PrintStream;   (line 8)
+                    ARETURN
+  end static final java.io.PrintStream out_aroundBody4(org.aspectj.lang.JoinPoint)
+
+  static final java.io.PrintStream out_aroundBody6(org.aspectj.lang.JoinPoint):
+                    ICONST_1
+                    ANEWARRAY java.lang.Object
+                    ASTORE_1
+                    ALOAD_1
+                    ICONST_0
+                    ALOAD_0
+                    AASTORE
+                    NEW HelloWorld$AjcClosure5
+                    DUP
+                    ALOAD_1
+                    INVOKESPECIAL HelloWorld$AjcClosure5.<init> ([Ljava/lang/Object;)V
+                    ALOAD_0
+                    INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+                    CHECKCAST java.io.PrintStream
+                    ARETURN
+  end static final java.io.PrintStream out_aroundBody6(org.aspectj.lang.JoinPoint)
+
+  static final void println_aroundBody8(java.io.PrintStream, String, org.aspectj.lang.JoinPoint):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V   (line 9)
+                    RETURN
+  end static final void println_aroundBody8(java.io.PrintStream, String, org.aspectj.lang.JoinPoint)
+
+  static final void println_aroundBody10(java.io.PrintStream, String, org.aspectj.lang.JoinPoint):
+                    ICONST_3
+                    ANEWARRAY java.lang.Object
+                    ASTORE_3
+                    ALOAD_3
+                    ICONST_0
+                    ALOAD_0
+                    AASTORE
+                    ALOAD_3
+                    ICONST_1
+                    ALOAD_1
+                    AASTORE
+                    ALOAD_3
+                    ICONST_2
+                    ALOAD_2
+                    AASTORE
+                    NEW HelloWorld$AjcClosure9
+                    DUP
+                    ALOAD_3
+                    INVOKESPECIAL HelloWorld$AjcClosure9.<init> ([Ljava/lang/Object;)V
+                    ALOAD_2
+                    INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+                    POP
+                    RETURN
+  end static final void println_aroundBody10(java.io.PrintStream, String, org.aspectj.lang.JoinPoint)
+
+  static final void main_aroundBody12(String[], org.aspectj.lang.JoinPoint):
+                    GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ACONST_NULL
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE_2
+    field-get(java.io.PrintStream java.lang.System.out)
+    |               ICONST_1
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 4
+    |               ALOAD 4
+    |               ICONST_0
+    |               ALOAD_2
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure7
+    |               DUP
+    |               ALOAD 4
+    |               INVOKESPECIAL HelloWorld$AjcClosure7.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_2
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               CHECKCAST java.io.PrintStream
+    field-get(java.io.PrintStream java.lang.System.out)
+                    LDC "hello world"   (line 9)
+                    ASTORE 6
+                    ASTORE 8
+                    GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ALOAD 8
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
+    method-call(void java.io.PrintStream.println(java.lang.String))
+    |               ICONST_3
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 12
+    |               ALOAD 12
+    |               ICONST_0
+    |               ALOAD 8
+    |               AASTORE
+    |               ALOAD 12
+    |               ICONST_1
+    |               ALOAD 6
+    |               AASTORE
+    |               ALOAD 12
+    |               ICONST_2
+    |               ALOAD 10
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure11
+    |               DUP
+    |               ALOAD 12
+    |               INVOKESPECIAL HelloWorld$AjcClosure11.<init> ([Ljava/lang/Object;)V
+    |               ALOAD 10
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    method-call(void java.io.PrintStream.println(java.lang.String))
+                    RETURN   (line 11)
+  end static final void main_aroundBody12(String[], org.aspectj.lang.JoinPoint)
+
+  static final void main_aroundBody14(String[], org.aspectj.lang.JoinPoint):
+                    ICONST_2   (line 8)
+                    ANEWARRAY java.lang.Object
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    ALOAD_0
+                    AASTORE
+                    ALOAD_2
+                    ICONST_1
+                    ALOAD_1
+                    AASTORE
+                    NEW HelloWorld$AjcClosure13
+                    DUP
+                    ALOAD_2
+                    INVOKESPECIAL HelloWorld$AjcClosure13.<init> ([Ljava/lang/Object;)V
+                    ALOAD_1
+                    INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+                    POP
+                    RETURN
+  end static final void main_aroundBody14(String[], org.aspectj.lang.JoinPoint)
+
+  private static void ajc$preClinit():
+                    NEW org.aspectj.runtime.reflect.Factory
+                    DUP
+                    LDC "HelloWorld.java"
+                    LDC "HelloWorld"
+                    INVOKESTATIC java.lang.Class.forName (Ljava/lang/String;)Ljava/lang/Class;
+                    INVOKESPECIAL org.aspectj.runtime.reflect.Factory.<init> (Ljava/lang/String;Ljava/lang/Class;)V
+                    ASTORE_0
+                    ALOAD_0
+                    LDC "constructor-execution"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "HelloWorld"
+                    LDC ""
+                    LDC ""
+                    LDC ""
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeConstructorSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/ConstructorSignature;
+                    ICONST_5
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "field-get"
+                    ALOAD_0
+                    LDC "19"
+                    LDC "out"
+                    LDC "java.lang.System"
+                    LDC "java.io.PrintStream"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeFieldSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/FieldSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-call"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "println"
+                    LDC "java.io.PrintStream"
+                    LDC "java.lang.String"
+                    LDC "x"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 9
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-execution"
+                    ALOAD_0
+                    LDC "9"
+                    LDC "main"
+                    LDC "HelloWorld"
+                    LDC "[Ljava.lang.String;"
+                    LDC "args"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    RETURN
+  end private static void ajc$preClinit()
+end public class HelloWorld
+
+public class HelloWorld$AjcClosure1 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST HelloWorld
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.init$_aroundBody0 (LHelloWorld;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure1
+
+public class HelloWorld$AjcClosure3 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST HelloWorld
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.init$_aroundBody2 (LHelloWorld;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure3
+
+public class HelloWorld$AjcClosure5 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.out_aroundBody4 (Lorg/aspectj/lang/JoinPoint;)Ljava/io/PrintStream;
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure5
+
+public class HelloWorld$AjcClosure7 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.out_aroundBody6 (Lorg/aspectj/lang/JoinPoint;)Ljava/io/PrintStream;
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure7
+
+public class HelloWorld$AjcClosure9 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST java.io.PrintStream
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST java.lang.String
+                    ALOAD_2
+                    ICONST_2
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.println_aroundBody8 (Ljava/io/PrintStream;Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure9
+
+public class HelloWorld$AjcClosure11 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST java.io.PrintStream
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST java.lang.String
+                    ALOAD_2
+                    ICONST_2
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.println_aroundBody10 (Ljava/io/PrintStream;Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure11
+
+public class HelloWorld$AjcClosure13 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST [Ljava.lang.String;
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.main_aroundBody12 ([Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure13
+
+public class HelloWorld$AjcClosure15 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST [Ljava.lang.String;
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.main_aroundBody14 ([Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure15
diff --git a/weaver/testdata/TjpAroundHelloWorld.1.9.txt b/weaver/testdata/TjpAroundHelloWorld.1.9.txt
new file mode 100644 (file)
index 0000000..1e814c7
--- /dev/null
@@ -0,0 +1,314 @@
+public class HelloWorld extends java.lang.Object:
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_0 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_1 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_2 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_3 [Synthetic]
+  public void <init>():
+                    ALOAD_0     // LHelloWorld; ajc$this   (line 5)
+                    INVOKESPECIAL java.lang.Object.<init> ()V
+                    GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    ALOAD_0
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE_1
+    constructor-execution(void HelloWorld.<init>())
+    |               ICONST_2
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE_2
+    |               ALOAD_2
+    |               ICONST_0
+    |               ALOAD_0
+    |               AASTORE
+    |               ALOAD_2
+    |               ICONST_1
+    |               ALOAD_1
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure1
+    |               DUP
+    |               ALOAD_2
+    |               INVOKESPECIAL HelloWorld$AjcClosure1.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_1
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    |               RETURN
+    constructor-execution(void HelloWorld.<init>())
+  end public void <init>()
+
+  public static void main(String[]):
+                    ALOAD_0
+                    ASTORE 7
+                    GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ACONST_NULL
+                    ALOAD 7
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 8
+    method-execution(void HelloWorld.main(java.lang.String[]))
+    |               ICONST_2   (line 8)
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 9
+    |               ALOAD 9
+    |               ICONST_0
+    |               ALOAD 7
+    |               AASTORE
+    |               ALOAD 9
+    |               ICONST_1
+    |               ALOAD 8
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure7
+    |               DUP
+    |               ALOAD 9
+    |               INVOKESPECIAL HelloWorld$AjcClosure7.<init> ([Ljava/lang/Object;)V
+    |               ALOAD 8
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    |               RETURN
+    method-execution(void HelloWorld.main(java.lang.String[]))
+  end public static void main(String[])
+
+  static void <clinit>():
+                    INVOKESTATIC HelloWorld.ajc$preClinit ()V
+    staticinitialization(void HelloWorld.<clinit>())
+    |               RETURN
+    staticinitialization(void HelloWorld.<clinit>())
+  end static void <clinit>()
+
+  static final void init$_aroundBody0(HelloWorld, org.aspectj.lang.JoinPoint):
+                    RETURN   (line 5)
+  end static final void init$_aroundBody0(HelloWorld, org.aspectj.lang.JoinPoint)
+
+  static final java.io.PrintStream out_aroundBody2(org.aspectj.lang.JoinPoint):
+                    GETSTATIC java.lang.System.out Ljava/io/PrintStream;   (line 8)
+                    ARETURN
+  end static final java.io.PrintStream out_aroundBody2(org.aspectj.lang.JoinPoint)
+
+  static final void println_aroundBody4(java.io.PrintStream, String, org.aspectj.lang.JoinPoint):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V   (line 9)
+                    RETURN
+  end static final void println_aroundBody4(java.io.PrintStream, String, org.aspectj.lang.JoinPoint)
+
+  static final void main_aroundBody6(String[], org.aspectj.lang.JoinPoint):
+                    GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ACONST_NULL
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE_2
+    field-get(java.io.PrintStream java.lang.System.out)
+    |               ICONST_1
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 4
+    |               ALOAD 4
+    |               ICONST_0
+    |               ALOAD_2
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure3
+    |               DUP
+    |               ALOAD 4
+    |               INVOKESPECIAL HelloWorld$AjcClosure3.<init> ([Ljava/lang/Object;)V
+    |               ALOAD_2
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               CHECKCAST java.io.PrintStream
+    field-get(java.io.PrintStream java.lang.System.out)
+                    LDC "hello world"   (line 9)
+                    ASTORE 6
+                    ASTORE 8
+                    GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ALOAD 8
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 10
+    method-call(void java.io.PrintStream.println(java.lang.String))
+    |               ICONST_3
+    |               ANEWARRAY java.lang.Object
+    |               ASTORE 12
+    |               ALOAD 12
+    |               ICONST_0
+    |               ALOAD 8
+    |               AASTORE
+    |               ALOAD 12
+    |               ICONST_1
+    |               ALOAD 6
+    |               AASTORE
+    |               ALOAD 12
+    |               ICONST_2
+    |               ALOAD 10
+    |               AASTORE
+    |               NEW HelloWorld$AjcClosure5
+    |               DUP
+    |               ALOAD 12
+    |               INVOKESPECIAL HelloWorld$AjcClosure5.<init> ([Ljava/lang/Object;)V
+    |               ALOAD 10
+    |               INVOKESTATIC Aspect.ajc_around (Lorg/aspectj/runtime/internal/AroundClosure;Lorg/aspectj/lang/JoinPoint;)Ljava/lang/Object;
+    |               POP
+    method-call(void java.io.PrintStream.println(java.lang.String))
+                    RETURN   (line 11)
+  end static final void main_aroundBody6(String[], org.aspectj.lang.JoinPoint)
+
+  private static void ajc$preClinit():
+                    NEW org.aspectj.runtime.reflect.Factory
+                    DUP
+                    LDC "HelloWorld.java"
+                    LDC "HelloWorld"
+                    INVOKESTATIC java.lang.Class.forName (Ljava/lang/String;)Ljava/lang/Class;
+                    INVOKESPECIAL org.aspectj.runtime.reflect.Factory.<init> (Ljava/lang/String;Ljava/lang/Class;)V
+                    ASTORE_0
+                    ALOAD_0
+                    LDC "constructor-execution"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "HelloWorld"
+                    LDC ""
+                    LDC ""
+                    LDC ""
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeConstructorSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/ConstructorSignature;
+                    ICONST_5
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "field-get"
+                    ALOAD_0
+                    LDC "19"
+                    LDC "out"
+                    LDC "java.lang.System"
+                    LDC "java.io.PrintStream"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeFieldSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/FieldSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-call"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "println"
+                    LDC "java.io.PrintStream"
+                    LDC "java.lang.String"
+                    LDC "x"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 9
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-execution"
+                    ALOAD_0
+                    LDC "9"
+                    LDC "main"
+                    LDC "HelloWorld"
+                    LDC "[Ljava.lang.String;"
+                    LDC "args"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    RETURN
+  end private static void ajc$preClinit()
+end public class HelloWorld
+
+public class HelloWorld$AjcClosure1 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST HelloWorld
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.init$_aroundBody0 (LHelloWorld;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure1
+
+public class HelloWorld$AjcClosure3 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.out_aroundBody2 (Lorg/aspectj/lang/JoinPoint;)Ljava/io/PrintStream;
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure3
+
+public class HelloWorld$AjcClosure5 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST java.io.PrintStream
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST java.lang.String
+                    ALOAD_2
+                    ICONST_2
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.println_aroundBody4 (Ljava/io/PrintStream;Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure5
+
+public class HelloWorld$AjcClosure7 extends org.aspectj.runtime.internal.AroundClosure:
+  public void <init>(Object[]):
+                    ALOAD_0
+                    ALOAD_1
+                    INVOKESPECIAL org.aspectj.runtime.internal.AroundClosure.<init> ([Ljava/lang/Object;)V
+                    RETURN
+  end public void <init>(Object[])
+
+  public Object run(Object[]):
+                    ALOAD_0
+                    GETFIELD org.aspectj.runtime.internal.AroundClosure.state [Ljava/lang/Object;
+                    ASTORE_2
+                    ALOAD_2
+                    ICONST_0
+                    AALOAD
+                    CHECKCAST [Ljava.lang.String;
+                    ALOAD_2
+                    ICONST_1
+                    AALOAD
+                    CHECKCAST org.aspectj.lang.JoinPoint
+                    INVOKESTATIC HelloWorld.main_aroundBody6 ([Ljava/lang/String;Lorg/aspectj/lang/JoinPoint;)V
+                    ACONST_NULL
+                    ARETURN
+  end public Object run(Object[])
+end public class HelloWorld$AjcClosure7
diff --git a/weaver/testdata/TjpBeforeHelloWorld.1.9.txt b/weaver/testdata/TjpBeforeHelloWorld.1.9.txt
new file mode 100644 (file)
index 0000000..900dc00
--- /dev/null
@@ -0,0 +1,131 @@
+public class HelloWorld extends java.lang.Object:
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_0 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_1 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_2 [Synthetic]
+  private static final org.aspectj.lang.JoinPoint$StaticPart ajc$tjp_3 [Synthetic]
+  public void <init>():
+                    ALOAD_0     // LHelloWorld; this   (line 5)
+                    INVOKESPECIAL java.lang.Object.<init> ()V
+                    GETSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    ALOAD_0
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE_1
+    constructor-execution(void HelloWorld.<init>())
+    |               ALOAD_1
+    |               INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
+    |               RETURN
+    constructor-execution(void HelloWorld.<init>())
+  end public void <init>()
+
+  public static void main(String[]):
+                    ALOAD_0
+                    ASTORE 6
+                    GETSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ACONST_NULL
+                    ACONST_NULL
+                    ALOAD 6
+                    INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+                    ASTORE 5
+    method-execution(void HelloWorld.main(java.lang.String[]))
+    |               ALOAD 5   (line 8)
+    |               INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
+    |               GETSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+    |               ACONST_NULL
+    |               ACONST_NULL
+    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+    |               ASTORE_1
+    | field-get(java.io.PrintStream java.lang.System.out)
+    | |             ALOAD_1
+    | |             INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
+    | |             GETSTATIC java.lang.System.out Ljava/io/PrintStream;
+    | field-get(java.io.PrintStream java.lang.System.out)
+    |               LDC "hello world"   (line 9)
+    |               ASTORE_3
+    |               ASTORE 4
+    |               GETSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+    |               ACONST_NULL
+    |               ALOAD 4
+    |               ALOAD_3
+    |               INVOKESTATIC org.aspectj.runtime.reflect.Factory.makeJP (Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
+    |               ASTORE_2
+    | method-call(void java.io.PrintStream.println(java.lang.String))
+    | |             ALOAD_2
+    | |             INVOKESTATIC Aspect.ajc_before (Lorg/aspectj/lang/JoinPoint;)V
+    | |             ALOAD 4
+    | |             ALOAD_3
+    | |             INVOKEVIRTUAL java.io.PrintStream.println (Ljava/lang/String;)V
+    | method-call(void java.io.PrintStream.println(java.lang.String))
+    |               RETURN   (line 11)
+    method-execution(void HelloWorld.main(java.lang.String[]))
+  end public static void main(String[])
+
+  static void <clinit>():
+                    INVOKESTATIC HelloWorld.ajc$preClinit ()V
+    staticinitialization(void HelloWorld.<clinit>())
+    |               RETURN
+    staticinitialization(void HelloWorld.<clinit>())
+  end static void <clinit>()
+
+  private static void ajc$preClinit():
+                    NEW org.aspectj.runtime.reflect.Factory
+                    DUP
+                    LDC "HelloWorld.java"
+                    LDC "HelloWorld"
+                    INVOKESTATIC java.lang.Class.forName (Ljava/lang/String;)Ljava/lang/Class;
+                    INVOKESPECIAL org.aspectj.runtime.reflect.Factory.<init> (Ljava/lang/String;Ljava/lang/Class;)V
+                    ASTORE_0
+                    ALOAD_0
+                    LDC "constructor-execution"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "HelloWorld"
+                    LDC ""
+                    LDC ""
+                    LDC ""
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeConstructorSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/ConstructorSignature;
+                    ICONST_5
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_0 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "field-get"
+                    ALOAD_0
+                    LDC "19"
+                    LDC "out"
+                    LDC "java.lang.System"
+                    LDC "java.io.PrintStream"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeFieldSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/FieldSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_1 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-call"
+                    ALOAD_0
+                    LDC "1"
+                    LDC "println"
+                    LDC "java.io.PrintStream"
+                    LDC "java.lang.String"
+                    LDC "x"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 9
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_2 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    ALOAD_0
+                    LDC "method-execution"
+                    ALOAD_0
+                    LDC "9"
+                    LDC "main"
+                    LDC "HelloWorld"
+                    LDC "[Ljava.lang.String;"
+                    LDC "args"
+                    LDC ""
+                    LDC "void"
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeMethodSig (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/MethodSignature;
+                    BIPUSH 8
+                    INVOKEVIRTUAL org.aspectj.runtime.reflect.Factory.makeSJP (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    PUTSTATIC HelloWorld.ajc$tjp_3 Lorg/aspectj/lang/JoinPoint$StaticPart;
+                    RETURN
+  end private static void ajc$preClinit()
+end public class HelloWorld
index e3d62faa347218c6ac4ccdf131b2b856b6bf2053..109d7ed062c8ae928b9de5d9e58d3deac985a4d7 100644 (file)
@@ -29,6 +29,7 @@ import org.aspectj.apache.bcel.generic.InvokeInstruction;
 import org.aspectj.apache.bcel.generic.Type;
 import org.aspectj.testing.util.TestUtil;
 import org.aspectj.util.FileUtil;
+import org.aspectj.util.LangUtil;
 import org.aspectj.weaver.Advice;
 import org.aspectj.weaver.BcweaverTests;
 import org.aspectj.weaver.ShadowMunger;
@@ -115,7 +116,12 @@ public abstract class WeaveTestCase extends TestCase {
                        gen = classType.getLazyClassGen(); // new LazyClassGen(classType);
                }
                try {
-                       checkClass(gen, outDirPath, outName + ".txt");
+                       File possibleVmSpecificFile = new File(TESTDATA_DIR,outName + "." + LangUtil.getVmVersionString()+".txt");
+                       if (possibleVmSpecificFile.exists()) {                          
+                               checkClass(gen, outDirPath, outName + "." + LangUtil.getVmVersionString()+".txt");
+                       } else {
+                               checkClass(gen, outDirPath, outName + ".txt");
+                       }
                        if (runTests) {
                                System.out.println("*******RUNNING: " + outName + "  " + name + " *******");
                                TestUtil.runMain(makeClassPath(outDirPath), name);