/** * By default, the ClassFile defines public, non-final, concrete classes. * <p> * Use the {@link #setModifiers} method to change the access modifiers of * this class or to turn it into an interface. * * @param className Full class name of the form ex: "java.lang.String". * @param superClassName Full super class name. */ public ClassFile(String className, String superClassName) { if (superClassName == null) { if (!className.equals(Object.class.getName())) { superClassName = Object.class.getName(); } } mCp = new ConstantPool(); // public, non-final, concrete class mModifiers = Modifiers.PUBLIC; mThisClass = mCp.addConstantClass(className); mSuperClass = mCp.addConstantClass(superClassName); mClassName = className; mSuperClassName = superClassName; }
/** * Get or create a constant from the constant pool representing a field in * any class. */ public ConstantFieldInfo addConstantField(String className, String fieldName, TypeDesc type) { ConstantInfo ci = new ConstantFieldInfo (addConstantClass(className), addConstantNameAndType(fieldName, type)); return (ConstantFieldInfo)addConstant(ci); }
private void invokeConstructor(String className, TypeDesc classDesc, TypeDesc[] params) { mInstructions.new InvokeConstructorInstruction (mCp.addConstantConstructor(className, params), classDesc, params); }
/** * @param inner The full inner class name * @param outer The full outer class name * @param name The simple name of the inner class, or null if anonymous * @param modifiers Modifiers for the inner class */ public void addInnerClass(String inner, String outer, String name, Modifiers modifiers) { ConstantClassInfo innerInfo = getConstantPool().addConstantClass(inner); ConstantClassInfo outerInfo; if (outer == null) { outerInfo = null; } else { outerInfo = getConstantPool().addConstantClass(outer); } ConstantUTFInfo nameInfo; if (name == null) { nameInfo = null; } else { nameInfo = getConstantPool().addConstantUTF(name); } mInnerClasses.add(new Info(innerInfo, outerInfo, nameInfo, modifiers)); }
/** * Get or create a constant double from the constant pool. */ public ConstantDoubleInfo addConstantDouble(double value) { return (ConstantDoubleInfo)addConstant(new ConstantDoubleInfo(value)); }
ObjectVariableInfo(ConstantPool cp, TypeDesc desc) { mClassInfo = cp.addConstantClass(desc); }
public MemberValue makeMemberValue(int value) { return new MemberValue(MEMBER_TAG_INT, mCp.addConstantInteger(value)); }
public void storeField(String className, String fieldName, TypeDesc type) { putfield(-1, Opcode.PUTFIELD, mCp.addConstantField(className, fieldName, type), type); }
/** * 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; }
resolve(constants, index); return new ConstantPool(constants);
public MemberValue makeMemberValue(long value) { return new MemberValue(MEMBER_TAG_LONG, mCp.addConstantLong(value)); }
public MemberValue makeMemberValue(float value) { return new MemberValue(MEMBER_TAG_FLOAT, mCp.addConstantFloat(value)); }
public MemberValue makeMemberValue(double value) { return new MemberValue(MEMBER_TAG_DOUBLE, mCp.addConstantDouble(value)); }
public void invokeInterface(String className, String methodName, TypeDesc ret, TypeDesc[] params) { mInstructions.new InvokeInstruction (Opcode.INVOKEINTERFACE, mCp.addConstantInterfaceMethod(className, methodName, ret, params), ret, params); }
/** * Get or create a constant from the constant pool representing an array * class. * * @param dim Number of array dimensions. */ public ConstantClassInfo addConstantClass(String className, int dim) { return (ConstantClassInfo)addConstant(new ConstantClassInfo(this, className, dim)); }
/** * Add an interface that this class implements. * * @param interfaceName Full interface name. */ public void addInterface(String interfaceName) { if (!mInterfaceSet.contains(interfaceName)) { mInterfaces.add(mCp.addConstantClass(interfaceName)); mInterfaceSet.add(interfaceName); } }
public MemberValue makeMemberValue(byte value) { return new MemberValue(MEMBER_TAG_BYTE, mCp.addConstantInteger(value)); }
public void storeStaticField(String className, String fieldName, TypeDesc type) { putfield(0, Opcode.PUTSTATIC, mCp.addConstantField(className, fieldName, type), type); }
/** * 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; }
/** * @param inner The full inner class name * @param outer The full outer class name * @param name The simple name of the inner class, or null if anonymous * @param modifiers Modifiers for the inner class */ public void addInnerClass(String inner, String outer, String name, Modifiers modifiers) { ConstantClassInfo innerInfo = getConstantPool().addConstantClass(inner); ConstantClassInfo outerInfo; if (outer == null) { outerInfo = null; } else { outerInfo = getConstantPool().addConstantClass(outer); } ConstantUTFInfo nameInfo; if (name == null) { nameInfo = null; } else { nameInfo = getConstantPool().addConstantUTF(name); } mInnerClasses.add(new Info(innerInfo, outerInfo, nameInfo, modifiers)); }