org.objectweb.asm.ClassReader Java Examples

The following examples show how to use org.objectweb.asm.ClassReader. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source Project: JByteMod-Beta   Author: GraxCode   File: ASMUtils.java    License: GNU General Public License v2.0 6 votes vote down vote up
/**
 * Gets a ClassNode based on given bytes
 * 
 * @param bytez
 * @return
 */
public static ClassNode getNode(final byte[] bytez) {
  ClassReader cr = new ClassReader(bytez);
  ClassNode cn = new ClassNode();
  try {
    cr.accept(cn, ClassReader.EXPAND_FRAMES);
  } catch (Exception e) {
    try {
      cr.accept(cn, ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG);
    } catch (Exception e2) {
      // e2.printStackTrace();
    }
  }
  cr = null;
  return cn;
}
 
Example #2
Source Project: EasyRouter   Author: Zane96   File: RenameHandler.java    License: Apache License 2.0 6 votes vote down vote up
@Override
public void onClassFetch(QualifiedContent content, Status status, String relativePath, byte[] bytes) throws IOException {
    File outputFile = context.getRelativeFile(content);
    byte[] finalBytes = bytes;
    if (relativePath.endsWith(".class") && relativePath.contains("com/zane/easyrouter_generated")) {
        ClassReader classReader = new ClassReader(finalBytes);
        ClassWriter classWriter = new ClassWriter(0);
        RenameClassVisistor classVisistor = new RenameClassVisistor(classWriter);
        classReader.accept(classVisistor, 0);

        if (classVisistor.isFindTarget()) {
            relativePath = classVisistor.getFinalName() + ".class";
            finalBytes = classWriter.toByteArray();
        }
    }

    directoryWriter.write(outputFile, relativePath, finalBytes);
}
 
Example #3
Source Project: thorntail   Author: thorntail   File: JAXRSArchiveImpl.java    License: Apache License 2.0 6 votes vote down vote up
private static boolean isJAXRS(ArchivePath path, Asset asset) {
    if (asset == null) {
        return false;
    }

    if (asset instanceof ArchiveAsset) {
        return isJAXRS(((ArchiveAsset) asset).getArchive());
    }

    if (!path.get().endsWith(".class")) {
        return false;
    }
    try (InputStream in = asset.openStream()) {
        ClassReader reader = new ClassReader(in);
        JAXRSAnnotationSeekingClassVisitor visitor = new JAXRSAnnotationSeekingClassVisitor();
        reader.accept(visitor, 0);
        return visitor.isFound();
    } catch (IOException ignored) {
    }
    return false;
}
 
