Example usage for org.objectweb.asm ModuleVisitor visitUse

List of usage examples for org.objectweb.asm ModuleVisitor visitUse

Introduction

In this page you can find the example usage for org.objectweb.asm ModuleVisitor visitUse.

Prototype

public void visitUse(final String service) 

Source Link

Document

Visit a service used by the current module.

Usage

From source file:org.moditect.internal.compiler.ModuleInfoCompiler.java

License:Apache License

public static byte[] compileModuleInfo(ModuleDeclaration module, String mainClass, String version) {
    ClassWriter classWriter = new ClassWriter(0);
    classWriter.visit(V9, ACC_MODULE, "module-info", null, null, null);

    int moduleAccess = module.isOpen() ? ACC_SYNTHETIC | ACC_OPEN : ACC_SYNTHETIC;
    ModuleVisitor mv = classWriter.visitModule(module.getNameAsString(), moduleAccess, version);

    if (mainClass != null) {
        mv.visitMainClass(getNameForBinary(mainClass));
    }/* w  ww.j  a va 2  s. c o m*/

    for (ModuleRequiresStmt requires : module.getNodesByType(ModuleRequiresStmt.class)) {
        mv.visitRequire(requires.getName().asString(), requiresModifiersAsInt(requires.getModifiers()), null);
    }

    for (ModuleExportsStmt export : module.getNodesByType(ModuleExportsStmt.class)) {
        mv.visitExport(getNameForBinary(export.getNameAsString()), 0,
                export.getModuleNames().stream().map(Name::toString).toArray(String[]::new));
    }

    for (ModuleProvidesStmt provides : module.getNodesByType(ModuleProvidesStmt.class)) {
        mv.visitProvide(getNameForBinary(provides.getType()), provides.getWithTypes().stream()
                .map(ModuleInfoCompiler::getNameForBinary).toArray(String[]::new));
    }

    for (ModuleUsesStmt uses : module.getNodesByType(ModuleUsesStmt.class)) {
        mv.visitUse(getNameForBinary(uses.getType()));
    }

    for (ModuleOpensStmt opens : module.getNodesByType(ModuleOpensStmt.class)) {
        mv.visitOpen(getNameForBinary(opens.getNameAsString()), 0,
                opens.getModuleNames().stream().map(Name::toString).toArray(String[]::new));
    }

    mv.visitRequire("java.base", ACC_MANDATED, null);
    mv.visitEnd();

    classWriter.visitEnd();

    return classWriter.toByteArray();
}