+++ /dev/null
-
\ No newline at end of file
--- /dev/null
+
\ No newline at end of file
-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
* 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;
* 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;
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>();
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();
}
}
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;
// /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;
}
}
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";
/* 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);
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 ="";
}
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;
+ }
+
}
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) {
</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>
</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>
</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>
</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>
</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>
</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>
<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$_$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>
<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>
<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="abc")" 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="abc")" vm="1.9"/>
</stdout>
</run>
</ajc-test>
<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">
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
+ "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) {
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);
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;
}
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);
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));
}
}
- 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;
}
}
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;
}
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
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;
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);