Example #4
Source Project: spring-boot-graal-feature   Author: aclement   File: TypeSystem.java    License: Apache License 2.0 6 votes vote down vote up
private void scanArchive(File f) {
	try (ZipFile zf = new ZipFile(f)) {
		Enumeration<? extends ZipEntry> entries = zf.entries();
		while (entries.hasMoreElements()) {
			ZipEntry entry = entries.nextElement();
			if (entry.getName().endsWith(".class")) {
				ClassReader reader = new ClassReader(zf.getInputStream(entry));
				ClassNode node = new ClassNode();
				reader.accept(node, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
				AnnotationInfo ai = new AnnotationInfo(this, node);
				if (ai.hasData()) {
					System.out.println("From " + entry.toString() + " got " + ai.toAnnotationString());
					annotatedTypes.put(node.name, ai);
				}
			}
			// TODO resources?
		}
	} catch (IOException ioe) {
		throw new IllegalStateException(ioe);
	}
}
 
Example #5
Source Project: obfuscator   Author: alpheratzteam   File: ObfuscatorImpl.java    License: MIT License 6 votes vote down vote up
private void loadJar(File file) {
    try (JarFile jarFile = new JarFile(file)) {
        final Enumeration<JarEntry> entries = jarFile.entries();

        while (entries.hasMoreElements()) {
            final JarEntry jarEntry = entries.nextElement();

            try (InputStream inputStream = jarFile.getInputStream(jarEntry)) {
                final byte[] bytes = IOUtils.toByteArray(inputStream);

                if (!jarEntry.getName().endsWith(".class")) {
                    this.fileMap.put(jarEntry.getName(), bytes);
                    continue;
                }

                final ClassNode classNode = new ClassNode();
                final ClassReader classReader = new ClassReader(bytes);

                classReader.accept(classNode, ClassReader.EXPAND_FRAMES);
                this.classMap.put(classNode.name, classNode);
            }
        }
    } catch (IOException ex) {
        throw new ObfuscatorException(ex);
    }
}
 
Example #6
Source Project: JRemapper   Author: Col-E   File: Input.java    License: MIT License 6 votes vote down vote up
/**
 * Try to add the class contained in the given stream to the classes map.
 * 
 * @param name
 *            Entry name.
 * @param is
 *            Stream of entry.
 * @throws IOException
 *             Thrown if stream could not be read or if ClassNode could not be
 *             derived from the streamed content.
 */
protected void addClass(String name, InputStream is) {
	try {
		byte[] value = Streams.from(is);
		ClassReader cr = new ClassReader(value);
		String className = cr.getClassName();
		// Add missing debug information if needed
		ClassWriter cw = new ClassWriter(0);
		VariableFixer fixer = new VariableFixer();
		cr.accept(fixer, 0);
		fixer.accept(cw);
		if (fixer.isDirty())
			value = cw.toByteArray();
		// Put value in map
		rawNodeMap.put(className, value);
	} catch (Exception e) {
		Logging.error("Could not parse class: " + name);
		e.printStackTrace();
	}
}
 
Example #7
Source Project: HotswapAgent   Author: HotswapProjects   File: HotSwapTool.java    License: GNU General Public License v2.0 6 votes vote down vote up
private static void loadAdaptedClass(File file,
        Map<String, String> typeMappnigs, Map<Class<?>, byte[]> result)
        throws IOException, ClassNotFoundException {

    ClassWriter writer = new ClassWriter(
            ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
    TestClassAdapter adapter = new TestClassAdapter(writer, typeMappnigs);

    InputStream in = new FileInputStream(file);
    try {
        new ClassReader(in).accept(adapter, ClassReader.EXPAND_FRAMES);
    } finally {
        try {
            in.close();
        } catch (IOException e) {
            // Ignore.
        }
    }
    byte[] bytes = writer.toByteArray();
    String className = adapter.getClassName().replace('/', '.');
    result.put(Class.forName(className), bytes); // FIXME: ClassLoader...
}
 
Example #8
Source Project: sql-layer   Author: jaytaylor   File: CheckParserUsagesDT.java    License: GNU Affero General Public License v3.0 6 votes vote down vote up
@Before
public void initializeFinder() throws Exception {
    finder = new PropertyFinder();
    for (Class<? extends QueryTreeNode> nodeClass : queryTreeNodes) {
        try {
            ClassReader reader = new ClassReader(nodeClass.getName());
            reader.accept(finder, 0);
        } catch (IOException e) {
            throw new Exception("Could not open class to scan: " + nodeClass.getName(), e);
        }
    }
    // Remove any base class methods here, before they get propagated down
    finder.getNodes().get("com/foundationdb/sql/parser/DDLStatementNode")
            .removeMethod("getRelativeName", "()Ljava/lang/String;")
            .removeMethod("getFullName", "()Ljava/lang/String;");
    finder.finalizeState();
    // Remove any concrete class methods here, base class methods have already been propagated down
    removeTemporarilyIgnoredUnused(finder);
}
 
Example #9
Source Project: xtext-xtend   Author: eclipse   File: ClassFileDebugInfoExtractor.java    License: Eclipse Public License 2.0 6 votes vote down vote up
public String getDebugInfo(File file) {
	if (file.isFile() && file.getName().endsWith(".class")) {
		try {
			ClassReader cr = new ClassReader(Files.toByteArray(file));
			ClassVisitor visitor = new ClassVisitor(file.getName());
			cr.accept(visitor, 0);
			return visitor.toString();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	} else if (file.isDirectory()) {
		List<String> children = Lists.newArrayList();
		for (File child : file.listFiles()) {
			String info = getDebugInfo(child);
			if (!Strings.isEmpty(info))
				children.add(info);
		}
		Collections.sort(children);
		StringBuffer buf = new StringBuffer();
		buf.append("// " + file.getName() + " {\n");
		buf.append("  " + Joiner.on("\n\n").join(children).replace("\n", "\n  ") + "\n");
		buf.append("}");
		return buf.toString();
	}
	return null;
}
 
Example #10
Source Project: fabric-loader   Author: FabricMC   File: JavaLanguageAdapter.java    License: Apache License 2.0 6 votes vote down vote up
public static Class<?> getClass(String className, Options options) throws ClassNotFoundException, IOException {
	String classFilename = className.replace('.', '/') + ".class";
	InputStream stream = FabricLauncherBase.getLauncher().getResourceAsStream(classFilename);
	if (stream == null) {
		throw new ClassNotFoundException("Could not find or load class " + classFilename);
	}

	ClassReader reader = new ClassReader(stream);
	for (String s : reader.getInterfaces()) {
		if (!canApplyInterface(s)) {
			switch (options.getMissingSuperclassBehavior()) {
				case RETURN_NULL:
					stream.close();
					return null;
				case CRASH:
				default:
					stream.close();
					throw new ClassNotFoundException("Could not find or load class " + s);

			}
		}
	}

	stream.close();
	return FabricLauncherBase.getClass(className);
}
 
Example #11
Source Project: bazel   Author: bazelbuild   File: ByteCodeTypePrinter.java    License: Apache License 2.0 6 votes vote down vote up
public static void printClassesWithTypes(Path inputJarFile, PrintWriter printWriter)
    throws IOException {
  Preconditions.checkState(
      Files.exists(inputJarFile), "The input jar file %s does not exist.", inputJarFile);
  try (ZipFile jarFile = new ZipFile(inputJarFile.toFile())) {
    for (ZipEntry entry : getSortedClassEntriess(jarFile)) {
      try (InputStream classStream = jarFile.getInputStream(entry)) {
        printWriter.println("\nClass: " + entry.getName());
        ClassReader classReader = new ClassReader(classStream);
        ClassVisitor visitor = new ClassWithTypeDumper(printWriter);
        classReader.accept(visitor, 0);
      }
      printWriter.println("\n");
    }
  }
}
 
Example #12
Source Project: glowroot   Author: glowroot   File: PluginDetailBuilder.java    License: Apache License 2.0 6 votes vote down vote up
@OnlyUsedByTests
private static PointcutClass buildAdviceClassLookAtSuperClass(String internalName)
        throws IOException {
    URL url =
            checkNotNull(PluginDetailBuilder.class.getResource("/" + internalName + ".class"));
    byte[] bytes = Resources.asByteSource(url).read();
    MemberClassVisitor mcv = new MemberClassVisitor();
    new ClassReader(bytes).accept(mcv, ClassReader.SKIP_CODE);
    ImmutablePointcutClass pointcutClass = mcv.buildPointcutClass(bytes, false, null);
    String superName = checkNotNull(mcv.superName);
    if (!"java/lang/Object".equals(superName)) {
        pointcutClass = ImmutablePointcutClass.builder()
                .copyFrom(pointcutClass)
                .addAllMethods(buildAdviceClassLookAtSuperClass(superName).methods())
                .build();
    }
    return pointcutClass;
}
 
Example #13
Source Project: scott   Author: dodie   File: ClassFileStructurePrinter.java    License: MIT License 6 votes vote down vote up
public static void viewByteCode(byte[] bytecode) {
	ClassReader classReader = new ClassReader(bytecode);
	ClassNode classNode = new ClassNode();
	classReader.accept(classNode, 0);
	final List<MethodNode> methodNodes = classNode.methods;
	Printer printer = new Textifier();
	TraceMethodVisitor traceMethodVisitor = new TraceMethodVisitor(printer);
	
	for (MethodNode methodNode : methodNodes) {
		InsnList insnList = methodNode.instructions;
		System.out.println(methodNode.name);
		for (int i = 0; i < insnList.size(); i++) {
			insnList.get(i).accept(traceMethodVisitor);
			StringWriter sw = new StringWriter();
			printer.print(new PrintWriter(sw));
			printer.getText().clear();
			System.out.print(sw.toString());
		}
	}
}
 
Example #14
Source Project: bazel   Author: bazelbuild   File: Bug62456849TestDataGenerator.java    License: Apache License 2.0 6 votes vote down vote up
private static byte[] convertClass(ZipFile file, ZipEntry entry) throws IOException {
  try (InputStream content = file.getInputStream(entry)) {
    ClassReader reader = new ClassReader(content);
    ClassWriter writer = new ClassWriter(0);
    ClassVisitor converter =
        new ClassVisitor(Opcodes.ASM5, writer) {
          @Override
          public MethodVisitor visitMethod(
              int access, String name, String desc, String signature, String[] exceptions) {
            if (name.startsWith("lambda$") && (access & Opcodes.ACC_SYNTHETIC) == 0) {
              access |= Opcodes.ACC_SYNTHETIC;
            }
            return super.visitMethod(access, name, desc, signature, exceptions);
          }
        };
    reader.accept(converter, 0);
    return writer.toByteArray();
  }
}
 
Example #15
Source Project: pitest   Author: hcoles   File: GregorMutater.java    License: Apache License 2.0 6 votes vote down vote up
@Override
public Mutant getMutation(final MutationIdentifier id) {

  final ClassContext context = new ClassContext();
  context.setTargetMutation(Optional.ofNullable(id));

  final Optional<byte[]> bytes = this.byteSource.getBytes(id.getClassName()
      .asJavaName());

  final ClassReader reader = new ClassReader(bytes.get());
  final ClassWriter w = new ComputeClassWriter(this.byteSource,
      this.computeCache, FrameOptions.pickFlags(bytes.get()));
  final MutatingClassVisitor mca = new MutatingClassVisitor(w, context,
      filterMethods(), FCollection.filter(this.mutators,
          isMutatorFor(id)));
  reader.accept(mca, ClassReader.EXPAND_FRAMES);

  final List<MutationDetails> details = context.getMutationDetails(context
      .getTargetMutation().get());

  return new Mutant(details.get(0), w.toByteArray());

}
 
Example #16
Source Project: bytecode-viewer   Author: Konloch   File: JarUtils.java    License: GNU General Public License v3.0 6 votes vote down vote up
/**
 * Creates a new ClassNode instances from the provided byte[]
 *
 * @param bytez the class file's byte[]
 * @return the ClassNode instance
 */
public static ClassNode getNode(final byte[] bytez) throws Exception {
    ClassReader cr = new ClassReader(bytez);
    ClassNode cn = new ClassNode();
    try {
        cr.accept(cn, ClassReader.EXPAND_FRAMES);
    } catch (Exception e) {
        try {
            cr.accept(cn, ClassReader.SKIP_FRAMES);
        } catch (Exception e2) {
            throw e2;
        }
    }
    cr = null;
    return cn;
}
 
Example #17
Source Project: pushfish-android   Author: PushFish   File: ClassDependenciesAnalyzer.java    License: BSD 2-Clause "Simplified" License 6 votes vote down vote up
private List<String> getClassDependencies(ClassRelevancyFilter filter, ClassReader reader) {
    List<String> out = new LinkedList<String>();
    char[] charBuffer = new char[reader.getMaxStringLength()];
    for (int i = 1; i < reader.getItemCount(); i++) {
        int itemOffset = reader.getItem(i);
        if (itemOffset > 0 && reader.readByte(itemOffset - 1) == 7) {
            // A CONSTANT_Class entry, read the class descriptor
            String classDescriptor = reader.readUTF8(itemOffset, charBuffer);
            Type type = Type.getObjectType(classDescriptor);
            while (type.getSort() == Type.ARRAY) {
                type = type.getElementType();
            }
            if (type.getSort() != Type.OBJECT) {
                // A primitive type
                continue;
            }
            String name = type.getClassName();
            if (filter.isRelevant(name)) {
                out.add(name);
            }
        }
    }
    return out;
}
 
Example #18
Source Project: meghanada-server   Author: mopemope   File: ASMReflector.java    License: GNU General Public License v3.0 5 votes vote down vote up
private static ClassAnalyzeVisitor readClassFromJar(
    ClassReader classReader, String nameWithoutTP, String nameWithTP) {
  ClassAnalyzeVisitor classAnalyzeVisitor =
      new ClassAnalyzeVisitor(nameWithoutTP, nameWithTP, false, false);
  classReader.accept(classAnalyzeVisitor, 0);
  return classAnalyzeVisitor;
}
 
Example #19
Source Project: byte-buddy   Author: raphw   File: AdviceFrameTest.java    License: Apache License 2.0 5 votes vote down vote up
@Test
public void testFrameAdviceStaticMethodExpanded() throws Exception {
    Class<?> type = new ByteBuddy()
            .redefine(FrameSample.class)
            .visit(Advice.to(advice).on(named(BAR)).readerFlags(ClassReader.EXPAND_FRAMES))
            .make()
            .load(ClassLoadingStrategy.BOOTSTRAP_LOADER, ClassLoadingStrategy.Default.WRAPPER)
            .getLoaded();
    assertThat(type.getDeclaredMethod(BAR, String.class).invoke(null, FOO), is((Object) FOO));
    assertThat(type.getField(COUNT).getInt(null), is((Object) count));
}
 
Example #20
Source Project: tutorials   Author: eugenp   File: CustomClassWriter.java    License: MIT License 5 votes vote down vote up
public CustomClassWriter() {

        try {
            reader = new ClassReader(CLASSNAME);
            writer = new ClassWriter(reader, 0);

        } catch (IOException ex) {
            Logger.getLogger(CustomClassWriter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
Example #21
Source Project: byte-buddy   Author: raphw   File: AbstractTypeDescriptionGenericTest.java    License: Apache License 2.0 5 votes vote down vote up
public static Field make() throws IOException, ClassNotFoundException, NoSuchFieldException {
    ClassReader classReader = new ClassReader(InconsistentGenerics.class.getName());
    ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS);
    classReader.accept(new GenericDisintegrator(classWriter), 0);
    return new ByteArrayClassLoader(ClassLoadingStrategy.BOOTSTRAP_LOADER,
            Collections.singletonMap(InconsistentGenerics.class.getName(), classWriter.toByteArray()),
            ByteArrayClassLoader.PersistenceHandler.MANIFEST)
            .loadClass(InconsistentGenerics.class.getName()).getDeclaredField(FOO);
}
 
Example #22
Source Project: Concurnas   Author: Concurnas   File: Concurnifier.java    License: MIT License 5 votes vote down vote up
private static Thruple<Boolean, byte[], HashSet<String>> addCopyConstructorAndOffHeapMethods(byte[] inputClass, ConcurnasClassLoader loader){
	//should only modify conc files, java files being called can be ingored
	ClassReader origReader = new ClassReader(inputClass);
	ConcClassWriter cw = new ConcClassWriter(ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES, loader.getDetector());//TODO: consider removing COMPUTE_MAXS | COMPUTE_FRAMES this to make load time quicker
       ClonerTransformer clonerTrans =  new ClonerTransformer(cw, loader);
       origReader.accept(clonerTrans, 0 );
       byte[] outputCode = cw.toByteArray();

       outputCode = OffHeapAugmentor.addOffHeapMethods(outputCode, loader);
       
       String clsName = clonerTrans.theCurrentclass;
       clsName = clsName.substring(1, clsName.length()-1);
       outputCode = RefFieldMapper.doMapping(outputCode, clsName, loader);
       
	/*try {
		BytecodePrettyPrinter.print(outputCode, true);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  	*/
       
       
       //TODO: add immutable annotation for use in Cloner so as to avoid unecisary cloneing
       Boolean isImmutable = !clonerTrans.immutableDependsOn.isEmpty()?null:(clonerTrans.isActor || clonerTrans.isImmutable || clonerTrans.isEnum);
       
    return new Thruple<Boolean, byte[], HashSet<String>>(isImmutable, outputCode, clonerTrans.immutableDependsOn);
}
 
Example #23
Source Project: allocation-instrumenter   Author: google   File: StaticClassWriter.java    License: Apache License 2.0 5 votes vote down vote up
/**
 * {@inheritDoc}
 * @param classLoader the class loader that loaded this class
 * @param alwaysStatic whether to always load class data statically
 */
public StaticClassWriter(
    ClassReader classReader, int flags, ClassLoader classLoader,
    boolean alwaysStatic) {
  super(classReader, flags);
  this.classLoader = classLoader;
  this.alwaysStatic = alwaysStatic;
}
 
Example #24
Source Project: java-master   Author: jufeng98   File: AsmTest.java    License: Apache License 2.0 5 votes vote down vote up
@Test
public void ModifyClassTest() throws Exception {
    // 读取的Person类的class文件
    ClassReader classReader = new ClassReader("org.javamaster.b2c.bytecode.model.Person");
    ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
    ClassAdapter classAdapter = new ClassAdapter(classWriter);
    classReader.accept(classAdapter, ClassReader.SKIP_DEBUG);

    // 插入新方法
    // Opcodes.ACC_PUBLIC:方法修饰符为public
    // sayHello:方法名为sayHello
    // ()V:没有入参,返回类型为void
    // new String[]{"javax.validation.ValidationException"}:声明抛出ValidationException异常
    MethodVisitor helloVisitor = classWriter
            .visitMethod(Opcodes.ACC_PUBLIC, "sayHello", "()V", null, new String[]{"javax.validation.ValidationException"});
    // 插入方法体内容,以下涉及到了虚拟机字节码指令
    helloVisitor.visitCode();
    // getstatic 指令:取静态字段
    helloVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
    // ldc 指令:取"hello world!"常量到操作数栈
    helloVisitor.visitLdcInsn("hello world!");
    // invokevirtual 指令: 调用实例方法println
    helloVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
    // return 指令: 从当前方法返回void
    helloVisitor.visitInsn(Opcodes.RETURN);
    helloVisitor.visitMaxs(1, 1);
    helloVisitor.visitEnd();

    byte[] bytes = classWriter.toByteArray();

    String path = ResourceUtils.getFile("classpath:").getAbsolutePath();
    File file = new File(path, "/org/javamaster/b2c/bytecode/PersonModify.class");
    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(bytes);
    fileOutputStream.close();
}
 
Example #25
Source Project: The-5zig-Mod   Author: 5zig   File: PatchMinecraft.java    License: MIT License 5 votes vote down vote up
@Override
public byte[] transform(String s, String s1, byte[] bytes) {
	LogUtil.startClass("Minecraft (%s)", Names.minecraft.getName());

	ClassReader reader = new ClassReader(bytes);
	ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS);
	ClassPatcher visitor = new ClassPatcher(writer);
	reader.accept(visitor, 0);
	LogUtil.endClass();
	return writer.toByteArray();
}
 
Example #26
Source Project: fabric-loader   Author: FabricMC   File: MixinServiceKnot.java    License: Apache License 2.0 5 votes vote down vote up
@Override
public ClassNode getClassNode(String name, boolean runTransformers) throws ClassNotFoundException, IOException {
	ClassReader reader = new ClassReader(getClassBytes(name, runTransformers));
	ClassNode node = new ClassNode();
	reader.accept(node, 0);
	return node;
}
 
Example #27
Source Project: glowroot   Author: glowroot   File: AnalyzedWorld.java    License: Apache License 2.0 5 votes vote down vote up
static List<Advice> mergeInstrumentationAnnotations(List<Advice> advisors, byte[] classBytes,
        @Nullable ClassLoader loader, String className) {
    byte[] marker = "Lorg/glowroot/agent/api/Instrumentation$".getBytes(UTF_8);
    if (Bytes.indexOf(classBytes, marker) == -1) {
        return advisors;
    }
    InstrumentationSeekerClassVisitor cv = new InstrumentationSeekerClassVisitor();
    ClassReader cr = new ClassReader(classBytes);
    cr.accept(cv, ClassReader.SKIP_CODE);
    List<InstrumentationConfig> instrumentationConfigs = cv.getInstrumentationConfigs();
    if (instrumentationConfigs.isEmpty()) {
        return advisors;
    }
    if (loader == null) {
        logger.warn("@Instrumentation annotations not currently supported in bootstrap class"
                + " loader: {}", className);
        return advisors;
    }
    for (InstrumentationConfig instrumentationConfig : instrumentationConfigs) {
        instrumentationConfig.logValidationErrorsIfAny();
    }
    ImmutableMap<Advice, LazyDefinedClass> newAdvisors =
            AdviceGenerator.createAdvisors(instrumentationConfigs, null, false, false);
    try {
        ClassLoaders.defineClasses(newAdvisors.values(), loader);
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
    }
    List<Advice> mergedAdvisors = Lists.newArrayList(advisors);
    mergedAdvisors.addAll(newAdvisors.keySet());
    return mergedAdvisors;
}
 
Example #28
Source Project: The-5zig-Mod   Author: 5zig   File: PatchGuiEditSign.java    License: MIT License 5 votes vote down vote up
@Override
public byte[] transform(String s, String s1, byte[] bytes) {
	LogUtil.startClass("GuiEditSign (%s)", Names.guiEditSign.getName());

	ClassReader reader = new ClassReader(bytes);
	ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
	ClassPatcher visitor = new ClassPatcher(writer);
	reader.accept(visitor, 0);
	LogUtil.endClass();
	return writer.toByteArray();
}
 
Example #29
Source Project: pinpoint   Author: naver   File: ASMClassWriter.java    License: Apache License 2.0 5 votes vote down vote up
private String getCommonClass(final ClassReader classReader1, final ClassReader classReader2) {
    final Set<String> classHierarchy = new HashSet<String>();
    classHierarchy.add(classReader1.getClassName());
    classHierarchy.add(classReader2.getClassName());

    String superClassInternalName1 = classReader1.getSuperName();
    if (!classHierarchy.add(superClassInternalName1)) {
        // find common super class.
        return superClassInternalName1;
    }

    String superClassInternalName2 = classReader2.getSuperName();
    if (!classHierarchy.add(superClassInternalName2)) {
        // find common super class.
        return superClassInternalName2;
    }

    while (superClassInternalName1 != null || superClassInternalName2 != null) {
        // for each.
        if (superClassInternalName1 != null) {
            superClassInternalName1 = getSuperClassInternalName(superClassInternalName1);
            if (superClassInternalName1 != null) {
                if (!classHierarchy.add(superClassInternalName1)) {
                    return superClassInternalName1;
                }
            }
        }

        if (superClassInternalName2 != null) {
            superClassInternalName2 = getSuperClassInternalName(superClassInternalName2);
            if (superClassInternalName2 != null) {
                if (!classHierarchy.add(superClassInternalName2)) {
                    return superClassInternalName2;
                }
            }
        }
    }

    return OBJECT_CLASS_INTERNAL_NAME;
}
 
Example #30
Source Project: The-5zig-Mod   Author: 5zig   File: PatchGuiOptions.java    License: MIT License 5 votes vote down vote up
@Override
public byte[] transform(String s, String s1, byte[] bytes) {
	LogUtil.startClass("GuiOptions (%s)", Names.guiOptions.getName());

	ClassReader reader = new ClassReader(bytes);
	ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_MAXS);
	ClassPatcher visitor = new ClassPatcher(writer);
	reader.accept(visitor, 0);
	LogUtil.endClass();
	return writer.toByteArray();
}