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.evosuite.runtime.instrumentation.CreateClassResetClassAdapter.java

License:Open Source License

/**
 * Creates an empty __STATIC_RESET method where no <clinit> was found.
 *///from w ww  .j  a v  a2 s  .com
private void createEmptyStaticReset() {
    logger.info("Creating brand-new static initializer in class " + className);
    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_SYNTHETIC,
            ClassResetter.STATIC_RESET, "()V", null, null);
    mv.visitCode();
    for (StaticField staticField : static_fields) {

        if (!finalFields.contains(staticField.name) && !staticField.name.startsWith("__cobertura")
                && !staticField.name.startsWith("$jacoco") && !staticField.name.startsWith("$VRc") // Old
        // Emma
        ) {

            logger.info("Adding bytecode for initializing field " + staticField.name);

            if (staticField.value != null) {
                mv.visitLdcInsn(staticField.value);
            } else {
                Type type = Type.getType(staticField.desc);
                switch (type.getSort()) {
                case Type.BOOLEAN:
                case Type.BYTE:
                case Type.CHAR:
                case Type.SHORT:
                case Type.INT:
                    mv.visitInsn(Opcodes.ICONST_0);
                    break;
                case Type.FLOAT:
                    mv.visitInsn(Opcodes.FCONST_0);
                    break;
                case Type.LONG:
                    mv.visitInsn(Opcodes.LCONST_0);
                    break;
                case Type.DOUBLE:
                    mv.visitInsn(Opcodes.DCONST_0);
                    break;
                case Type.ARRAY:
                case Type.OBJECT:
                    mv.visitInsn(Opcodes.ACONST_NULL);
                    break;
                }
            }
            mv.visitFieldInsn(Opcodes.PUTSTATIC, className, staticField.name, staticField.desc);

        }
    }
    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(0, 0);
    mv.visitEnd();

}

From source file:org.evosuite.runtime.instrumentation.KillSwitchClassAdapter.java

License:Open Source License

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {

    MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);

    // Don't touch bridge and synthetic methods
    if ((access & Opcodes.ACC_SYNTHETIC) > 0 || (access & Opcodes.ACC_BRIDGE) > 0) {
        return mv;
    }/*  w w w  . j  a va 2  s . com*/

    if (name.equals("<clinit>")) {
        //should not stop a static initializer
        return mv;
    }

    return new KillSwitchMethodAdapter(mv, name, desc);
}

From source file:org.evosuite.runtime.instrumentation.LoopCounterClassAdapter.java

License:Open Source License

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {

    MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);

    // Don't touch bridge and synthetic methods
    if ((access & Opcodes.ACC_SYNTHETIC) > 0 || (access & Opcodes.ACC_BRIDGE) > 0) {
        return mv;
    }/* w  w  w  .ja va 2  s  .c o m*/

    if (name.equals("<clinit>")) {
        //should not stop a static initializer
        return mv;
    }

    return new LoopCounterMethodAdapter(mv, name, desc);
}

From source file:org.evosuite.symbolic.instrument.AccessFlags.java

License:Open Source License

static boolean isSynthetic(int access) {
    return is(access, Opcodes.ACC_SYNTHETIC);
}

From source file:org.fluidity.composition.maven.AbstractAnnotationProcessorMojo.java

License:Apache License

