LoadingClassLoader(ClassLoader parent, Iterable<JavaClassFileObject> files) { super(parent); // HashMap<String, byte[]> definitions = new HashMap<String,byte[]>(); for (JavaClassFileObject definition : files) { definitions.put(definition.getClassName(), definition.getBytes()); } // this.definitions = definitions; this.classes = new HashMap<String, Class<?>>(); }
@Override public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException { if (location != StandardLocation.CLASS_OUTPUT) { throw new IOException("Location " + location + " not supported"); } if (kind != JavaFileObject.Kind.CLASS) { throw new IOException("Kind " + kind + " not supported"); } // JavaClassFileObject clazz = classes.get(className); if (clazz == null) { try { classes.put(className, clazz = new JavaClassFileObject(className)); } catch (URISyntaxException e) { throw new IOException(e); } } return clazz; } }
private void doTestImport(ClassLoaderFactory factory) throws Exception { Compiler compiler = new Compiler(); List<JavaClassFileObject> files = compiler.compile("foo.A", "package foo;\n public class A {}"); assertEquals(1, files.size()); JavaClassFileObject aFile = files.get(0); JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "crash.jar"); jar.add(new ByteArrayAsset(aFile.getBytes()), "foo/A.class"); jar.setManifest(Thread.currentThread().getContextClassLoader().getResource("META-INF/MANIFEST.MF")); ClassLoader cl = factory.getClassLoader(jar); // compiler = new Compiler(cl); files = compiler.compile("B", "import foo.A;\n" + "public class B implements java.util.concurrent.Callable<A> {\n" + "public A call() {\n" + "return new A();\n" + "}\n" + "}"); assertEquals(1, files.size()); LoadingClassLoader loader = new LoadingClassLoader(cl, files); Class<?> B = loader.findClass("B"); Callable<?> asCallable = (Callable<?>)B.newInstance(); Object ret = asCallable.call(); assertNotNull(ret); Class<?> A = ret.getClass(); assertEquals("foo.A", A.getName()); assertEquals(cl, A.getClassLoader()); }
String className = classFile.getClassName(); String simpleName = className.substring(className.lastIndexOf('.') + 1); if (simpleName.equals(name)) { LoadingClassLoader loader = new LoadingClassLoader(this.loader, classFiles); try { Class<?> clazz = loader.loadClass(classFile.getClassName()); final ClassShellCommand command; try {
String className = classFile.getClassName(); String simpleName = className.substring(className.lastIndexOf('.') + 1); if (simpleName.equals(name)) { LoadingClassLoader loader = new LoadingClassLoader(this.loader, classFiles); try { Class<?> clazz = loader.loadClass(classFile.getClassName()); final ClassShellCommand command; try {
LoadingClassLoader(ClassLoader parent, Iterable<JavaClassFileObject> files) { super(parent); // HashMap<String, byte[]> definitions = new HashMap<String,byte[]>(); for (JavaClassFileObject definition : files) { definitions.put(definition.getClassName(), definition.getBytes()); } // this.definitions = definitions; this.classes = new HashMap<String, Class<?>>(); }
@Override public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException { if (location != StandardLocation.CLASS_OUTPUT) { throw new IOException("Location " + location + " not supported"); } if (kind != JavaFileObject.Kind.CLASS) { throw new IOException("Kind " + kind + " not supported"); } // JavaClassFileObject clazz = classes.get(className); if (clazz == null) { try { classes.put(className, clazz = new JavaClassFileObject(className)); } catch (URISyntaxException e) { throw new IOException(e); } } return clazz; } }
String className = classFile.getClassName(); String simpleName = className.substring(className.lastIndexOf('.') + 1); if (simpleName.equals(name)) { LoadingClassLoader loader = new LoadingClassLoader(this.loader, classFiles); try { Class<?> clazz = loader.loadClass(classFile.getClassName()); final ClassShellCommand command; try {
LoadingClassLoader(ClassLoader parent, Iterable<JavaClassFileObject> files) { super(parent); // HashMap<String, byte[]> definitions = new HashMap<String,byte[]>(); for (JavaClassFileObject definition : files) { definitions.put(definition.getClassName(), definition.getBytes()); } // this.definitions = definitions; this.classes = new HashMap<String, Class<?>>(); }
@Override public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException { if (location != StandardLocation.CLASS_OUTPUT) { throw new IOException("Location " + location + " not supported"); } if (kind != JavaFileObject.Kind.CLASS) { throw new IOException("Kind " + kind + " not supported"); } // JavaClassFileObject clazz = classes.get(className); if (clazz == null) { try { classes.put(className, clazz = new JavaClassFileObject(className)); } catch (URISyntaxException e) { throw new IOException(e); } } return clazz; } }