Package javassist.compiler
Class MemberCodeGen
- java.lang.Object
-
- javassist.compiler.ast.Visitor
-
- javassist.compiler.CodeGen
-
- javassist.compiler.MemberCodeGen
-
- Direct Known Subclasses:
JvstCodeGen
public class MemberCodeGen extends CodeGen
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
MemberCodeGen.JsrHook
(package private) static class
MemberCodeGen.JsrHook2
-
Nested classes/interfaces inherited from class javassist.compiler.CodeGen
CodeGen.ReturnHook
-
-
Field Summary
Fields Modifier and Type Field Description protected MemberResolver
resolver
protected boolean
resultStatic
protected CtClass
thisClass
protected MethodInfo
thisMethod
-
Fields inherited from class javassist.compiler.CodeGen
arrayDim, binOp, breakList, bytecode, className, continueList, exprType, hasReturned, inStaticMethod, javaLangObject, javaLangString, jvmJavaLangObject, jvmJavaLangString, returnHooks, typeChecker
-
Fields inherited from interface javassist.bytecode.Opcode
AALOAD, AASTORE, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETSTATIC, GOTO, GOTO_W, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMUL, INEG, INSTANCEOF, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, IUSHR, IXOR, JSR, JSR_W, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_W, LDC2_W, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, STACK_GROW, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, WIDE
-
Fields inherited from interface javassist.compiler.TokenId
ABSTRACT, AND_E, ANDAND, ARRAY, ARSHIFT, ARSHIFT_E, assignOps, BadToken, BLOCK, BOOLEAN, BREAK, BYTE, CALL, CASE, CATCH, CHAR, CharConstant, CLASS, CONST, CONTINUE, DECL, DEFAULT, DIV_E, DO, DOUBLE, DoubleConstant, ELSE, EQ, EXOR_E, EXPR, EXTENDS, FALSE, FINAL, FINALLY, FLOAT, FloatConstant, FOR, GE, GOTO, Identifier, IF, IMPLEMENTS, IMPORT, INSTANCEOF, INT, IntConstant, INTERFACE, LABEL, LE, LONG, LongConstant, LSHIFT, LSHIFT_E, MEMBER, MINUS_E, MINUSMINUS, MOD_E, MUL_E, NATIVE, NEQ, NEW, NULL, opNames, OR_E, OROR, PACKAGE, PLUS_E, PLUSPLUS, PRIVATE, PROTECTED, PUBLIC, RETURN, RSHIFT, RSHIFT_E, SHORT, STATIC, STRICT, StringL, SUPER, SWITCH, SYNCHRONIZED, THIS, THROW, THROWS, TRANSIENT, TRUE, TRY, VOID, VOLATILE, WHILE
-
-
Constructor Summary
Constructors Constructor Description MemberCodeGen(Bytecode b, CtClass cc, ClassPool cp)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private int
addFieldrefInfo(CtField f, FieldInfo finfo)
private void
addFinally(java.util.List<int[]> returnList, Stmnt finallyBlock)
Adds a finally clause for earch return statement.void
atArrayInit(ArrayInit init)
private void
atArrayLength(ASTree expr)
protected void
atArrayVariableAssign(ArrayInit init, int varType, int varArray, java.lang.String varClass)
void
atCallExpr(CallExpr expr)
protected void
atClassObject2(java.lang.String cname)
protected void
atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup)
private void
atFieldAssignCore(CtField f, boolean is_static, int fi, boolean is2byte)
protected void
atFieldPlusPlus(int token, boolean isPost, ASTree oprand, Expr expr, boolean doDup)
protected void
atFieldRead(ASTree expr)
private int
atFieldRead(CtField f, boolean isStatic)
Generates bytecode for reading a field value.void
atMember(Member mem)
void
atMethodArgs(ASTList args, int[] types, int[] dims, java.lang.String[] cnames)
void
atMethodCallCore(CtClass targetClass, java.lang.String mname, ASTList args, boolean isStatic, boolean isSpecial, int aload0pos, MemberResolver.Method found)
private void
atMethodCallCore2(CtClass targetClass, java.lang.String mname, boolean isStatic, boolean isSpecial, int aload0pos, MemberResolver.Method found)
protected void
atMultiNewArray(int type, ASTList classname, ASTList size)
void
atNewArrayExpr(NewExpr expr)
private void
atNewArrayExpr2(int type, ASTree sizeExpr, java.lang.String jvmClassname, ArrayInit init)
void
atNewExpr(NewExpr expr)
protected void
atTryStmnt(Stmnt st)
private static void
badLvalue()
private static void
badMethod()
private static void
badNewExpr()
protected CtField
fieldAccess(ASTree expr, boolean acceptLength)
protected java.lang.String
getAccessibleConstructor(java.lang.String desc, CtClass declClass, MethodInfo minfo)
protected java.lang.String
getAccessiblePrivate(java.lang.String methodName, java.lang.String desc, java.lang.String newDesc, MethodInfo minfo, CtClass declClass)
int
getMajorVersion()
Returns the major version of the class file targeted by this compilation.int
getMethodArgsLength(ASTList args)
protected java.lang.String
getSuperName()
Returns the JVM-internal representation of this super class name.CtClass
getThisClass()
protected java.lang.String
getThisName()
Returns the JVM-internal representation of this class name.protected void
insertDefaultSuperCall()
private AccessorMaker
isAccessibleField(CtField f, FieldInfo finfo)
Returns null if the field is accessible.private boolean
isEnclosing(CtClass outer, CtClass inner)
private boolean
isFromSameDeclaringClass(CtClass outer, CtClass inner)
CtClass[]
makeParamList(MethodDecl md)
CtClass[]
makeThrowsList(MethodDecl md)
protected java.lang.String
resolveClassName(java.lang.String jvmName)
protected java.lang.String
resolveClassName(ASTList name)
private boolean
setFieldType(FieldInfo finfo)
Sets exprType, arrayDim, and className.(package private) void
setReturnType(java.lang.String desc, boolean isStatic, boolean popTarget)
void
setThisMethod(CtMethod m)
Records the currently compiled method.-
Methods inherited from class javassist.compiler.CodeGen
arrayAccess, atArrayPlusPlus, atArrayRead, atAssignCore, atAssignExpr, atAssignExpr, atASTList, atBinExpr, atCastExpr, atClassObject, atCondExpr, atDeclarator, atDoubleConst, atExpr, atFieldDecl, atInstanceOfExpr, atIntConst, atKeyword, atMethodBody, atMethodDecl, atNumCastExpr, atPair, atPlusPlusCore, atReturnStmnt, atReturnStmnt2, atStmnt, atStringL, atSymbol, atVariable, badAssign, badType, badTypes, compileBooleanExpr, compileExpr, doTypeCheck, fatal, getArrayReadOp, getArrayWriteOp, getCompOperator, getLocalVar, getMaxLocals, getTempVar, incMaxLocals, is2word, isP_INT, isRefType, lookupBinOp, patchGoto, rightIsStrong, setMaxLocals, setTypeChecker, toJvmArrayName, toJvmTypeName
-
-
-
-
Field Detail
-
resolver
protected MemberResolver resolver
-
thisClass
protected CtClass thisClass
-
thisMethod
protected MethodInfo thisMethod
-
resultStatic
protected boolean resultStatic
-
-
Method Detail
-
getMajorVersion
public int getMajorVersion()
Returns the major version of the class file targeted by this compilation.
-
setThisMethod
public void setThisMethod(CtMethod m)
Records the currently compiled method.
-
getThisClass
public CtClass getThisClass()
-
getThisName
protected java.lang.String getThisName()
Returns the JVM-internal representation of this class name.- Specified by:
getThisName
in classCodeGen
-
getSuperName
protected java.lang.String getSuperName() throws CompileError
Returns the JVM-internal representation of this super class name.- Specified by:
getSuperName
in classCodeGen
- Throws:
CompileError
-
insertDefaultSuperCall
protected void insertDefaultSuperCall() throws CompileError
- Specified by:
insertDefaultSuperCall
in classCodeGen
- Throws:
CompileError
-
atTryStmnt
protected void atTryStmnt(Stmnt st) throws CompileError
- Overrides:
atTryStmnt
in classCodeGen
- Throws:
CompileError
-
addFinally
private void addFinally(java.util.List<int[]> returnList, Stmnt finallyBlock) throws CompileError
Adds a finally clause for earch return statement.- Throws:
CompileError
-
atNewExpr
public void atNewExpr(NewExpr expr) throws CompileError
- Specified by:
atNewExpr
in classCodeGen
- Throws:
CompileError
-
atNewArrayExpr
public void atNewArrayExpr(NewExpr expr) throws CompileError
- Throws:
CompileError
-
atNewArrayExpr2
private void atNewArrayExpr2(int type, ASTree sizeExpr, java.lang.String jvmClassname, ArrayInit init) throws CompileError
- Throws:
CompileError
-
badNewExpr
private static void badNewExpr() throws CompileError
- Throws:
CompileError
-
atArrayVariableAssign
protected void atArrayVariableAssign(ArrayInit init, int varType, int varArray, java.lang.String varClass) throws CompileError
- Specified by:
atArrayVariableAssign
in classCodeGen
- Throws:
CompileError
-
atArrayInit
public void atArrayInit(ArrayInit init) throws CompileError
- Specified by:
atArrayInit
in classCodeGen
- Throws:
CompileError
-
atMultiNewArray
protected void atMultiNewArray(int type, ASTList classname, ASTList size) throws CompileError
- Throws:
CompileError
-
atCallExpr
public void atCallExpr(CallExpr expr) throws CompileError
- Specified by:
atCallExpr
in classCodeGen
- Throws:
CompileError
-
badMethod
private static void badMethod() throws CompileError
- Throws:
CompileError
-
atMethodCallCore
public void atMethodCallCore(CtClass targetClass, java.lang.String mname, ASTList args, boolean isStatic, boolean isSpecial, int aload0pos, MemberResolver.Method found) throws CompileError
- Throws:
CompileError
-
atMethodCallCore2
private void atMethodCallCore2(CtClass targetClass, java.lang.String mname, boolean isStatic, boolean isSpecial, int aload0pos, MemberResolver.Method found) throws CompileError
- Throws:
CompileError
-
getAccessiblePrivate
protected java.lang.String getAccessiblePrivate(java.lang.String methodName, java.lang.String desc, java.lang.String newDesc, MethodInfo minfo, CtClass declClass) throws CompileError
- Throws:
CompileError
-
getAccessibleConstructor
protected java.lang.String getAccessibleConstructor(java.lang.String desc, CtClass declClass, MethodInfo minfo) throws CompileError
- Throws:
CompileError
-
getMethodArgsLength
public int getMethodArgsLength(ASTList args)
-
atMethodArgs
public void atMethodArgs(ASTList args, int[] types, int[] dims, java.lang.String[] cnames) throws CompileError
- Throws:
CompileError
-
setReturnType
void setReturnType(java.lang.String desc, boolean isStatic, boolean popTarget) throws CompileError
- Throws:
CompileError
-
atFieldAssign
protected void atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup) throws CompileError
- Specified by:
atFieldAssign
in classCodeGen
- Throws:
CompileError
-
atFieldAssignCore
private void atFieldAssignCore(CtField f, boolean is_static, int fi, boolean is2byte) throws CompileError
- Throws:
CompileError
-
atMember
public void atMember(Member mem) throws CompileError
- Specified by:
atMember
in classCodeGen
- Throws:
CompileError
-
atFieldRead
protected void atFieldRead(ASTree expr) throws CompileError
- Specified by:
atFieldRead
in classCodeGen
- Throws:
CompileError
-
atArrayLength
private void atArrayLength(ASTree expr) throws CompileError
- Throws:
CompileError
-
atFieldRead
private int atFieldRead(CtField f, boolean isStatic) throws CompileError
Generates bytecode for reading a field value. It returns a fieldref_info index or zero if the field is a private one declared in an enclosing class.- Throws:
CompileError
-
isAccessibleField
private AccessorMaker isAccessibleField(CtField f, FieldInfo finfo) throws CompileError
Returns null if the field is accessible. Otherwise, it throws an exception or it returns AccessorMaker if the field is a private one declared in an enclosing class.- Throws:
CompileError
-
setFieldType
private boolean setFieldType(FieldInfo finfo) throws CompileError
Sets exprType, arrayDim, and className.- Returns:
- true if the field type is long or double.
- Throws:
CompileError
-
atClassObject2
protected void atClassObject2(java.lang.String cname) throws CompileError
- Overrides:
atClassObject2
in classCodeGen
- Throws:
CompileError
-
atFieldPlusPlus
protected void atFieldPlusPlus(int token, boolean isPost, ASTree oprand, Expr expr, boolean doDup) throws CompileError
- Specified by:
atFieldPlusPlus
in classCodeGen
- Throws:
CompileError
-
fieldAccess
protected CtField fieldAccess(ASTree expr, boolean acceptLength) throws CompileError
- Throws:
CompileError
-
badLvalue
private static void badLvalue() throws CompileError
- Throws:
CompileError
-
makeParamList
public CtClass[] makeParamList(MethodDecl md) throws CompileError
- Throws:
CompileError
-
makeThrowsList
public CtClass[] makeThrowsList(MethodDecl md) throws CompileError
- Throws:
CompileError
-
resolveClassName
protected java.lang.String resolveClassName(ASTList name) throws CompileError
- Specified by:
resolveClassName
in classCodeGen
- Throws:
CompileError
-
resolveClassName
protected java.lang.String resolveClassName(java.lang.String jvmName) throws CompileError
- Specified by:
resolveClassName
in classCodeGen
- Throws:
CompileError
-
-