|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.codehaus.groovy.ast.CodeVisitorSupport
org.codehaus.groovy.ast.ClassCodeVisitorSupport
org.codehaus.groovy.classgen.ClassGenerator
org.codehaus.groovy.classgen.AsmClassGenerator
public class AsmClassGenerator
Generates Java class versions of Groovy classes using ASM.
Nested Class Summary | |
---|---|
private static class |
AsmClassGenerator.ClassRef
|
private class |
AsmClassGenerator.MyMethodAdapter
|
Fields inherited from class org.codehaus.groovy.classgen.ClassGenerator |
---|
asmJDKVersion, classLoader, innerClasses |
Fields inherited from interface org.objectweb.asm.Opcodes |
---|
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DREM, DRETURN, DSTORE, 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, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, 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, IMUL, INEG, INSTANCEOF, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6 |
Constructor Summary | |
---|---|
AsmClassGenerator(GeneratorContext context,
org.objectweb.asm.ClassVisitor classVisitor,
java.lang.ClassLoader classLoader,
java.lang.String sourceFile)
|
Method Summary | |
---|---|
private void |
addGeneratedClosureConstructorCall(ConstructorCallExpression call)
|
protected boolean |
addInnerClass(ClassNode innerClass)
|
private void |
addVariableNames(Expression expression,
java.util.List list)
|
private int |
allocateIndex(java.lang.String name)
|
protected static int |
argumentSize(Expression arguments)
|
protected boolean |
argumentsUseStack(Expression arguments)
|
private void |
assignmentCastAndVisit(ClassNode type,
Expression rightExpression)
|
private java.lang.String[] |
buildExceptions(ClassNode[] exceptions)
|
protected static boolean |
containsSpreadExpression(Expression arguments)
|
protected ClassNode |
createClosureClass(ClosureExpression expression)
|
protected void |
createInterfaceSyntheticStaticFields()
|
private void |
createMopMethods()
|
protected Expression |
createReturnLHSExpression(Expression expression)
For assignment expressions, return a safe expression for the LHS we can use to return the value |
protected Expression |
createReusableExpression(Expression expression)
|
protected void |
createSyntheticStaticFields()
|
private void |
despreadList(java.util.List expressions,
boolean wrap)
|
protected void |
doConvertAndCast(ClassNode type)
|
protected void |
doConvertAndCast(ClassNode type,
boolean coerce)
|
protected void |
doConvertAndCast(ClassNode type,
Expression expression,
boolean ignoreAutoboxing,
boolean forceCast,
boolean coerce)
Casts to the given type unless it can be determined that the cast is unnecessary |
protected boolean |
emptyArguments(Expression arguments)
|
private boolean |
equalParameterTypes(Parameter[] p1,
Parameter[] p2)
|
private void |
evaluateBinaryExpression(MethodCaller compareMethod,
BinaryExpression expression)
|
protected void |
evaluateBinaryExpression(java.lang.String method,
BinaryExpression expression)
|
protected void |
evaluateBinaryExpressionWithAssignment(java.lang.String method,
BinaryExpression expression)
|
protected void |
evaluateCompareTo(BinaryExpression expression)
|
protected void |
evaluateEqual(BinaryExpression expression,
boolean defineVariable)
|
protected void |
evaluateExpression(Expression expression)
|
protected void |
evaluateInstanceof(BinaryExpression expression)
|
protected void |
evaluateLogicalAndExpression(BinaryExpression expression)
|
protected void |
evaluateLogicalOrExpression(BinaryExpression expression)
|
protected void |
evaluatePostfixMethod(java.lang.String method,
Expression expression)
|
protected void |
evaluatePrefixMethod(java.lang.String method,
Expression expression)
|
private void |
execMethodAndStoreForSubscriptOperator(java.lang.String method,
Expression expression)
|
private void |
generateCallSiteArray()
|
private void |
generateCreateCallSiteArray()
|
private void |
generateGetCallSiteArray()
|
private void |
generateMopCalls(java.util.LinkedList mopCalls,
boolean useThis)
generates a Meta Object Protocol method, that is used to call a non public method, or to make a call to super. |
private org.objectweb.asm.AnnotationVisitor |
getAnnotationVisitor(AnnotatedNode targetNode,
AnnotationNode an,
java.lang.Object visitor)
|
protected int |
getBytecodeVersion()
|
protected Parameter[] |
getClosureSharedVariables(ClosureExpression ce)
|
protected CompileUnit |
getCompileUnit()
|
private static java.lang.String |
getCreateArraySignature(int numberOfArguments)
|
private static java.lang.String |
getDescForParamNum(int numberOfArguments)
|
protected ClassNode |
getExpressionType(Expression expression)
|
protected ClassNode |
getLHSType(Expression leftExpression)
Deduces the type name required for some casting |
private java.lang.String |
getMethodName(Expression message)
|
static java.lang.String |
getMopMethodName(MethodNode method,
boolean useThis)
creates a MOP method name from a method |
protected ClassNode |
getOutermostClass()
|
protected SourceUnit |
getSourceUnit()
|
private static java.lang.String |
getStaticFieldName(ClassNode type)
|
private void |
improveExprType(Expression expr)
|
private void |
invokeClosure(Expression arguments,
java.lang.String methodName)
|
private boolean |
isClosureCall(MethodCallExpression call)
|
protected boolean |
isComparisonExpression(Expression expression)
|
protected boolean |
isFieldOrVariable(java.lang.String name)
|
protected boolean |
isGroovyObject(Expression objectExpression)
|
protected boolean |
isInClosure()
|
protected boolean |
isInClosureConstructor()
|
private boolean |
isInnerClass()
|
protected boolean |
isInScriptBody()
|
static boolean |
isMopMethod(java.lang.String methodName)
method to determine if a method is a MOP method. |
private boolean |
isNotClinit()
|
protected boolean |
isNotExplicitThisInClosure(boolean implicitThis)
|
protected boolean |
isPopRequired(Expression expression)
|
private boolean |
isStaticContext()
|
private boolean |
isStaticInvocation(MethodCallExpression call)
|
protected boolean |
isStaticMethod()
|
private static boolean |
isSuperExpression(Expression expression)
|
private static boolean |
isThisExpression(Expression expression)
|
private static boolean |
isThisOrSuper(Expression expression)
|
protected boolean |
isValidTypeForCast(ClassNode type)
|
private boolean |
isVargs(Parameter[] p)
|
private void |
load(Expression exp)
|
private void |
loadDynamicName(Expression name)
|
void |
loadInstanceField(FieldExpression fldExp)
RHS instance field. |
void |
loadStaticField(FieldExpression fldExp)
|
private void |
loadThis()
|
protected void |
loadThisOrOwner()
Loads either this object or if we're inside a closure then load the top level owner |
private void |
loadWrapper(Expression argument)
|
private void |
makeBinopCallSite(BinaryExpression bin,
java.lang.String message)
|
private void |
makeBinopCallSite(Expression receiver,
java.lang.String message,
Expression arguments)
|
private void |
makeCall(ClassExpression sender,
Expression receiver,
Expression message,
Expression arguments,
MethodCallerMultiAdapter adapter,
boolean safe,
boolean spreadSafe,
boolean implicitThis)
|
private void |
makeCall(Expression receiver,
Expression message,
Expression arguments,
MethodCallerMultiAdapter adapter,
boolean safe,
boolean spreadSafe,
boolean implicitThis)
|
private void |
makeCallSite(Expression receiver,
java.lang.String message,
Expression arguments,
boolean safe,
boolean implicitThis,
boolean callCurrent,
boolean callStatic)
|
private static java.lang.String |
makeFieldClassName(ClassNode type)
|
private void |
makeGetPropertySite(Expression receiver,
java.lang.String methodName,
boolean safe,
boolean implicitThis)
|
private void |
makeGroovyObjectGetPropertySite(Expression receiver,
java.lang.String methodName,
boolean safe,
boolean implicitThis)
|
private void |
makeInvokeMethodCall(MethodCallExpression call,
boolean useSuper,
MethodCallerMultiAdapter adapter)
|
protected void |
onLineNumber(ASTNode statement,
java.lang.String message)
|
private void |
prepareCallSite(java.lang.String message)
|
protected void |
processClassVariable(java.lang.String name)
|
protected void |
processFieldAccess(java.lang.String name,
FieldNode field,
int steps)
|
protected void |
processStackVariable(Variable variable)
|
private void |
removeInitialValues(Parameter[] params)
this method is called for local variables shared between scopes. |
private java.util.List |
sortConstructors(ConstructorCallExpression call,
ClassNode callNode)
|
void |
storeStaticField(FieldExpression expression)
|
void |
storeThisInstanceField(FieldExpression expression)
|
private void |
throwException(java.lang.String s)
|
static boolean |
usesSuper(MethodCallExpression call)
|
static boolean |
usesSuper(PropertyExpression pe)
|
protected void |
visitAndAutoboxBoolean(Expression expression)
|
private void |
visitAnnotationAttributes(AnnotationNode an,
org.objectweb.asm.AnnotationVisitor av)
Generate the annotation attributes. |
private void |
visitAnnotationDefault(MethodNode node,
org.objectweb.asm.MethodVisitor mv)
|
(package private) void |
visitAnnotationDefaultExpression(org.objectweb.asm.AnnotationVisitor av,
ClassNode type,
Expression exp)
|
void |
visitAnnotations(AnnotatedNode node)
Note: ignore it. |
private void |
visitAnnotations(AnnotatedNode targetNode,
java.lang.Object visitor)
|
void |
visitArgumentlistExpression(ArgumentListExpression ale)
|
private void |
visitArrayAttributes(AnnotationNode an,
java.util.Map arrayAttr,
org.objectweb.asm.AnnotationVisitor av)
|
void |
visitArrayExpression(ArrayExpression expression)
|
void |
visitAssertStatement(AssertStatement statement)
|
void |
visitAttributeExpression(AttributeExpression expression)
|
private void |
visitAttributeOrProperty(PropertyExpression expression,
MethodCallerMultiAdapter adapter)
|
void |
visitBinaryExpression(BinaryExpression expression)
|
void |
visitBitwiseNegationExpression(BitwiseNegationExpression expression)
|
void |
visitBlockStatement(BlockStatement block)
|
void |
visitBooleanExpression(BooleanExpression expression)
return a primitive boolean value of the BooleanExpresion. |
void |
visitBreakStatement(BreakStatement statement)
|
void |
visitBytecodeExpression(BytecodeExpression cle)
|
void |
visitBytecodeSequence(BytecodeSequence bytecodeSequence)
|
void |
visitCaseStatement(CaseStatement statement)
|
void |
visitCaseStatement(CaseStatement statement,
int switchVariableIndex,
org.objectweb.asm.Label thisLabel,
org.objectweb.asm.Label nextLabel)
|
void |
visitCastExpression(CastExpression castExpression)
|
void |
visitClass(ClassNode classNode)
|
void |
visitClassExpression(ClassExpression expression)
load class object on stack |
void |
visitClosureExpression(ClosureExpression expression)
|
void |
visitClosureListExpression(ClosureListExpression expression)
|
void |
visitConstantExpression(ConstantExpression expression)
Generate byte code for constants |
void |
visitConstructor(ConstructorNode node)
|
void |
visitConstructorCallExpression(ConstructorCallExpression call)
|
protected void |
visitConstructorOrMethod(MethodNode node,
boolean isConstructor)
|
void |
visitContinueStatement(ContinueStatement statement)
|
void |
visitDeclarationExpression(DeclarationExpression expression)
|
void |
visitDoWhileLoop(DoWhileStatement loop)
|
private void |
visitExpressionOrStatement(java.lang.Object o)
|
void |
visitExpressionStatement(ExpressionStatement statement)
|
void |
visitField(FieldNode fieldNode)
|
void |
visitFieldExpression(FieldExpression expression)
|
void |
visitForLoop(ForStatement loop)
|
private void |
visitForLoopWithClosureList(ForStatement loop)
|
void |
visitGenericType(GenericsType genericsType)
|
void |
visitGStringExpression(GStringExpression expression)
|
void |
visitIfElse(IfStatement ifElse)
|
void |
visitListExpression(ListExpression expression)
|
void |
visitMapEntryExpression(MapEntryExpression expression)
|
void |
visitMapExpression(MapExpression expression)
|
void |
visitMethod(MethodNode node)
|
void |
visitMethodCallExpression(MethodCallExpression call)
|
void |
visitMethodPointerExpression(MethodPointerExpression expression)
|
private void |
visitMopMethodList(java.util.List methods,
boolean isThis)
filters a list of method for MOP methods. |
void |
visitNotExpression(NotExpression expression)
|
protected void |
visitOuterFieldExpression(FieldExpression expression,
ClassNode outerClassNode,
int steps,
boolean first)
|
private void |
visitParameterAnnotations(Parameter parameter,
int paramNumber,
org.objectweb.asm.MethodVisitor mv)
|
void |
visitPostfixExpression(PostfixExpression expression)
|
void |
visitPrefixExpression(PrefixExpression expression)
|
void |
visitProperty(PropertyNode statement)
|
void |
visitPropertyExpression(PropertyExpression expression)
|
void |
visitRangeExpression(RangeExpression expression)
|
void |
visitRegexExpression(RegexExpression expression)
|
void |
visitReturnStatement(ReturnStatement statement)
|
private void |
visitSpecialConstructorCall(ConstructorCallExpression call)
|
void |
visitSpreadExpression(SpreadExpression expression)
|
void |
visitSpreadMapExpression(SpreadMapExpression expression)
|
protected void |
visitStatement(Statement statement)
|
void |
visitStaticMethodCallExpression(StaticMethodCallExpression call)
|
private void |
visitStdMethod(MethodNode node,
boolean isConstructor,
Parameter[] parameters,
Statement code)
|
void |
visitSwitch(SwitchStatement statement)
|
void |
visitSynchronizedStatement(SynchronizedStatement statement)
|
void |
visitTernaryExpression(TernaryExpression expression)
|
void |
visitThrowStatement(ThrowStatement statement)
|
void |
visitTryCatchFinally(TryCatchStatement statement)
|
void |
visitTupleExpression(TupleExpression expression)
|
private void |
visitTupleExpression(TupleExpression expression,
boolean useWrapper)
|
void |
visitUnaryMinusExpression(UnaryMinusExpression expression)
|
void |
visitUnaryPlusExpression(UnaryPlusExpression expression)
|
void |
visitVariableExpression(VariableExpression expression)
Visits a bare (unqualified) variable expression. |
void |
visitWhileLoop(WhileStatement loop)
|
Methods inherited from class org.codehaus.groovy.classgen.ClassGenerator |
---|
getClassLoader, getInnerClasses |
Methods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport |
---|
addError, visitCatchStatement, visitClassCodeContainer |
Methods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport |
---|
visitListOfExpressions, visitShortTernaryExpression |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private final org.objectweb.asm.ClassVisitor cv
private org.objectweb.asm.MethodVisitor mv
private GeneratorContext context
private java.lang.String sourceFile
private ClassNode classNode
private ClassNode outermostClass
private java.lang.String internalClassName
private java.lang.String internalBaseClassName
private CompileStack compileStack
private boolean outputReturn
private boolean leftHandExpression
static final MethodCallerMultiAdapter invokeMethodOnCurrent
static final MethodCallerMultiAdapter invokeMethodOnSuper
static final MethodCallerMultiAdapter invokeMethod
static final MethodCallerMultiAdapter invokeStaticMethod
static final MethodCallerMultiAdapter invokeNew
static final MethodCallerMultiAdapter setField
static final MethodCallerMultiAdapter getField
static final MethodCallerMultiAdapter setGroovyObjectField
static final MethodCallerMultiAdapter getGroovyObjectField
static final MethodCallerMultiAdapter setFieldOnSuper
static final MethodCallerMultiAdapter getFieldOnSuper
static final MethodCallerMultiAdapter setProperty
static final MethodCallerMultiAdapter getProperty
static final MethodCallerMultiAdapter setGroovyObjectProperty
static final MethodCallerMultiAdapter getGroovyObjectProperty
static final MethodCallerMultiAdapter setPropertyOnSuper
static final MethodCallerMultiAdapter getPropertyOnSuper
static final MethodCaller iteratorNextMethod
static final MethodCaller iteratorHasNextMethod
static final MethodCaller assertFailedMethod
static final MethodCaller isCaseMethod
static final MethodCaller compareIdenticalMethod
static final MethodCaller compareEqualMethod
static final MethodCaller compareNotEqualMethod
static final MethodCaller compareToMethod
static final MethodCaller compareLessThanMethod
static final MethodCaller compareLessThanEqualMethod
static final MethodCaller compareGreaterThanMethod
static final MethodCaller compareGreaterThanEqualMethod
static final MethodCaller findRegexMethod
static final MethodCaller matchRegexMethod
static final MethodCaller regexPattern
static final MethodCaller spreadMap
static final MethodCaller despreadList
static final MethodCaller getMethodPointer
static final MethodCaller invokeClosureMethod
static final MethodCaller unaryPlus
static final MethodCaller unaryMinus
static final MethodCaller bitwiseNegate
static final MethodCaller asTypeMethod
static final MethodCaller castToTypeMethod
static final MethodCaller createListMethod
static final MethodCaller createTupleMethod
static final MethodCaller createMapMethod
static final MethodCaller createRangeMethod
static final MethodCaller createPojoWrapperMethod
static final MethodCaller createGroovyObjectWrapperMethod
static final MethodCaller selectConstructorAndTransformArguments
private java.util.List exceptionBlocks
private java.util.Set referencedClasses
private boolean passingClosureParams
private ConstructorNode constructorNode
private MethodNode methodNode
private BytecodeHelper helper
public static final boolean CREATE_DEBUG_INFO
public static final boolean CREATE_LINE_NUMBER_INFO
private static final boolean MARK_START
public static final boolean ASM_DEBUG
private int lineNumber
private int columnNumber
private ASTNode currentASTNode
private DummyClassGenerator dummyGen
private org.objectweb.asm.ClassWriter dummyClassWriter
private ClassNode interfaceClassLoadingClass
private boolean implicitThis
private java.util.Map genericParameterNames
private ClassNode rightHandType
private static final java.lang.String CONSTRUCTOR
private java.util.List callSites
private int callSiteArrayVarIndex
private java.util.HashMap closureClassMap
private static final java.lang.String DTT
private static java.lang.String[] sig
private static final java.util.HashSet<java.lang.String> names
private static final java.util.HashSet<java.lang.String> basic
Constructor Detail |
---|
public AsmClassGenerator(GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, java.lang.ClassLoader classLoader, java.lang.String sourceFile)
Method Detail |
---|
protected SourceUnit getSourceUnit()
getSourceUnit
in class ClassGenerator
public void visitClass(ClassNode classNode)
visitClass
in interface GroovyClassVisitor
visitClass
in class ClassCodeVisitorSupport
private void generateCallSiteArray()
private void generateGetCallSiteArray()
private void generateCreateCallSiteArray()
public void visitGenericType(GenericsType genericsType)
private void createMopMethods()
private java.lang.String[] buildExceptions(ClassNode[] exceptions)
private void visitMopMethodList(java.util.List methods, boolean isThis)
methods
- unfiltered list of methods for MOPisThis
- if true, then we are creating a MOP method on "this", "super" elsegenerateMopCalls(LinkedList,boolean)
private boolean equalParameterTypes(Parameter[] p1, Parameter[] p2)
private void generateMopCalls(java.util.LinkedList mopCalls, boolean useThis)
mopCalls
- list of methods a mop call method should be generated foruseThis
- true if "this" should be used for the namingpublic static java.lang.String getMopMethodName(MethodNode method, boolean useThis)
method
- the method to be called by the mop methoduseThis
- if true, then it is a call on "this", "super" else
public static boolean isMopMethod(java.lang.String methodName)
methodName
- name of the method to test
protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor)
visitConstructorOrMethod
in class ClassCodeVisitorSupport
private void visitStdMethod(MethodNode node, boolean isConstructor, Parameter[] parameters, Statement code)
void visitAnnotationDefaultExpression(org.objectweb.asm.AnnotationVisitor av, ClassNode type, Expression exp)
private void visitAnnotationDefault(MethodNode node, org.objectweb.asm.MethodVisitor mv)
private boolean isNotClinit()
private boolean isVargs(Parameter[] p)
public void visitConstructor(ConstructorNode node)
visitConstructor
in interface GroovyClassVisitor
visitConstructor
in class ClassCodeVisitorSupport
public void visitMethod(MethodNode node)
visitMethod
in interface GroovyClassVisitor
visitMethod
in class ClassCodeVisitorSupport
public void visitField(FieldNode fieldNode)
visitField
in interface GroovyClassVisitor
visitField
in class ClassCodeVisitorSupport
public void visitProperty(PropertyNode statement)
visitProperty
in interface GroovyClassVisitor
visitProperty
in class ClassCodeVisitorSupport
protected void visitStatement(Statement statement)
visitStatement
in class ClassCodeVisitorSupport
public void visitBlockStatement(BlockStatement block)
visitBlockStatement
in interface GroovyCodeVisitor
visitBlockStatement
in class ClassCodeVisitorSupport
private void visitExpressionOrStatement(java.lang.Object o)
private void visitForLoopWithClosureList(ForStatement loop)
public void visitForLoop(ForStatement loop)
visitForLoop
in interface GroovyCodeVisitor
visitForLoop
in class ClassCodeVisitorSupport
public void visitWhileLoop(WhileStatement loop)
visitWhileLoop
in interface GroovyCodeVisitor
visitWhileLoop
in class ClassCodeVisitorSupport
public void visitDoWhileLoop(DoWhileStatement loop)
visitDoWhileLoop
in interface GroovyCodeVisitor
visitDoWhileLoop
in class ClassCodeVisitorSupport
public void visitIfElse(IfStatement ifElse)
visitIfElse
in interface GroovyCodeVisitor
visitIfElse
in class ClassCodeVisitorSupport
public void visitTernaryExpression(TernaryExpression expression)
visitTernaryExpression
in interface GroovyCodeVisitor
visitTernaryExpression
in class CodeVisitorSupport
public void visitAssertStatement(AssertStatement statement)
visitAssertStatement
in interface GroovyCodeVisitor
visitAssertStatement
in class ClassCodeVisitorSupport
private void addVariableNames(Expression expression, java.util.List list)
public void visitTryCatchFinally(TryCatchStatement statement)
visitTryCatchFinally
in interface GroovyCodeVisitor
visitTryCatchFinally
in class ClassCodeVisitorSupport
public void visitSwitch(SwitchStatement statement)
visitSwitch
in interface GroovyCodeVisitor
visitSwitch
in class ClassCodeVisitorSupport
public void visitCaseStatement(CaseStatement statement)
visitCaseStatement
in interface GroovyCodeVisitor
visitCaseStatement
in class ClassCodeVisitorSupport
public void visitCaseStatement(CaseStatement statement, int switchVariableIndex, org.objectweb.asm.Label thisLabel, org.objectweb.asm.Label nextLabel)
public void visitBreakStatement(BreakStatement statement)
visitBreakStatement
in interface GroovyCodeVisitor
visitBreakStatement
in class ClassCodeVisitorSupport
public void visitContinueStatement(ContinueStatement statement)
visitContinueStatement
in interface GroovyCodeVisitor
visitContinueStatement
in class ClassCodeVisitorSupport
public void visitSynchronizedStatement(SynchronizedStatement statement)
visitSynchronizedStatement
in interface GroovyCodeVisitor
visitSynchronizedStatement
in class ClassCodeVisitorSupport
public void visitThrowStatement(ThrowStatement statement)
visitThrowStatement
in interface GroovyCodeVisitor
visitThrowStatement
in class ClassCodeVisitorSupport
public void visitReturnStatement(ReturnStatement statement)
visitReturnStatement
in interface GroovyCodeVisitor
visitReturnStatement
in class ClassCodeVisitorSupport
protected void doConvertAndCast(ClassNode type, Expression expression, boolean ignoreAutoboxing, boolean forceCast, boolean coerce)
protected void evaluateExpression(Expression expression)
expression
- public void visitExpressionStatement(ExpressionStatement statement)
visitExpressionStatement
in interface GroovyCodeVisitor
visitExpressionStatement
in class ClassCodeVisitorSupport
public void visitDeclarationExpression(DeclarationExpression expression)
visitDeclarationExpression
in interface GroovyCodeVisitor
visitDeclarationExpression
in class CodeVisitorSupport
public void visitBinaryExpression(BinaryExpression expression)
visitBinaryExpression
in interface GroovyCodeVisitor
visitBinaryExpression
in class CodeVisitorSupport
private void load(Expression exp)
public void visitPostfixExpression(PostfixExpression expression)
visitPostfixExpression
in interface GroovyCodeVisitor
visitPostfixExpression
in class CodeVisitorSupport
private void throwException(java.lang.String s)
public void visitPrefixExpression(PrefixExpression expression)
visitPrefixExpression
in interface GroovyCodeVisitor
visitPrefixExpression
in class CodeVisitorSupport
public void visitClosureExpression(ClosureExpression expression)
visitClosureExpression
in interface GroovyCodeVisitor
visitClosureExpression
in class CodeVisitorSupport
protected void loadThisOrOwner()
public void visitRegexExpression(RegexExpression expression)
visitRegexExpression
in interface GroovyCodeVisitor
visitRegexExpression
in class CodeVisitorSupport
public void visitConstantExpression(ConstantExpression expression)
visitConstantExpression
in interface GroovyCodeVisitor
visitConstantExpression
in class CodeVisitorSupport
public void visitSpreadExpression(SpreadExpression expression)
visitSpreadExpression
in interface GroovyCodeVisitor
visitSpreadExpression
in class CodeVisitorSupport
public void visitSpreadMapExpression(SpreadMapExpression expression)
visitSpreadMapExpression
in interface GroovyCodeVisitor
visitSpreadMapExpression
in class CodeVisitorSupport
public void visitMethodPointerExpression(MethodPointerExpression expression)
visitMethodPointerExpression
in interface GroovyCodeVisitor
visitMethodPointerExpression
in class CodeVisitorSupport
private void loadDynamicName(Expression name)
public void visitUnaryMinusExpression(UnaryMinusExpression expression)
visitUnaryMinusExpression
in interface GroovyCodeVisitor
visitUnaryMinusExpression
in class CodeVisitorSupport
public void visitUnaryPlusExpression(UnaryPlusExpression expression)
visitUnaryPlusExpression
in interface GroovyCodeVisitor
visitUnaryPlusExpression
in class CodeVisitorSupport
public void visitBitwiseNegationExpression(BitwiseNegationExpression expression)
visitBitwiseNegationExpression
in interface GroovyCodeVisitor
visitBitwiseNegationExpression
in class CodeVisitorSupport
public void visitCastExpression(CastExpression castExpression)
visitCastExpression
in interface GroovyCodeVisitor
visitCastExpression
in class CodeVisitorSupport
public void visitNotExpression(NotExpression expression)
visitNotExpression
in interface GroovyCodeVisitor
visitNotExpression
in class CodeVisitorSupport
public void visitBooleanExpression(BooleanExpression expression)
visitBooleanExpression
in interface GroovyCodeVisitor
visitBooleanExpression
in class CodeVisitorSupport
expression
- private void makeInvokeMethodCall(MethodCallExpression call, boolean useSuper, MethodCallerMultiAdapter adapter)
private void makeCall(Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
private void makeCall(ClassExpression sender, Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
private void makeGetPropertySite(Expression receiver, java.lang.String methodName, boolean safe, boolean implicitThis)
private void makeGroovyObjectGetPropertySite(Expression receiver, java.lang.String methodName, boolean safe, boolean implicitThis)
private java.lang.String getMethodName(Expression message)
private void makeCallSite(Expression receiver, java.lang.String message, Expression arguments, boolean safe, boolean implicitThis, boolean callCurrent, boolean callStatic)
private static java.lang.String getDescForParamNum(int numberOfArguments)
private static java.lang.String getCreateArraySignature(int numberOfArguments)
private void makeBinopCallSite(BinaryExpression bin, java.lang.String message)
private void improveExprType(Expression expr)
private void makeBinopCallSite(Expression receiver, java.lang.String message, Expression arguments)
private void prepareCallSite(java.lang.String message)
private int allocateIndex(java.lang.String name)
private void despreadList(java.util.List expressions, boolean wrap)
public void visitMethodCallExpression(MethodCallExpression call)
visitMethodCallExpression
in interface GroovyCodeVisitor
visitMethodCallExpression
in class CodeVisitorSupport
private boolean isClosureCall(MethodCallExpression call)
private void invokeClosure(Expression arguments, java.lang.String methodName)
private boolean isStaticInvocation(MethodCallExpression call)
protected boolean emptyArguments(Expression arguments)
protected static boolean containsSpreadExpression(Expression arguments)
protected static int argumentSize(Expression arguments)
public void visitStaticMethodCallExpression(StaticMethodCallExpression call)
visitStaticMethodCallExpression
in interface GroovyCodeVisitor
visitStaticMethodCallExpression
in class CodeVisitorSupport
private void addGeneratedClosureConstructorCall(ConstructorCallExpression call)
private void visitSpecialConstructorCall(ConstructorCallExpression call)
private java.util.List sortConstructors(ConstructorCallExpression call, ClassNode callNode)
public void visitConstructorCallExpression(ConstructorCallExpression call)
visitConstructorCallExpression
in interface GroovyCodeVisitor
visitConstructorCallExpression
in class CodeVisitorSupport
private static java.lang.String makeFieldClassName(ClassNode type)
private static java.lang.String getStaticFieldName(ClassNode type)
private void visitAttributeOrProperty(PropertyExpression expression, MethodCallerMultiAdapter adapter)
private boolean isStaticContext()
public void visitPropertyExpression(PropertyExpression expression)
visitPropertyExpression
in interface GroovyCodeVisitor
visitPropertyExpression
in class CodeVisitorSupport
public void visitAttributeExpression(AttributeExpression expression)
visitAttributeExpression
in interface GroovyCodeVisitor
visitAttributeExpression
in class CodeVisitorSupport
protected boolean isGroovyObject(Expression objectExpression)
public void visitFieldExpression(FieldExpression expression)
visitFieldExpression
in interface GroovyCodeVisitor
visitFieldExpression
in class CodeVisitorSupport
public void loadStaticField(FieldExpression fldExp)
fldExp
- public void loadInstanceField(FieldExpression fldExp)
fldExp
- public void storeThisInstanceField(FieldExpression expression)
public void storeStaticField(FieldExpression expression)
protected void visitOuterFieldExpression(FieldExpression expression, ClassNode outerClassNode, int steps, boolean first)
public void visitVariableExpression(VariableExpression expression)
visitVariableExpression
in interface GroovyCodeVisitor
visitVariableExpression
in class CodeVisitorSupport
private void loadThis()
protected void processStackVariable(Variable variable)
protected void processClassVariable(java.lang.String name)
protected void processFieldAccess(java.lang.String name, FieldNode field, int steps)
protected boolean isInScriptBody()
protected boolean isPopRequired(Expression expression)
protected void createInterfaceSyntheticStaticFields()
protected void createSyntheticStaticFields()
public void visitClassExpression(ClassExpression expression)
visitClassExpression
in interface GroovyCodeVisitor
visitClassExpression
in class CodeVisitorSupport
public void visitRangeExpression(RangeExpression expression)
visitRangeExpression
in interface GroovyCodeVisitor
visitRangeExpression
in class CodeVisitorSupport
public void visitMapEntryExpression(MapEntryExpression expression)
visitMapEntryExpression
in interface GroovyCodeVisitor
visitMapEntryExpression
in class CodeVisitorSupport
public void visitMapExpression(MapExpression expression)
visitMapExpression
in interface GroovyCodeVisitor
visitMapExpression
in class CodeVisitorSupport
public void visitArgumentlistExpression(ArgumentListExpression ale)
visitArgumentlistExpression
in interface GroovyCodeVisitor
visitArgumentlistExpression
in class CodeVisitorSupport
public void visitTupleExpression(TupleExpression expression)
visitTupleExpression
in interface GroovyCodeVisitor
visitTupleExpression
in class CodeVisitorSupport
private void visitTupleExpression(TupleExpression expression, boolean useWrapper)
private void loadWrapper(Expression argument)
public void visitArrayExpression(ArrayExpression expression)
visitArrayExpression
in interface GroovyCodeVisitor
visitArrayExpression
in class CodeVisitorSupport
public void visitClosureListExpression(ClosureListExpression expression)
visitClosureListExpression
in interface GroovyCodeVisitor
visitClosureListExpression
in class CodeVisitorSupport
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)
visitBytecodeSequence
in class ClassGenerator
public void visitListExpression(ListExpression expression)
visitListExpression
in interface GroovyCodeVisitor
visitListExpression
in class CodeVisitorSupport
public void visitGStringExpression(GStringExpression expression)
visitGStringExpression
in interface GroovyCodeVisitor
visitGStringExpression
in class CodeVisitorSupport
public void visitAnnotations(AnnotatedNode node)
visitAnnotations
in class ClassCodeVisitorSupport
private void visitAnnotations(AnnotatedNode targetNode, java.lang.Object visitor)
private void visitParameterAnnotations(Parameter parameter, int paramNumber, org.objectweb.asm.MethodVisitor mv)
private org.objectweb.asm.AnnotationVisitor getAnnotationVisitor(AnnotatedNode targetNode, AnnotationNode an, java.lang.Object visitor)
private void visitAnnotationAttributes(AnnotationNode an, org.objectweb.asm.AnnotationVisitor av)
private void visitArrayAttributes(AnnotationNode an, java.util.Map arrayAttr, org.objectweb.asm.AnnotationVisitor av)
protected boolean addInnerClass(ClassNode innerClass)
protected ClassNode createClosureClass(ClosureExpression expression)
private void removeInitialValues(Parameter[] params)
protected Parameter[] getClosureSharedVariables(ClosureExpression ce)
protected ClassNode getOutermostClass()
protected void doConvertAndCast(ClassNode type)
protected void doConvertAndCast(ClassNode type, boolean coerce)
protected void evaluateLogicalOrExpression(BinaryExpression expression)
protected void evaluateLogicalAndExpression(BinaryExpression expression)
protected void evaluateBinaryExpression(java.lang.String method, BinaryExpression expression)
protected void evaluateCompareTo(BinaryExpression expression)
protected void evaluateBinaryExpressionWithAssignment(java.lang.String method, BinaryExpression expression)
private void evaluateBinaryExpression(MethodCaller compareMethod, BinaryExpression expression)
protected void evaluateEqual(BinaryExpression expression, boolean defineVariable)
private void assignmentCastAndVisit(ClassNode type, Expression rightExpression)
protected ClassNode getLHSType(Expression leftExpression)
protected boolean isValidTypeForCast(ClassNode type)
public void visitBytecodeExpression(BytecodeExpression cle)
visitBytecodeExpression
in interface GroovyCodeVisitor
visitBytecodeExpression
in class CodeVisitorSupport
protected void visitAndAutoboxBoolean(Expression expression)
private void execMethodAndStoreForSubscriptOperator(java.lang.String method, Expression expression)
protected void evaluatePrefixMethod(java.lang.String method, Expression expression)
protected void evaluatePostfixMethod(java.lang.String method, Expression expression)
protected void evaluateInstanceof(BinaryExpression expression)
protected boolean argumentsUseStack(Expression arguments)
private static boolean isThisExpression(Expression expression)
private static boolean isSuperExpression(Expression expression)
private static boolean isThisOrSuper(Expression expression)
protected Expression createReturnLHSExpression(Expression expression)
protected Expression createReusableExpression(Expression expression)
protected boolean isComparisonExpression(Expression expression)
protected void onLineNumber(ASTNode statement, java.lang.String message)
private boolean isInnerClass()
protected boolean isFieldOrVariable(java.lang.String name)
protected ClassNode getExpressionType(Expression expression)
protected boolean isInClosureConstructor()
protected boolean isInClosure()
protected boolean isNotExplicitThisInClosure(boolean implicitThis)
protected boolean isStaticMethod()
protected CompileUnit getCompileUnit()
public static boolean usesSuper(MethodCallExpression call)
public static boolean usesSuper(PropertyExpression pe)
protected int getBytecodeVersion()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |