private ConstantFieldInfo constantField(String fieldName, TypeDesc type) { return mCp.addConstantField(mClassFile.getClassName(), fieldName, type); }
public String toString() { StringBuffer buf = new StringBuffer(); String modStr = mModifiers.toString(); if (modStr.length() > 0) { buf.append(modStr); buf.append(' '); } if (getModifiers().isInterface()) { buf.append("interface"); } else { buf.append("class"); } buf.append(' '); buf.append(getClassName()); return buf.toString(); } }
public void invokePrivate(String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKESPECIAL, mCp.addConstantMethod(mClassFile.getClassName(), methodName, ret, params), ret, params); }
public void invokeConstructor(TypeDesc[] params) { invokeConstructor(mClassFile.getClassName(), mClassFile.getType(), params); }
public void invokeStatic(String className, String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKESTATIC, mCp.addConstantMethod(className, methodName, ret, params), ret, params); }
public void invokeVirtual(String className, String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKEVIRTUAL, mCp.addConstantMethod(className, methodName, ret, params), ret, params); }
private static ClassFile readInnerClass(ConstantClassInfo inner, ClassFileDataLoader loader, AttributeFactory attrFactory, Map<String, ClassFile> loadedClassFiles, ClassFile outerClass) throws IOException { String name = inner.getType().getRootName(); // Prevent cycles in inner class structure. for (ClassFile outer = outerClass; outer != null; outer = outer.getOuterClass()) { if (name.equals(outer.getClassName())) { // Cycle prevented. return null; } } // Prevent classes from being loaded multiple times. ClassFile innerClass = loadedClassFiles.get(name); if (innerClass != null) { return innerClass; } InputStream in = loader.getClassData(name); if (in == null) { return null; } if (!(in instanceof DataInput)) { in = new DataInputStream(in); } return readFrom((DataInput)in, loader, attrFactory, loadedClassFiles, outerClass); }
/** * Add an inner class to this method. * * @param innerClassName Optional short inner class name. * @param superClassName Full super class name. */ public ClassFile addInnerClass(String innerClassName, String superClassName) { ClassFile inner; if (innerClassName == null) { inner = mParent.addInnerClass(null, null, superClassName); } else { String fullInnerClassName = mParent.getClassName() + '$' + (++mAnonymousInnerClassCount) + innerClassName; inner = mParent.addInnerClass(fullInnerClassName, innerClassName, superClassName); } if (mParent.getMajorVersion() >= 49) { inner.addAttribute(new EnclosingMethodAttr (mCp, mCp.addConstantClass(mParent.getClassName()), mCp.addConstantNameAndType(mNameConstant, mDescriptorConstant))); } return inner; }
/** * @throws IllegalArgumentException if method has no code */ public CodeDisassembler(MethodInfo method) throws IllegalArgumentException { mMethod = method; mEnclosingClassName = method.getClassFile().getClassName(); mSuperClassName = method.getClassFile().getSuperClassName(); if ((mCode = method.getCodeAttr()) == null) { throw new IllegalArgumentException("Method defines no code"); } mCp = mCode.getConstantPool(); CodeBuffer buffer = mCode.getCodeBuffer(); mByteCodes = buffer.getByteCodes(); mExceptionHandlers = buffer.getExceptionHandlers(); }
loadedClassFiles.put(cf.getClassName(), cf);
private ConstantFieldInfo constantField(String fieldName, TypeDesc type) { return mCp.addConstantField(mClassFile.getClassName(), fieldName, type); }
public String toString() { StringBuffer buf = new StringBuffer(); String modStr = mModifiers.toString(); if (modStr.length() > 0) { buf.append(modStr); buf.append(' '); } if (getModifiers().isInterface()) { buf.append("interface"); } else { buf.append("class"); } buf.append(' '); buf.append(getClassName()); return buf.toString(); } }
public void invokePrivate(String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKESPECIAL, mCp.addConstantMethod(mClassFile.getClassName(), methodName, ret, params), ret, params); }
public void invokeConstructor(TypeDesc[] params) { invokeConstructor(mClassFile.getClassName(), mClassFile.getType(), params); }
public void invokeStatic(String className, String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKESTATIC, mCp.addConstantMethod(className, methodName, ret, params), ret, params); }
public void invokeVirtual(String className, String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKEVIRTUAL, mCp.addConstantMethod(className, methodName, ret, params), ret, params); }
print("class "); print(mClassFile.getClassName());
if (innerClassSuffix == null) { println("/**"); println(" * Builds ClassFile for " + cf.getClassName()); println(" *"); println(" * @author auto-generated"); } else { println("/**"); println(" * Builds ClassFile for " + cf.getClassName()); println(" */"); println("private static class InnerBuilder" + innerClassSuffix + " {"); println("public static ClassFile createClassFile() {"); mIndent += 4; println("ClassFile cf = new ClassFile(\"" + escape(cf.getClassName()) + "\", \"" + escape(cf.getSuperClassName()) + "\");"); } else { String name = innerClasses[i].getClassName(); String innerName = innerClasses[i].getInnerClassName(); if (innerName != null) { if ((cf.getClassName() + '$' + innerName).equals(name)) { name = null;
/** * Add an inner class to this method. * * @param innerClassName Optional short inner class name. * @param superClassName Full super class name. */ public ClassFile addInnerClass(String innerClassName, String superClassName) { ClassFile inner; if (innerClassName == null) { inner = mParent.addInnerClass(null, null, superClassName); } else { String fullInnerClassName = mParent.getClassName() + '$' + (++mAnonymousInnerClassCount) + innerClassName; inner = mParent.addInnerClass(fullInnerClassName, innerClassName, superClassName); } if (mParent.getMajorVersion() >= 49) { inner.addAttribute(new EnclosingMethodAttr (mCp, mCp.addConstantClass(mParent.getClassName()), mCp.addConstantNameAndType(mNameConstant, mDescriptorConstant))); } return inner; }
/** * @throws IllegalArgumentException if method has no code */ public CodeDisassembler(MethodInfo method) throws IllegalArgumentException { mMethod = method; mEnclosingClassName = method.getClassFile().getClassName(); mSuperClassName = method.getClassFile().getSuperClassName(); if ((mCode = method.getCodeAttr()) == null) { throw new IllegalArgumentException("Method defines no code"); } mCp = mCode.getConstantPool(); CodeBuffer buffer = mCode.getCodeBuffer(); mByteCodes = buffer.getByteCodes(); mExceptionHandlers = buffer.getExceptionHandlers(); }