@SuppressWarnings({ "ResultOfMethodCallIgnored", "MismatchedQueryAndUpdateOfCollection" })
private void processClasses(final Logger log, final ClassLoader loader, final File classesDirectory,
        final Map<String, Map<String, Collection<String>>> serviceProviderMap,
        final Map<String, Collection<String>> componentMap,
        final Map<String, Collection<String>> componentGroupMap)
        throws IOException, ClassNotFoundException, MojoExecutionException {
    final DirectoryScanner scanner = new DirectoryScanner();

    scanner.setBasedir(classesDirectory);
    scanner.setIncludes(new String[] { "**/*.class" });

    scanner.addDefaultExcludes();//  w  w  w .  java2  s.  c  o  m
    scanner.scan();

    final ClassRepository repository = new ClassRepository(loader);

    final Set<String> publicApis = new HashSet<>();
    final Map<String, Collection<String>> serviceProviders = new HashMap<>();

    for (final String fileName : scanner.getIncludedFiles()) {
        final String className = fileName.substring(0, fileName.length() - ClassLoaders.CLASS_SUFFIX.length())
                .replace(File.separatorChar, '.');
        final String componentPackage = className.substring(0, className.lastIndexOf(".") + 1);
        final String bindingClassName = componentPackage + GENERATED_PACKAGE_BINDINGS + projectName;

        if (className.equals(bindingClassName)) {
            new File(classesDirectory, fileName).delete();
        } else {
            final ClassReader classData = repository.reader(className);
            assert classData != null : className;

            final Map<String, Set<String>> serviceProviderApis = new HashMap<>();

            class ClassFlags {
                boolean ignored;
                boolean component;
                boolean group;
                boolean dependent;
                Type scope;
            }

            final ClassFlags flags = new ClassFlags();

            final ClassProcessor processor = new ClassProcessor() {
                public ClassVisitor visitor(final ClassReader reader) {
                    return new ClassVisitor(ASM5) {
                        private final Type serviceProviderType = Type.getType(ServiceProvider.class);
                        private final Type componentType = Type.getType(Component.class);
                        private final Type componentGroupType = Type.getType(ComponentGroup.class);

                        private final String name = ClassReaders.internalName(className);
                        private boolean original;

                        @Override
                        public void visit(final int version, final int access, final String name,
                                final String signature, final String superName, final String[] interfaces) {
                            original = this.name.equals(name);
                            super.visit(version, access, name, signature, superName, interfaces);
                        }

                        @Override
                        public FieldVisitor visitField(final int access, final String name, final String desc,
                                final String signature, final Object value) {
                            if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
                                flags.dependent = name.startsWith("this$");
                            }

                            return super.visitField(access, name, desc, signature, value);
                        }

                        @Override
                        public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
                            final Type type = Type.getType(desc);

                            if (serviceProviderType.equals(type)) {
                                return new ServiceProviderProcessor(repository, reader, processor -> {
                                    final String _type = processor.type();

                                    Set<String> list = serviceProviderApis.get(_type);
                                    if (list == null) {
                                        serviceProviderApis.put(_type, list = new HashSet<>());
                                    }

                                    list.addAll(processor.apiSet());

                                    if (_type.equals(ServiceProviders.TYPE)) {
                                        publicApis.addAll(list);
                                    }
                                });
                            } else if (componentType.equals(type)) {
                                return new ComponentProcessor(processor -> {
                                    if (original) {
                                        flags.ignored = !processor.isAutomatic();
                                        flags.scope = processor.scope();
                                    }

                                    flags.component = !ClassReaders.isAbstract(classData)
                                            && !ClassReaders.isInterface(classData);
                                });
                            } else if (componentGroupType.equals(type)) {
                                return new ComponentProcessor(processor -> flags.group = !flags.dependent);
                            } else {
                                return null;
                            }
                        }
                    };
                }

                public boolean run(final ClassReader classData) throws IOException, MojoExecutionException {
                    try {
                        classData.accept(visitor(classData),
                                ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE);

                        // components and service providers are always concrete classes that can be instantiated on their own
                        final boolean instantiable = !ClassReaders.isAbstract(classData);

                        if (instantiable) {
                            processAncestry(this, classData, repository);
                        }

                        return instantiable;
                    } catch (final Exceptions.Wrapper e) {
                        throw e.rethrow(IOException.class).rethrow(MojoExecutionException.class);
                    }
                }
            };

            if (processClass(classData, processor)) {
                final Map<String, Collection<String>> providerMap = providerMap(PackageBindings.SERVICE_TYPE,
                        serviceProviderMap);
                final String externalName = ClassReaders.externalName(classData);

                if (flags.scope != null) {
                    if (flags.ignored) {
                        log.warn("Superfluous 'automatic = false' setting for scoped component %s",
                                externalName);
                    }

                    addServiceProvider(providerMap(Component.SCOPE, serviceProviderMap),
                            flags.scope.getClassName(), externalName);
                } else if (!flags.ignored) {
                    if (flags.component) {
                        addBinding(bindingClassName, externalName, providerMap, componentMap);
                    }

                    if (flags.group) {
                        addBinding(bindingClassName, externalName, providerMap, componentGroupMap);
                    }
                }

                if (!flags.dependent) {
                    for (final Map.Entry<String, Set<String>> entry : serviceProviderApis.entrySet()) {
                        final Set<String> providerNames = entry.getValue();

                        addServiceProviders(className, providerNames,
                                providerMap(entry.getKey(), serviceProviderMap));

                        for (final String api : providerNames) {
                            addServiceProvider(serviceProviders, api, className);
                        }
                    }
                }
            }
        }
    }

    for (final String className : publicApis) {
        final Collection<String> providers = serviceProviders.get(className);

        if (providers != null) {
            for (final String provider : providers) {
                makePublic(provider, classesDirectory, repository);
            }
        } else {
            assert ClassReaders.isAbstract(repository.reader(ClassReaders.externalName(className))) : className;
        }
    }
}

