/** * Constructs a new, empty SymbolTable for the given ClassWriter. * * @param classWriter a ClassWriter. */ SymbolTable(final ClassWriter classWriter) { this.classWriter = classWriter; this.sourceClassReader = null; this.entries = new Entry[256]; this.constantPoolCount = 1; this.constantPool = new ByteVector(); }
ModuleWriter(final SymbolTable symbolTable, final int name, final int access, final int version) { super(Opcodes.ASM7); this.symbolTable = symbolTable; this.moduleNameIndex = name; this.moduleFlags = access; this.moduleVersionIndex = version; this.requires = new ByteVector(); this.exports = new ByteVector(); this.opens = new ByteVector(); this.usesIndex = new ByteVector(); this.provides = new ByteVector(); this.packageIndex = new ByteVector(); }
@Override public AnnotationVisitor visitAnnotationDefault() { defaultValue = new ByteVector(); return new AnnotationWriter(symbolTable, /* useNamedValues = */ false, defaultValue, null); }
@Override public AnnotationVisitor visitAnnotationDefault() { annd = new ByteVector(); return new AnnotationWriter(cw, false, annd, null, 0); }
@Override protected ByteVector write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals) { ByteVector v = new ByteVector(); v.putShort(resolution); return v; } }
public AnnotationVisitor visitAnnotationDefault() { annd = new ByteVector(); return new AnnotationWriter(cw, false, annd, null, 0); }
@Override public void visitLineNumber(final int line, final Label start) { if (lineNumberTable == null) { lineNumberTable = new ByteVector(); } ++lineNumberTableLength; lineNumberTable.putShort(start.bytecodeOffset); lineNumberTable.putShort(line); }
@Override public final void visitSource(final String file, final String debug) { if (file != null) { sourceFileIndex = symbolTable.addConstantUtf8(file); } if (debug != null) { debugExtension = new ByteVector().encodeUtf8(debug, 0, Integer.MAX_VALUE); } }
@Override public void visitNestMember(final String nestMember) { if (nestMemberClasses == null) { nestMemberClasses = new ByteVector(); } ++numberOfNestMemberClasses; nestMemberClasses.putShort(symbolTable.addConstantClass(nestMember).index); }
@Override public void visitUse(String service) { if (uses == null) { uses = new ByteVector(); } uses.putShort(cw.newClass(service)); useCount++; size += 2; }
@Override protected ByteVector write(ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals) { ByteVector v = new ByteVector(); int index = (platform == null)? 0: cw.newUTF8(platform); v.putShort(index); return v; } }
public void visitSource(final String file, final String debug) { if (file != null) { sourceFile = newUTF8(file); } if (debug != null) { sourceDebug = new ByteVector().putUTF8(debug); } }
@Override public void visitLineNumber(final int line, final Label start) { if (lineNumber == null) { lineNumber = new ByteVector(); } ++lineNumberCount; lineNumber.putShort(start.position); lineNumber.putShort(line); }
@Override public final void visitSource(final String file, final String debug) { if (file != null) { sourceFile = newUTF8(file); } if (debug != null) { sourceDebug = new ByteVector().encodeUTF8(debug, 0, Integer.MAX_VALUE); } }
public void visitLineNumber(final int line, final Label start) { if (lineNumber == null) { lineNumber = new ByteVector(); } ++lineNumberCount; lineNumber.putShort(start.position); lineNumber.putShort(line); }
@Override public void visitParameter(final String name, final int access) { if (parameters == null) { parameters = new ByteVector(); } ++parametersCount; parameters.putShort((name == null) ? 0 : symbolTable.addConstantUtf8(name)).putShort(access); }
@Override public void visitParameter(String name, int access) { if (methodParameters == null) { methodParameters = new ByteVector(); } ++methodParametersCount; methodParameters.putShort((name == null) ? 0 : cw.newUTF8(name)) .putShort(access); }
@Override public void visitPackage(String packaze) { if (packages == null) { // protect against several calls to visitPackage cw.newUTF8("ModulePackages"); packages = new ByteVector(); attributeCount++; attributesSize += 8; } packages.putShort(cw.newPackage(packaze)); packageCount++; attributesSize += 2; }
@Override public void visitRequire(String module, int access, String version) { if (requires == null) { requires = new ByteVector(); } requires.putShort(cw.newModule(module)) .putShort(access) .putShort(version == null? 0: cw.newUTF8(version)); requireCount++; size += 6; }
@Override public void visitProvide(String service, String... providers) { if (provides == null) { provides = new ByteVector(); } provides.putShort(cw.newClass(service)); provides.putShort(providers.length); for(String provider: providers) { provides.putShort(cw.newClass(provider)); } provideCount++; size += 4 + 2 * providers.length; }