List of usage examples for org.objectweb.asm ModuleVisitor visitProvide
public void visitProvide(final String service, final String... providers)
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)); }//from w ww . j a v a 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(); }