Example usage for org.objectweb.asm Opcodes ACC_SYNTHETIC

List of usage examples for org.objectweb.asm Opcodes ACC_SYNTHETIC

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes ACC_SYNTHETIC.

Prototype

int ACC_SYNTHETIC

To view the source code for org.objectweb.asm Opcodes ACC_SYNTHETIC.

Click Source Link

Usage

From source file:org.jacoco.core.internal.analysis.dua.DuaClassAnalyzer.java

License:Open Source License

public void analyze() {
    int methodId = 0;
    for (final MethodNode method : methods) {
        // Does not instrument:
        // 1. Abstract methods
        if ((method.access & Opcodes.ACC_ABSTRACT) != 0) {
            continue;
        }/*from w w w  .  ja  v  a  2s.  co m*/
        // 2. Interfaces
        if ((method.access & Opcodes.ACC_INTERFACE) != 0) {
            continue;
        }
        // 3. Synthetic methods
        if ((method.access & Opcodes.ACC_SYNTHETIC) != 0) {
            continue;
        }
        // 4. Static class initialization
        if (method.name.equals("<clinit>")) {
            continue;
        }

        visitMethod(method, methodId++);
    }
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilter.java

License:Open Source License

public void filter(final MethodNode methodNode, final IFilterContext context, final IFilterOutput output) {
    if ((methodNode.access & Opcodes.ACC_SYNTHETIC) == 0) {
        return;/*www. ja va  2 s  . c o  m*/
    }
    if (!KotlinGeneratedFilter.isKotlinClass(context)) {
        return;
    }

    if (isDefaultArgumentsMethod(methodNode)) {
        new Matcher().match(methodNode, output, false);
    } else if (isDefaultArgumentsConstructor(methodNode)) {
        new Matcher().match(methodNode, output, true);
    }
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

@Test
public void should_filter() {
    final MethodNode m = createMethod(Opcodes.ACC_SYNTHETIC, "origin$default",
            "(LTarget;IILjava/lang/Object;)V");
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);

    filter.filter(m, context, output);/*from ww  w  .j a va 2 s. c om*/

    assertIgnored(new Range(m.instructions.get(3), m.instructions.get(3)));
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

@Test
public void should_not_filter_when_not_kotlin() {
    final MethodNode m = createMethod(Opcodes.ACC_SYNTHETIC, "not_kotlin_synthetic$default",
            "(LTarget;IILjava/lang/Object;)V");

    filter.filter(m, context, output);/*from www.  j a  v a2s.  c  o m*/

    assertIgnored();
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

@Test
public void should_not_filter_when_suffix_absent() {
    final MethodNode m = createMethod(Opcodes.ACC_SYNTHETIC, "synthetic_without_suffix",
            "(LTarget;IILjava/lang/Object;)V");
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);

    filter.filter(m, context, output);//  ww  w .  j  ava 2s . com

    assertIgnored();
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

/**
 * <pre>/*from w  w w .  java  2  s  .  c  om*/
 * open class Open {
 *     open fun foo(a: Int = 42) {
 *     }
 * }
 * </pre>
 */
@Test
public void should_filter_open_functions() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_SYNTHETIC, "foo$default",
            "(LOpen;IILjava/lang/Object;)V", null, null);
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
    {
        m.visitVarInsn(Opcodes.ALOAD, 3);
        final Label label = new Label();
        m.visitJumpInsn(Opcodes.IFNULL, label);
        m.visitTypeInsn(Opcodes.NEW, "java/lang/UnsupportedOperationException");
        m.visitInsn(Opcodes.DUP);
        m.visitLdcInsn("Super calls with default arguments not supported in this target, function: foo");
        m.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/UnsupportedOperationException", "<init>",
                "(Ljava/lang/String;)V", false);
        m.visitInsn(Opcodes.ATHROW);
        m.visitLabel(label);
    }
    {
        m.visitVarInsn(Opcodes.ILOAD, 2);
        m.visitInsn(Opcodes.ICONST_1);
        m.visitInsn(Opcodes.IAND);
        final Label label = new Label();
        m.visitJumpInsn(Opcodes.IFEQ, label);
        // default argument
        m.visitLdcInsn(Integer.valueOf(42));
        m.visitVarInsn(Opcodes.ISTORE, 1);
        m.visitLabel(label);

        m.visitVarInsn(Opcodes.ALOAD, 0);
        m.visitVarInsn(Opcodes.ILOAD, 1);
        m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Open", "foo", "(I)V", false);
        m.visitInsn(Opcodes.RETURN);
    }

    filter.filter(m, context, output);

    assertIgnored(new Range(m.instructions.getFirst(), m.instructions.get(6)),
            new Range(m.instructions.get(11), m.instructions.get(11)));
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

/**
 * <pre>/*from   w  w  w.  j  a v a  2s  .  c o  m*/
 * class C(a: Int = 42)
 * </pre>
 */
@Test
public void should_filter_constructors() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_SYNTHETIC, "<init>",
            "(IILkotlin/jvm/internal/DefaultConstructorMarker;)V", null, null);
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);

    m.visitVarInsn(Opcodes.ILOAD, 2);
    m.visitInsn(Opcodes.ICONST_1);
    m.visitInsn(Opcodes.IAND);
    Label label = new Label();
    m.visitJumpInsn(Opcodes.IFEQ, label);
    // default argument
    m.visitLdcInsn(Integer.valueOf(42));
    m.visitVarInsn(Opcodes.ISTORE, 1);
    m.visitLabel(label);
    m.visitVarInsn(Opcodes.ALOAD, 0);
    m.visitVarInsn(Opcodes.ILOAD, 1);
    m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Owner", "<init>", "(I)V", false);
    m.visitInsn(Opcodes.RETURN);

    filter.filter(m, context, output);

    assertIgnored(new Range(m.instructions.get(3), m.instructions.get(3)));
}

