Search in sources :

Example 1 with ClassReader

use of org.mvel2.asm.ClassReader in project drools by kiegroup.

the class MethodComparator method getMethodBytecode.

/**
 * This will return a series of bytecode instructions which can be used to compare one method with another.
 * debug info like local var declarations and line numbers are ignored, so the focus is on the content.
 */
public static List getMethodBytecode(final String methodName, final byte[] bytes) {
    final Tracer visit = new Tracer(methodName);
    final ClassReader classReader = new ClassReader(bytes);
    classReader.accept(visit, ClassReader.SKIP_DEBUG);
    return visit.getText();
}
Also used : ClassReader(org.mvel2.asm.ClassReader)

Example 2 with ClassReader

use of org.mvel2.asm.ClassReader in project drools by kiegroup.

the class MethodComparerTest method testMethodCompare.

@Test
public void testMethodCompare() throws Exception {
    final MethodComparator comp = new MethodComparator();
    boolean result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareA.class)), "evaluate", new ClassReader(getClassData(MethodCompareB.class)));
    assertEquals(true, result);
    result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareA.class)), "evaluate2", new ClassReader(getClassData(MethodCompareA.class)));
    assertEquals(false, result);
    result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareB.class)), "evaluate2", new ClassReader(getClassData(MethodCompareA.class)));
    assertEquals(false, result);
    result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareB.class)), "evaluate", new ClassReader(getClassData(MethodCompareA.class)));
    assertEquals(true, result);
    result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareA.class)), "evaluate", new ClassReader(getClassData(MethodCompareA.class)));
    assertEquals(true, result);
    result = comp.equivalent("evaluate", new ClassReader(getClassData(MethodCompareA.class)), "askew", new ClassReader(getClassData(MethodCompareA.class)));
    assertEquals(false, result);
}
Also used : ClassReader(org.mvel2.asm.ClassReader) Test(org.junit.Test)

Example 3 with ClassReader

use of org.mvel2.asm.ClassReader in project drools by kiegroup.

the class LambdaIntrospector method getFingerprintsForClass.

private static Map<String, String> getFingerprintsForClass(Object lambda, SerializedLambda extracted) {
    ClassLoader lambdaClassLoader = lambda.getClass().getClassLoader();
    String className = extracted.getCapturingClass();
    ClassIdentifier id = new ClassIdentifier(lambdaClassLoader, className);
    Map<String, String> fingerprints = methodFingerprintsMap.get(id);
    if (fingerprints == null) {
        LambdaIntrospector.LambdaClassVisitor visitor = new LambdaIntrospector.LambdaClassVisitor();
        try (InputStream classStream = lambdaClassLoader.getResourceAsStream(className.replace('.', '/') + ".class")) {
            ClassReader reader = new ClassReader(classStream);
            reader.accept(visitor, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        fingerprints = visitor.getMethodsMap();
        methodFingerprintsMap.put(id, fingerprints);
    }
    return fingerprints;
}
Also used : InputStream(java.io.InputStream) ClassReader(org.mvel2.asm.ClassReader)

Example 4 with ClassReader

use of org.mvel2.asm.ClassReader in project drools by kiegroup.

the class ClassFieldInspector method processClassWithByteCode.

/**
 * Walk up the inheritance hierarchy recursively, reading in fields
 */
private void processClassWithByteCode(final Class<?> clazz, final InputStream stream, final boolean includeFinalMethods) throws IOException {
    final ClassReader reader = new ClassReader(stream);
    final ClassFieldVisitor visitor = new ClassFieldVisitor(clazz, includeFinalMethods, this);
    reader.accept(visitor, 0);
    if (clazz.getSuperclass() != null) {
        final String name = getResourcePath(clazz.getSuperclass());
        final InputStream parentStream = clazz.getResourceAsStream(name);
        if (parentStream != null) {
            try {
                processClassWithByteCode(clazz.getSuperclass(), parentStream, includeFinalMethods);
            } finally {
                parentStream.close();
            }
        } else {
            processClassWithoutByteCode(clazz.getSuperclass(), includeFinalMethods);
        }
    }
    if (clazz.isInterface()) {
        final Class<?>[] interfaces = clazz.getInterfaces();
        for (Class<?> anInterface : interfaces) {
            final String name = getResourcePath(anInterface);
            final InputStream parentStream = clazz.getResourceAsStream(name);
            if (parentStream != null) {
                try {
                    processClassWithByteCode(anInterface, parentStream, includeFinalMethods);
                } finally {
                    parentStream.close();
                }
            } else {
                processClassWithoutByteCode(anInterface, includeFinalMethods);
            }
        }
    }
}
Also used : InputStream(java.io.InputStream) ClassReader(org.mvel2.asm.ClassReader)

Aggregations

ClassReader (org.mvel2.asm.ClassReader)4 InputStream (java.io.InputStream)2 Test (org.junit.Test)1