diff options
author | Andy Clement <aclement@pivotal.io> | 2017-09-22 15:17:54 -0700 |
---|---|---|
committer | Andy Clement <aclement@pivotal.io> | 2017-09-22 15:17:54 -0700 |
commit | faac3d84e254d747076dc258f9a059839946a274 (patch) | |
tree | 80b1490eb76c266169efed6a6e1ef70e4cacf328 | |
parent | e136805cb6db5243307cb6579cd2cfe84f87c2e6 (diff) | |
download | aspectj-faac3d84e254d747076dc258f9a059839946a274.tar.gz aspectj-faac3d84e254d747076dc258f9a059839946a274.zip |
various changes to make more tests pass on Java9
21 files changed, 1360 insertions, 152 deletions
diff --git a/bcel-builder/.isJava5 b/bcel-builder/.isJava7 index 136d06384..136d06384 100644 --- a/bcel-builder/.isJava5 +++ b/bcel-builder/.isJava7 diff --git a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java index 6204a3384..1f624a003 100644 --- a/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java +++ b/bcel-builder/src/org/aspectj/apache/bcel/util/ClassPath.java @@ -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; } } diff --git a/lib/bcel/bcel-src.zip b/lib/bcel/bcel-src.zip Binary files differindex 67795b8c8..b3dbc2ea7 100644 --- a/lib/bcel/bcel-src.zip +++ b/lib/bcel/bcel-src.zip diff --git a/lib/bcel/bcel-verifier.jar b/lib/bcel/bcel-verifier.jar Binary files differindex b452664a7..c44a3365f 100644 --- a/lib/bcel/bcel-verifier.jar +++ b/lib/bcel/bcel-verifier.jar diff --git a/lib/bcel/bcel.jar b/lib/bcel/bcel.jar Binary files differindex 790fe32b6..e70b11566 100644 --- a/lib/bcel/bcel.jar +++ b/lib/bcel/bcel.jar diff --git a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java index 1919d6727..ef744fb14 100644 --- a/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java +++ b/org.aspectj.ajdt.core/testsrc/org/aspectj/tools/ajc/AjcTestCase.java @@ -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 =""; } diff --git a/testing/newsrc/org/aspectj/testing/OutputLine.java b/testing/newsrc/org/aspectj/testing/OutputLine.java index d7350428a..fc6fe4ce9 100644 --- a/testing/newsrc/org/aspectj/testing/OutputLine.java +++ b/testing/newsrc/org/aspectj/testing/OutputLine.java @@ -12,25 +12,31 @@ 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; + } + } diff --git a/testing/newsrc/org/aspectj/testing/OutputSpec.java b/testing/newsrc/org/aspectj/testing/OutputSpec.java index ffb3362f3..4f978f6b6 100644 --- a/testing/newsrc/org/aspectj/testing/OutputSpec.java +++ b/testing/newsrc/org/aspectj/testing/OutputSpec.java @@ -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) { diff --git a/tests/src/org/aspectj/systemtest/ajc154/ajc154.xml b/tests/src/org/aspectj/systemtest/ajc154/ajc154.xml index 6e897fdbd..a3297e68c 100644 --- a/tests/src/org/aspectj/systemtest/ajc154/ajc154.xml +++ b/tests/src/org/aspectj/systemtest/ajc154/ajc154.xml @@ -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="oranges")" 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="oranges")" 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="oranges")" 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="oranges")" 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="oranges")" 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="oranges")" vm="1.9"/> </stdout> </run> </ajc-test> diff --git a/tests/src/org/aspectj/systemtest/ajc169/intertype.xml b/tests/src/org/aspectj/systemtest/ajc169/intertype.xml index 063bee514..f9c788b0c 100644 --- a/tests/src/org/aspectj/systemtest/ajc169/intertype.xml +++ b/tests/src/org/aspectj/systemtest/ajc169/intertype.xml @@ -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> @@ -100,7 +103,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> @@ -110,7 +114,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> @@ -120,7 +125,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> @@ -130,7 +136,8 @@ <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> diff --git a/tests/src/org/aspectj/systemtest/ajc170/ajc170.xml b/tests/src/org/aspectj/systemtest/ajc170/ajc170.xml index 37963fc15..241ad3867 100644 --- a/tests/src/org/aspectj/systemtest/ajc170/ajc170.xml +++ b/tests/src/org/aspectj/systemtest/ajc170/ajc170.xml @@ -182,12 +182,15 @@ <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="set from xml", sss="xyz")" 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> @@ -198,9 +201,11 @@ <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"/> @@ -216,7 +221,8 @@ <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="abc")" vm="1.9"/> </stdout> </run> </ajc-test> @@ -227,7 +233,8 @@ <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="abc")" vm="1.9"/> </stdout> </run> </ajc-test> diff --git a/tests/src/org/aspectj/systemtest/ajc190/sanity-tests-19.xml b/tests/src/org/aspectj/systemtest/ajc190/sanity-tests-19.xml index 6662dbb7a..4965b448a 100644 --- a/tests/src/org/aspectj/systemtest/ajc190/sanity-tests-19.xml +++ b/tests/src/org/aspectj/systemtest/ajc190/sanity-tests-19.xml @@ -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"> diff --git a/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java b/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java index 86302bfba..a07bd87aa 100644 --- a/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java +++ b/tests/src/org/aspectj/systemtest/incremental/tools/MultiProjTestCompilerConfiguration.java @@ -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) { diff --git a/util/src/org/aspectj/util/LangUtil.java b/util/src/org/aspectj/util/LangUtil.java index 0f19124a9..08c2da43a 100644 --- a/util/src/org/aspectj/util/LangUtil.java +++ b/util/src/org/aspectj/util/LangUtil.java @@ -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); diff --git a/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java b/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java index d041327aa..92f6cbe6d 100644 --- a/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java +++ b/weaver/src/org/aspectj/weaver/bcel/ClassPathManager.java @@ -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; } } diff --git a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java index 48ef6ae8a..d0e24f8b2 100644 --- a/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java +++ b/weaver/src/org/aspectj/weaver/tools/WeavingAdaptor.java @@ -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 index 000000000..58863d8b4 --- /dev/null +++ b/weaver/testdata/StaticTjpBeforeHelloWorld.1.9.txt @@ -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 index 000000000..4e334a65c --- /dev/null +++ b/weaver/testdata/TjpAround2HelloWorld.1.9.txt @@ -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 index 000000000..1e814c70d --- /dev/null +++ b/weaver/testdata/TjpAroundHelloWorld.1.9.txt @@ -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 index 000000000..900dc009f --- /dev/null +++ b/weaver/testdata/TjpBeforeHelloWorld.1.9.txt @@ -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 diff --git a/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java b/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java index e3d62faa3..109d7ed06 100644 --- a/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java +++ b/weaver/testsrc/org/aspectj/weaver/bcel/WeaveTestCase.java @@ -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); |