From source file:org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilterTest.java

License:Open Source License

/**
 * <pre>/*  ww w .j  a  va 2  s.  c o m*/
 * data class C(val x: Long = 42)
 * </pre>
 */
@Test
public void should_filter_methods_with_parameters_that_consume_two_slots() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_SYNTHETIC, "<init>",
            "(JILkotlin/jvm/internal/DefaultConstructorMarker;)V", null, null);
    context.classAnnotations.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);

    m.visitVarInsn(Opcodes.ILOAD, 3);
    m.visitInsn(Opcodes.ICONST_1);
    m.visitInsn(Opcodes.IAND);
    final Label label = new Label();
    m.visitJumpInsn(Opcodes.IFEQ, label);
    // default argument
    m.visitLdcInsn(Integer.valueOf(42));
    m.visitVarInsn(Opcodes.ISTORE, 1);
    m.visitLabel(label);
    m.visitVarInsn(Opcodes.ALOAD, 0);
    m.visitVarInsn(Opcodes.ILOAD, 1);
    m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Owner", "<init>", "(J)V", false);
    m.visitInsn(Opcodes.RETURN);

    filter.filter(m, context, output);

    assertIgnored(new Range(m.instructions.get(3), m.instructions.get(3)));
}

From source file:org.jacoco.core.internal.analysis.filter.SyntheticFilter.java

License:Open Source License

public void filter(final MethodNode methodNode, final IFilterContext context, final IFilterOutput output) {
    if ((methodNode.access & Opcodes.ACC_SYNTHETIC) == 0) {
        return;/*from  w  w w .ja va 2 s.  com*/
    }

    if (methodNode.name.startsWith("lambda$")) {
        return;
    }

    if (isScalaClass(context)) {
        if (methodNode.name.startsWith("$anonfun$")) {
            return;
        }
    }

    if (KotlinGeneratedFilter.isKotlinClass(context)) {
        if (KotlinDefaultArgumentsFilter.isDefaultArgumentsMethod(methodNode)) {
            return;
        }

        if (KotlinDefaultArgumentsFilter.isDefaultArgumentsConstructor(methodNode)) {
            return;
        }

        if (KotlinCoroutineFilter.isLastArgumentContinuation(methodNode)) {
            return;
        }
    }

    output.ignore(methodNode.instructions.getFirst(), methodNode.instructions.getLast());
}

From source file:org.jacoco.core.internal.analysis.filter.SyntheticFilterTest.java

License:Open Source License

@Test
public void testSynthetic() {
    final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, Opcodes.ACC_SYNTHETIC, "name", "()V",
            null, null);//from  w  ww.ja  v a 2 s  . c  om
    m.visitInsn(Opcodes.NOP);

    filter.filter(m, context, output);

    assertMethodIgnored(m);
}