org.codehaus.groovy.classgen
Class Key

Field Summary
 int hash
           
 String name
           
 def params
           
 
Constructor Summary
Key(String name, def params)
           
 
Method Summary
void addGeneratedClosureConstructorCall(ConstructorCallExpression call)
          
boolean addInnerClass(ClassNode innerClass)
          
void addVariableNames(Expression expression, List list)
          
static int argumentSize(Expression arguments)
          
boolean argumentsUseStack(Expression arguments)
           which case the arguments are evaluated first, stored in the variable stack and then reloaded to make a method call
static boolean containsSpreadExpression(Expression arguments)
          
ClassNode createClosureClass(ClosureExpression expression)
          
void createInterfaceSyntheticStaticFields()
          
Expression createReturnLHSExpression(Expression expression)
           For assignment expressions, return a safe expression for the LHS we can use to return the value
Expression createReusableExpression(Expression expression)
          
void createSyntheticStaticFields()
          
void despreadList(List expressions, boolean wrap)
          
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
void doConvertAndCast(ClassNode type)
          
void doConvertAndCast(ClassNode type, boolean coerce)
          
boolean emptyArguments(Expression arguments)
          
boolean equalParameterTypes(def p1, def p2)
          
boolean equals(Object obj)
          
void evaluateBinaryExpression(String method, BinaryExpression expression)
          
void evaluateBinaryExpression(MethodCaller compareMethod, BinaryExpression expression)
          
void evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)
          
void evaluateCompareTo(BinaryExpression expression)
          
void evaluateEqual(BinaryExpression expression)
          
void evaluateExpression(Expression expression)
          
void evaluateInstanceof(BinaryExpression expression)
          
void evaluateLogicalAndExpression(BinaryExpression expression)
          
void evaluateLogicalOrExpression(BinaryExpression expression)
          
void evaluatePostfixMethod(String method, Expression expression)
          
void evaluatePrefixMethod(String method, Expression expression)
          
void execMethodAndStoreForSubscriptOperator(String method, Expression expression)
          
void generateMopCalls(LinkedList mopCalls, boolean useThis)
           generates a Meta Object Protocoll method, that is used to call a non public method, or to make a call to super.
AnnotationVisitor getAnnotationVisitor(AnnotatedNode targetNode, AnnotationNode an, Object visitor)
          
int getBytecodeVersion()
          
def getClosureSharedVariables(ClosureExpression ce)
          
CompileUnit getCompileUnit()
          
ClassNode getExpressionType(Expression expression)
           then this method returns the type - otherwise null
ClassNode getLHSType(Expression leftExpression)
           Deduces the type name required for some casting
static String getMopMethodName(MethodNode method, boolean useThis)
           creates a MOP method name from a method
ClassNode getOutermostClass()
          
static String getStaticFieldName(ClassNode type)
          
int hashCode()
          
boolean isComparisonExpression(Expression expression)
          
boolean isFieldOrVariable(String name)
          
boolean isGroovyObject(Expression objectExpression)
          
boolean isHolderVariable(Expression expression)
          
boolean isInClosure()
          
boolean isInClosureConstructor()
          
boolean isInScriptBody()
           local variables but are properties
boolean isInnerClass()
          
static boolean isMopMethod(String methodName)
           method to determine if a method is a MOP method.
boolean isNonStaticField(Expression expression)
          
boolean isPopRequired(Expression expression)
           that must be popped
boolean isStaticContext()
          
boolean isStaticInvocation(MethodCallExpression call)
          
boolean isStaticMethod()
          
static boolean isSuperExpression(Expression expression)
          
static boolean isThisExpression(Expression expression)
          
static boolean isThisOrSuper(Expression expression)
          
boolean isValidTypeForCast(ClassNode type)
          
boolean isVargs(def p)
          
void load(Expression exp)
          
void loadDynamicName(Expression name)
          
void loadInstanceField(FieldExpression fldExp)
           RHS instance field. should move most of the code in the BytecodeHelper
void loadStaticField(FieldExpression fldExp)
          
void loadThis()
          
void loadThisOrOwner()
           Loads either this object or if we're inside a closure then load the top level owner
void loadWrapper(Expression argument)
          
