< prev index next >
src/java.base/share/classes/jdk/internal/org/objectweb/asm/util/Textifier.java
Print this page
rev 47452 : imported patch jdk-new-asmv6.patch
@@ -180,11 +180,11 @@
*
* @throws IllegalStateException
* If a subclass calls this constructor.
*/
public Textifier() {
- this(Opcodes.ASM5);
+ this(Opcodes.ASM6);
if (getClass() != Textifier.class) {
throw new IllegalStateException();
}
}
@@ -191,11 +191,11 @@
/**
* Constructs a new {@link Textifier}.
*
* @param api
* the ASM API version implemented by this visitor. Must be one
- * of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}.
+ * of {@link Opcodes#ASM4}, {@link Opcodes#ASM5} or {@link Opcodes#ASM6}.
*/
protected Textifier(final int api) {
super(api);
}
@@ -248,10 +248,14 @@
@Override
public void visit(final int version, final int access, final String name,
final String signature, final String superName,
final String[] interfaces) {
+ if ((access & Opcodes.ACC_MODULE) != 0) {
+ // visitModule will print the module
+ return;
+ }
this.access = access;
int major = version & 0xFFFF;
int minor = version >>> 16;
buf.setLength(0);
buf.append("// class version ").append(major).append('.').append(minor)
@@ -269,11 +273,11 @@
r.accept(sv);
buf.append("// declaration: ").append(name)
.append(sv.getDeclaration()).append('\n');
}
- appendAccess(access & ~Opcodes.ACC_SUPER);
+ appendAccess(access & ~(Opcodes.ACC_SUPER | Opcodes.ACC_MODULE));
if ((access & Opcodes.ACC_ANNOTATION) != 0) {
buf.append("@interface ");
} else if ((access & Opcodes.ACC_INTERFACE) != 0) {
buf.append("interface ");
} else if ((access & Opcodes.ACC_ENUM) == 0) {
@@ -313,10 +317,28 @@
text.add(buf.toString());
}
}
@Override
+ public Printer visitModule(final String name, final int access,
+ final String version) {
+ buf.setLength(0);
+ if ((access & Opcodes.ACC_OPEN) != 0) {
+ buf.append("open ");
+ }
+ buf.append("module ")
+ .append(name)
+ .append(" { ")
+ .append(version == null ? "" : "// " + version)
+ .append("\n\n");
+ text.add(buf.toString());
+ Textifier t = createTextifier();
+ text.add(t.getText());
+ return t;
+ }
+
+ @Override
public void visitOuterClass(final String owner, final String name,
final String desc) {
buf.setLength(0);
buf.append(tab).append("OUTERCLASS ");
appendDescriptor(INTERNAL_NAME, owner);
@@ -441,11 +463,11 @@
}
buf.append('\n');
}
buf.append(tab);
- appendAccess(access & ~Opcodes.ACC_VOLATILE);
+ appendAccess(access & ~(Opcodes.ACC_VOLATILE | Opcodes.ACC_TRANSIENT));
if ((access & Opcodes.ACC_NATIVE) != 0) {
buf.append("native ");
}
if ((access & Opcodes.ACC_VARARGS) != 0) {
buf.append("varargs ");
@@ -481,10 +503,122 @@
public void visitClassEnd() {
text.add("}\n");
}
// ------------------------------------------------------------------------
+ // Module
+ // ------------------------------------------------------------------------
+
+ @Override
+ public void visitMainClass(String mainClass) {
+ buf.setLength(0);
+ buf.append(" // main class ").append(mainClass).append('\n');
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitPackage(String packaze) {
+ buf.setLength(0);
+ buf.append(" // package ").append(packaze).append('\n');
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitRequire(String require, int access, String version) {
+ buf.setLength(0);
+ buf.append(tab).append("requires ");
+ if ((access & Opcodes.ACC_TRANSITIVE) != 0) {
+ buf.append("transitive ");
+ }
+ if ((access & Opcodes.ACC_STATIC_PHASE) != 0) {
+ buf.append("static ");
+ }
+ buf.append(require)
+ .append("; // access flags 0x")
+ .append(Integer.toHexString(access).toUpperCase())
+ .append('\n');
+ if (version != null) {
+ buf.append(" // version ")
+ .append(version)
+ .append('\n');
+ }
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitExport(String export, int access, String... modules) {
+ buf.setLength(0);
+ buf.append(tab).append("exports ");
+ buf.append(export);
+ if (modules != null && modules.length > 0) {
+ buf.append(" to");
+ } else {
+ buf.append(';');
+ }
+ buf.append(" // access flags 0x")
+ .append(Integer.toHexString(access).toUpperCase())
+ .append('\n');
+ if (modules != null && modules.length > 0) {
+ for (int i = 0; i < modules.length; ++i) {
+ buf.append(tab2).append(modules[i]);
+ buf.append(i != modules.length - 1 ? ",\n": ";\n");
+ }
+ }
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitOpen(String export, int access, String... modules) {
+ buf.setLength(0);
+ buf.append(tab).append("opens ");
+ buf.append(export);
+ if (modules != null && modules.length > 0) {
+ buf.append(" to");
+ } else {
+ buf.append(';');
+ }
+ buf.append(" // access flags 0x")
+ .append(Integer.toHexString(access).toUpperCase())
+ .append('\n');
+ if (modules != null && modules.length > 0) {
+ for (int i = 0; i < modules.length; ++i) {
+ buf.append(tab2).append(modules[i]);
+ buf.append(i != modules.length - 1 ? ",\n": ";\n");
+ }
+ }
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitUse(String use) {
+ buf.setLength(0);
+ buf.append(tab).append("uses ");
+ appendDescriptor(INTERNAL_NAME, use);
+ buf.append(";\n");
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitProvide(String provide, String... providers) {
+ buf.setLength(0);
+ buf.append(tab).append("provides ");
+ appendDescriptor(INTERNAL_NAME, provide);
+ buf.append(" with\n");
+ for (int i = 0; i < providers.length; ++i) {
+ buf.append(tab2);
+ appendDescriptor(INTERNAL_NAME, providers[i]);
+ buf.append(i != providers.length - 1 ? ",\n": ";\n");
+ }
+ text.add(buf.toString());
+ }
+
+ @Override
+ public void visitModuleEnd() {
+ // empty
+ }
+
+ // ------------------------------------------------------------------------
// Annotations
// ------------------------------------------------------------------------
@Override
public void visit(final String name, final Object value) {
@@ -1294,18 +1428,21 @@
buf.append('\n');
buf.append(tab3);
appendDescriptor(INTERNAL_NAME, h.getOwner());
buf.append('.');
buf.append(h.getName());
- if(!isMethodHandle){
+ if (!isMethodHandle) {
buf.append('(');
}
appendDescriptor(HANDLE_DESCRIPTOR, h.getDesc());
- if(!isMethodHandle){
+ if (!isMethodHandle) {
buf.append(')');
}
+ if (h.isInterface()) {
+ buf.append(" itf");
}
+ }
/**
* Appends a string representation of the given access modifiers to
* {@link #buf buf}.
*
< prev index next >