From source file:org.formulacompiler.compiler.internal.build.bytecode.AbstractGenerator.java

License:Open Source License

protected final void genMethods(List _methods) {
    for (Object o : _methods) {
        MethodNode mtd = (MethodNode) o;
        if ((mtd.access & Opcodes.ACC_SYNTHETIC) == 0) {
            genMethod(mtd);//from   w w  w .j av a2  s.  c  om
        }
    }
}

From source file:org.freud.analysed.classbytecode.parser.asm.AsmElement.java

License:Apache License

@Override
public boolean isSynthetic() {
    return isAccessModifier(Opcodes.ACC_SYNTHETIC);
}

From source file:org.gradle.initialization.DefaultLegacyTypesSupport.java

License:Apache License

@Override
public byte[] generateSyntheticClass(String name) {
    ClassWriter visitor = new ClassWriter(0);
    visitor.visit(Opcodes.V1_7,/*from  ww w .j a va  2 s.  c o  m*/
            Opcodes.ACC_PUBLIC | Opcodes.ACC_SYNTHETIC | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT,
            name.replace('.', '/'), null, OBJECT_TYPE.getInternalName(), null);
    visitor.visitEnd();
    return visitor.toByteArray();
}

From source file:org.jacoco.core.analysis.AnalyzerTest.java

License:Open Source License

@Test
public void should_ignore_synthetic_classes() throws Exception {
    final ClassWriter cw = new ClassWriter(0);
    cw.visit(Opcodes.V1_5, Opcodes.ACC_SYNTHETIC, "Foo", null, "java/lang/Object", null);
    cw.visitEnd();/*from  w ww .  j  av a  2s.c o m*/
    final byte[] bytes = cw.toByteArray();

    analyzer.analyzeClass(bytes, "");

    assertTrue(classes.isEmpty());
}

From source file:org.jacoco.core.internal.analysis.ClassAnalyzer.java

License:Open Source License

@Override
public MethodProbesVisitor visitMethod(final int access, final String name, final String desc,
        final String signature, final String[] exceptions) {

    InstrSupport.assertNotInstrumented(name, coverage.getName());

    // TODO: Use filter hook
    if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
        return null;
    }//from   w  w w .  j av  a  2s  . c o  m

    return new MethodAnalyzer(stringPool.get(name), stringPool.get(desc), stringPool.get(signature), probes) {
        @Override
        public void visitEnd() {
            super.visitEnd();
            final IMethodCoverage methodCoverage = getCoverage();
            if (methodCoverage.getInstructionCounter().getTotalCount() > 0) {
                // Only consider methods that actually contain code
                coverage.addMethod(methodCoverage);
            }
        }
    };
}