void makeCall(Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
          
void makeCall(ClassExpression sender, Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
          
static String makeFieldClassName(ClassNode type)
          
void makeInvokeMethodCall(MethodCallExpression call, boolean useSuper, MethodCallerMultiAdapter adapter)
          
void onLineNumber(ASTNode statement, String message)
          
void processClassVariable(String name)
          
void processFieldAccess(String name, FieldNode field, int steps)
          
void processStackVariable(Variable variable)
          
void removeInitialValues(def params)
           this method is called for local variables shared between scopes.
List sortConstructors(ConstructorCallExpression call, ClassNode callNode)
          
void storeStaticField(FieldExpression expression)
          
void storeThisInstanceField(FieldExpression expression)
          
void throwException(String s)
          
static boolean usesSuper(MethodCallExpression call)
          
static boolean usesSuper(PropertyExpression pe)
          
void visitAndAutoboxBoolean(Expression expression)
          
void visitAnnotationAttributes(AnnotationNode an, AnnotationVisitor av)
           Generate the annotation attributes.
void visitAnnotations(AnnotatedNode node)
           Note: ignore it.
void visitAnnotations(AnnotatedNode targetNode, Object visitor)
          
void visitArgumentlistExpression(ArgumentListExpression ale)
          
void visitArrayAttributes(AnnotationNode an, Map arrayAttr, AnnotationVisitor av)
          
void visitArrayExpression(ArrayExpression expression)
          
void visitAssertStatement(AssertStatement statement)
          
void visitAttributeExpression(AttributeExpression expression)
          
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 visitBytecodeSequence(BytecodeSequence bytecodeSequence)
          
void visitCaseStatement(CaseStatement statement)
          
void visitCaseStatement(CaseStatement statement, int switchVariableIndex, Label thisLabel, Label nextLabel)
          
void visitCastExpression(CastExpression expression)
          
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)
          
void visitConstructorOrMethod(MethodNode node, boolean isConstructor)
          
void visitContinueStatement(ContinueStatement statement)
          
void visitDeclarationExpression(DeclarationExpression expression)
          
void visitDoWhileLoop(DoWhileStatement loop)
          
void visitExpressionOrStatement(Object o)
          
void visitExpressionStatement(ExpressionStatement statement)
          
void visitField(FieldNode fieldNode)
          
void visitFieldExpression(FieldExpression expression)
          
void visitForLoop(ForStatement loop)
          
void visitForLoopWithClosureList(ForStatement loop)
          
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)
          
void visitNotExpression(NotExpression expression)
          
void visitOuterFieldExpression(FieldExpression expression, ClassNode outerClassNode, int steps, boolean first)
          
void visitParameterAnnotations(Parameter parameter, int paramNumber, 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)
          
void visitSpecialConstructorCall(ConstructorCallExpression call)
          
void visitSpreadExpression(SpreadExpression expression)
          
void visitSpreadMapExpression(SpreadMapExpression expression)
          
void visitStatement(Statement statement)
          
void visitStaticMethodCallExpression(StaticMethodCallExpression call)
          
void visitSwitch(SwitchStatement statement)
          
void visitSynchronizedStatement(SynchronizedStatement statement)
          
void visitTernaryExpression(TernaryExpression expression)
          
void visitThrowStatement(ThrowStatement statement)
          
void visitTryCatchFinally(TryCatchStatement statement)
          
void visitTupleExpression(TupleExpression expression)
          
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)
          
 

Constructor Detail

Key

public Key(String name, def params)


Method Detail

addGeneratedClosureConstructorCall

void addGeneratedClosureConstructorCall(ConstructorCallExpression call)


addInnerClass

boolean addInnerClass(ClassNode innerClass)


addVariableNames

void addVariableNames(Expression expression, List list)


argumentSize

static int argumentSize(Expression arguments)


argumentsUseStack

boolean argumentsUseStack(Expression arguments)
return:
true if the given argument expression requires the stack, in
which case the arguments are evaluated first, stored in the variable stack and then reloaded to make a method call


containsSpreadExpression

static boolean containsSpreadExpression(Expression arguments)


createClosureClass

ClassNode createClosureClass(ClosureExpression expression)


createInterfaceSyntheticStaticFields

void createInterfaceSyntheticStaticFields()


createReturnLHSExpression

Expression createReturnLHSExpression(Expression expression)
For assignment expressions, return a safe expression for the LHS we can use to return the value


createReusableExpression

Expression createReusableExpression(Expression expression)


createSyntheticStaticFields

void createSyntheticStaticFields()


despreadList

void despreadList(List expressions, boolean wrap)


doConvertAndCast

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


doConvertAndCast

void doConvertAndCast(ClassNode type)


doConvertAndCast

void doConvertAndCast(ClassNode type, boolean coerce)


emptyArguments

boolean emptyArguments(Expression arguments)


equalParameterTypes

boolean equalParameterTypes(def p1, def p2)


equals

public boolean equals(Object obj)


evaluateBinaryExpression

void evaluateBinaryExpression(String method, BinaryExpression expression)


evaluateBinaryExpression

void evaluateBinaryExpression(MethodCaller compareMethod, BinaryExpression expression)


evaluateBinaryExpressionWithAssignment

void evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)


evaluateCompareTo

void evaluateCompareTo(BinaryExpression expression)


evaluateEqual

void evaluateEqual(BinaryExpression expression)


evaluateExpression

void evaluateExpression(Expression expression)
param:
expression


evaluateInstanceof

void evaluateInstanceof(BinaryExpression expression)


evaluateLogicalAndExpression

void evaluateLogicalAndExpression(BinaryExpression expression)


evaluateLogicalOrExpression

void evaluateLogicalOrExpression(BinaryExpression expression)


evaluatePostfixMethod

void evaluatePostfixMethod(String method, Expression expression)


evaluatePrefixMethod

void evaluatePrefixMethod(String method, Expression expression)


execMethodAndStoreForSubscriptOperator

void execMethodAndStoreForSubscriptOperator(String method, Expression expression)


generateMopCalls

void generateMopCalls(LinkedList mopCalls, boolean useThis)
generates a Meta Object Protocoll method, that is used to call a non public method, or to make a call to super.
param:
mopCalls list of methods a mop call method should be generated for
param:
useThis true if "this" should be used for the naming


getAnnotationVisitor

AnnotationVisitor getAnnotationVisitor(AnnotatedNode targetNode, AnnotationNode an, Object visitor)


getBytecodeVersion

int getBytecodeVersion()


getClosureSharedVariables

def getClosureSharedVariables(ClosureExpression ce)


getCompileUnit

CompileUnit getCompileUnit()


getExpressionType

ClassNode getExpressionType(Expression expression)
return:
if the type of the expression can be determined at compile time
then this method returns the type - otherwise null


getLHSType

ClassNode getLHSType(Expression leftExpression)
Deduces the type name required for some casting
return:
the type of the given (LHS) expression or null if it is java.lang.Object or it cannot be deduced


getMopMethodName

public static String getMopMethodName(MethodNode method, boolean useThis)
creates a MOP method name from a method
param:
method the method to be called by the mop method
param:
useThis if true, then it is a call on "this", "super" else
return:
the mop method name


getOutermostClass

ClassNode getOutermostClass()


getStaticFieldName

static String getStaticFieldName(ClassNode type)


hashCode

public int hashCode()


isComparisonExpression

boolean isComparisonExpression(Expression expression)


isFieldOrVariable

boolean isFieldOrVariable(String name)
return:
true if the given name is a local variable or a field


isGroovyObject

boolean isGroovyObject(Expression objectExpression)


isHolderVariable

boolean isHolderVariable(Expression expression)


isInClosure

boolean isInClosure()


isInClosureConstructor

boolean isInClosureConstructor()


isInScriptBody

boolean isInScriptBody()
return:
true if we are in a script body, where all variables declared are no longer
local variables but are properties


isInnerClass

boolean isInnerClass()


isMopMethod

public static boolean isMopMethod(String methodName)
method to determine if a method is a MOP method. This is done by the method name. If the name starts with "this$" or "super$", then it is a MOP method
param:
methodName name of the method to test
return:
true if the method is a MOP method


isNonStaticField

boolean isNonStaticField(Expression expression)
return:
true if the given expression represents a non-static field


isPopRequired

boolean isPopRequired(Expression expression)
return:
true if this expression will have left a value on the stack
that must be popped


isStaticContext

boolean isStaticContext()


isStaticInvocation

boolean isStaticInvocation(MethodCallExpression call)


isStaticMethod

boolean isStaticMethod()


isSuperExpression

static boolean isSuperExpression(Expression expression)


isThisExpression

static boolean isThisExpression(Expression expression)


isThisOrSuper

static boolean isThisOrSuper(Expression expression)


isValidTypeForCast

boolean isValidTypeForCast(ClassNode type)


isVargs

boolean isVargs(def p)


load

void load(Expression exp)


loadDynamicName

void loadDynamicName(Expression name)


loadInstanceField

public void loadInstanceField(FieldExpression fldExp)
RHS instance field. should move most of the code in the BytecodeHelper
param:
fldExp


loadStaticField

public void loadStaticField(FieldExpression fldExp)
param:
fldExp


loadThis

void loadThis()


loadThisOrOwner

void loadThisOrOwner()
Loads either this object or if we're inside a closure then load the top level owner


loadWrapper

void loadWrapper(Expression argument)


makeCall

void makeCall(Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)


makeCall

void makeCall(ClassExpression sender, Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)


makeFieldClassName

static String makeFieldClassName(ClassNode type)


makeInvokeMethodCall

void makeInvokeMethodCall(MethodCallExpression call, boolean useSuper, MethodCallerMultiAdapter adapter)


onLineNumber

void onLineNumber(ASTNode statement, String message)


processClassVariable

void processClassVariable(String name)


processFieldAccess

void processFieldAccess(String name, FieldNode field, int steps)


processStackVariable

void processStackVariable(Variable variable)


removeInitialValues

void removeInitialValues(def params)
this method is called for local variables shared between scopes. These variables must not have init values because these would then in later steps be used to create multiple versions of the same method, in this case the constructor. A closure should not have more than one constructor!


sortConstructors

List sortConstructors(ConstructorCallExpression call, ClassNode callNode)


storeStaticField

public void storeStaticField(FieldExpression expression)


storeThisInstanceField

public void storeThisInstanceField(FieldExpression expression)


throwException

void throwException(String s)


usesSuper

public static boolean usesSuper(MethodCallExpression call)


usesSuper

public static boolean usesSuper(PropertyExpression pe)


visitAndAutoboxBoolean

void visitAndAutoboxBoolean(Expression expression)


visitAnnotationAttributes

void visitAnnotationAttributes(AnnotationNode an, AnnotationVisitor av)
Generate the annotation attributes.


visitAnnotations

public void visitAnnotations(AnnotatedNode node)
Note: ignore it. Annotation generation needs the current visitor.


visitAnnotations

void visitAnnotations(AnnotatedNode targetNode, Object visitor)


visitArgumentlistExpression

public void visitArgumentlistExpression(ArgumentListExpression ale)


visitArrayAttributes

void visitArrayAttributes(AnnotationNode an, Map arrayAttr, AnnotationVisitor av)


visitArrayExpression

public void visitArrayExpression(ArrayExpression expression)


visitAssertStatement

public void visitAssertStatement(AssertStatement statement)


visitAttributeExpression

public void visitAttributeExpression(AttributeExpression expression)


visitAttributeOrProperty

void visitAttributeOrProperty(PropertyExpression expression, MethodCallerMultiAdapter adapter)


visitBinaryExpression

public void visitBinaryExpression(BinaryExpression expression)


visitBitwiseNegationExpression

public void visitBitwiseNegationExpression(BitwiseNegationExpression expression)


visitBlockStatement

public void visitBlockStatement(BlockStatement block)


visitBooleanExpression

public void visitBooleanExpression(BooleanExpression expression)
return a primitive boolean value of the BooleanExpresion.
param:
expression


visitBreakStatement

public void visitBreakStatement(BreakStatement statement)


visitBytecodeSequence

public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)


visitCaseStatement

public void visitCaseStatement(CaseStatement statement)


visitCaseStatement

public void visitCaseStatement(CaseStatement statement, int switchVariableIndex, Label thisLabel, Label nextLabel)


visitCastExpression

public void visitCastExpression(CastExpression expression)


visitClassExpression

public void visitClassExpression(ClassExpression expression)
load class object on stack


visitClosureExpression

public void visitClosureExpression(ClosureExpression expression)


visitClosureListExpression

public void visitClosureListExpression(ClosureListExpression expression)


visitConstantExpression

public void visitConstantExpression(ConstantExpression expression)
Generate byte code for constants
see:
Class field types


visitConstructor

public void visitConstructor(ConstructorNode node)


visitConstructorCallExpression

public void visitConstructorCallExpression(ConstructorCallExpression call)


visitConstructorOrMethod

void visitConstructorOrMethod(MethodNode node, boolean isConstructor)


visitContinueStatement

public void visitContinueStatement(ContinueStatement statement)


visitDeclarationExpression

public void visitDeclarationExpression(DeclarationExpression expression)


visitDoWhileLoop

public void visitDoWhileLoop(DoWhileStatement loop)


visitExpressionOrStatement

void visitExpressionOrStatement(Object o)


visitExpressionStatement

public void visitExpressionStatement(ExpressionStatement statement)


visitField

public void visitField(FieldNode fieldNode)


visitFieldExpression

public void visitFieldExpression(FieldExpression expression)


visitForLoop

public void visitForLoop(ForStatement loop)


visitForLoopWithClosureList

void visitForLoopWithClosureList(ForStatement loop)


visitGStringExpression

public void visitGStringExpression(GStringExpression expression)


visitIfElse

public void visitIfElse(IfStatement ifElse)


visitListExpression

public void visitListExpression(ListExpression expression)


visitMapEntryExpression

public void visitMapEntryExpression(MapEntryExpression expression)


visitMapExpression

public void visitMapExpression(MapExpression expression)


visitMethod

public void visitMethod(MethodNode node)


visitMethodCallExpression

public void visitMethodCallExpression(MethodCallExpression call)


visitMethodPointerExpression

public void visitMethodPointerExpression(MethodPointerExpression expression)


visitNotExpression

public void visitNotExpression(NotExpression expression)


visitOuterFieldExpression

void visitOuterFieldExpression(FieldExpression expression, ClassNode outerClassNode, int steps, boolean first)


visitParameterAnnotations

void visitParameterAnnotations(Parameter parameter, int paramNumber, MethodVisitor mv)


visitPostfixExpression

public void visitPostfixExpression(PostfixExpression expression)


visitPrefixExpression

public void visitPrefixExpression(PrefixExpression expression)


visitProperty

public void visitProperty(PropertyNode statement)


visitPropertyExpression

public void visitPropertyExpression(PropertyExpression expression)


visitRangeExpression

public void visitRangeExpression(RangeExpression expression)


visitRegexExpression

public void visitRegexExpression(RegexExpression expression)


visitReturnStatement

public void visitReturnStatement(ReturnStatement statement)


visitSpecialConstructorCall

void visitSpecialConstructorCall(ConstructorCallExpression call)


visitSpreadExpression

public void visitSpreadExpression(SpreadExpression expression)


visitSpreadMapExpression

public void visitSpreadMapExpression(SpreadMapExpression expression)


visitStatement

void visitStatement(Statement statement)


visitStaticMethodCallExpression

public void visitStaticMethodCallExpression(StaticMethodCallExpression call)


visitSwitch

public void visitSwitch(SwitchStatement statement)


visitSynchronizedStatement

public void visitSynchronizedStatement(SynchronizedStatement statement)


visitTernaryExpression

public void visitTernaryExpression(TernaryExpression expression)


visitThrowStatement

public void visitThrowStatement(ThrowStatement statement)


visitTryCatchFinally

public void visitTryCatchFinally(TryCatchStatement statement)


visitTupleExpression

public void visitTupleExpression(TupleExpression expression)


visitTupleExpression

void visitTupleExpression(TupleExpression expression, boolean useWrapper)


visitUnaryMinusExpression

public void visitUnaryMinusExpression(UnaryMinusExpression expression)


visitUnaryPlusExpression

public void visitUnaryPlusExpression(UnaryPlusExpression expression)


visitVariableExpression

public void visitVariableExpression(VariableExpression expression)
Visits a bare (unqualified) variable expression.


visitWhileLoop

public void visitWhileLoop(WhileStatement loop)