private static ClassNode create(File classFile) { ClassReader classReader; try (InputStream inputStream = new FileInputStream(classFile.getAbsolutePath())) { classReader = new ClassReader(inputStream); ClassNode classNode = new ClassNode(); classReader.accept(classNode, ClassReader.SKIP_CODE); return classNode; } catch (IOException ex) { throw new IllegalArgumentException( "Can't load ClassNode for \"" + classFile + "\"", ex ); } } }
Class<?> getResultClass() { boolean changed = false; changed |= this.modifyMethods(); changed |= this.prepareNewClassNode(); if (changed) { this.buildOverrideChain(); this.buildBridgeChain(); this.buildPolymorphicTarget(); while (this.updateInvocations()); this.resolveIllegalAccess(); } else { if (!Modifier.isAbstract(ClassEnhancer.this.clazz.getModifiers())) { return ClassEnhancer.this.clazz; } } Consumer<ClassVisitor> cvAction = (ClassVisitor cv) -> { Context.this.modifyNewClassNode(); Context.this.newClassEntry.classNode.accept(cv); }; return ASM.loadDynamicClass( this.targetClassLoader, this.newClassName, this.targetProctionDomain, cvAction); }
private ClassNode create(String className) { InputStream inputStream = this.classLoader .getResourceAsStream(className.replace('.', '/') + ".class"); if (inputStream == null) { throw new IllegalArgumentException( "Can't load ClassNode for \"" + className + "\"" ); } try { try { ClassReader classReader = new ClassReader(inputStream); ClassNode classNode = new ClassNode(); classReader.accept(classNode, ClassReader.SKIP_CODE); return classNode; } finally { inputStream.close(); } } catch (IOException | RuntimeException | Error ex) { throw new IllegalArgumentException( "Can't load ClassNode for \"" + className + "\"", ex ); } }
throw new IllegalArgumentException(canNotReadByteCode(clazz), ex); ClassNode classNode = new ClassNode(Opcodes.ASM5); cr.accept(classNode, ClassReader.SKIP_DEBUG); this.clazz = clazz;
ClassNode newClassNode = new ClassNode(); newClassNode.version = Opcodes.V1_7; newClassNode.access = Opcodes.ACC_PUBLIC;