Groovy 1.7.9

org.codehaus.groovy.classgen
[Java] Class AsmClassGenerator

java.lang.Object
  org.codehaus.groovy.ast.CodeVisitorSupport
      org.codehaus.groovy.ast.ClassCodeVisitorSupport
          org.codehaus.groovy.classgen.ClassGenerator
              org.codehaus.groovy.classgen.AsmClassGenerator

public class AsmClassGenerator
extends ClassGenerator

Generates Java class versions of Groovy classes using ASM.

Authors:
James Strachan
Bing Ran
Jochen Theodorou
Alex Popescu
Alex Tkachman
Version:
\$Revision: 21652 \$


Field Summary
static boolean ASM_DEBUG

static boolean CREATE_DEBUG_INFO

static boolean CREATE_LINE_NUMBER_INFO

 
Fields inherited from class ClassGenerator
asmJDKVersion, classLoader, innerClasses
 
Method Summary
def AsmClassGenerator(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, ClassLoader classLoader, String sourceFile)

protected boolean addInnerClass(ClassNode innerClass)

protected static int argumentSize(Expression arguments)

protected 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

protected static boolean containsSpreadExpression(Expression arguments)

protected ClassNode createClosureClass(ClosureExpression expression)

protected void createInterfaceSyntheticStaticFields()

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()

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 void doConvertAndCast(ClassNode type)

protected void doConvertAndCast(ClassNode type, boolean coerce)

protected boolean emptyArguments(Expression arguments)

protected void evaluateBinaryExpression(String method, BinaryExpression expression)

protected void evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)

protected void evaluateCompareTo(BinaryExpression expression)

protected void evaluateEqual(BinaryExpression expression, boolean defineVariable)

protected void evaluateExpression(Expression expression)

@param expression

protected void evaluateInstanceof(BinaryExpression expression)

protected void evaluateLogicalAndExpression(BinaryExpression expression)

protected void evaluateLogicalOrExpression(BinaryExpression expression)

protected void evaluatePostfixMethod(String method, Expression expression)

protected void evaluatePrefixMethod(String method, Expression expression)

protected int getBytecodeVersion()

protected Parameter[] getClosureSharedVariables(ClosureExpression ce)

protected CompileUnit getCompileUnit()

protected 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

protected 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

protected ClassNode getOutermostClass()

protected SourceUnit getSourceUnit()

protected boolean isComparisonExpression(Expression expression)

protected boolean isFieldOrVariable(String name)

@return true if the given name is a local variable or a field

protected boolean isGroovyObject(Expression objectExpression)

protected boolean isInClosure()

protected boolean isInClosureConstructor()

protected boolean isInScriptBody()

@return true if we are in a script body, where all variables declared are no longer local variables but are properties

static boolean isMopMethod(String methodName)

method to determine if a method is a MOP method.

protected boolean isNotExplicitThisInClosure(boolean implicitThis)

protected boolean isPopRequired(Expression expression)

@return true if this expression will have left a value on the stack that must be popped

protected boolean isStaticMethod()

protected boolean isValidTypeForCast(ClassNode type)

void loadInstanceField(FieldExpression fldExp)

RHS instance field. should move most of the code in the BytecodeHelper

void loadStaticField(FieldExpression fldExp)

@param fldExp

protected void loadThisOrOwner()

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

protected void onLineNumber(ASTNode statement, String message)

protected void processClassVariable(String name)

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

protected void processStackVariable(Variable variable, boolean useReferenceDirectly)

void storeStaticField(FieldExpression expression)

void storeThisInstanceField(FieldExpression expression)

static boolean usesSuper(MethodCallExpression call)

static boolean usesSuper(PropertyExpression pe)

protected void visitAndAutoboxBoolean(Expression expression)

void visitAnnotations(AnnotatedNode node)

Note: ignore it.

void visitArgumentlistExpression(ArgumentListExpression ale)

void visitArrayExpression(ArrayExpression expression)

void visitAssertStatement(AssertStatement statement)

void visitAttributeExpression(AttributeExpression expression)

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)

void visitExpressionStatement(ExpressionStatement statement)

void visitField(FieldNode fieldNode)

void visitFieldExpression(FieldExpression expression)

void visitForLoop(ForStatement loop)

void visitGStringExpression(GStringExpression expression)

void visitGenericType(GenericsType genericsType)

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)

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

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 visitSpreadExpression(SpreadExpression expression)

void visitSpreadMapExpression(SpreadMapExpression expression)

protected 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 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 ClassGenerator
getClassLoader, getInnerClasses, getSourceUnit, visitBytecodeSequence
 
Methods inherited from class ClassCodeVisitorSupport
addError, getSourceUnit, visitAnnotations, visitAssertStatement, visitBlockStatement, visitBreakStatement, visitCaseStatement, visitCatchStatement, visitClass, visitClassCodeContainer, visitConstructor, visitConstructorOrMethod, visitContinueStatement, visitDoWhileLoop, visitExpressionStatement, visitField, visitForLoop, visitIfElse, visitImports, visitMethod, visitObjectInitializerStatements, visitPackage, visitProperty, visitReturnStatement, visitStatement, visitSwitch, visitSynchronizedStatement, visitThrowStatement, visitTryCatchFinally, visitVariableExpression, visitWhileLoop
 
Methods inherited from class CodeVisitorSupport
visitArgumentlistExpression, visitArrayExpression, visitAssertStatement, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBlockStatement, visitBooleanExpression, visitBreakStatement, visitBytecodeExpression, visitCaseStatement, visitCastExpression, visitCatchStatement, visitClassExpression, visitClosureExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitContinueStatement, visitDeclarationExpression, visitDoWhileLoop, visitEmptyStatement, visitExpressionStatement, visitFieldExpression, visitForLoop, visitGStringExpression, visitIfElse, visitListExpression, visitListOfExpressions, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitRegexExpression, visitReturnStatement, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitSwitch, visitSynchronizedStatement, visitTernaryExpression, visitThrowStatement, visitTryCatchFinally, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression, visitWhileLoop
 
Methods inherited from class Object
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll
 

Field Detail

ASM_DEBUG

public static final boolean ASM_DEBUG


CREATE_DEBUG_INFO

public static final boolean CREATE_DEBUG_INFO


CREATE_LINE_NUMBER_INFO

public static final boolean CREATE_LINE_NUMBER_INFO


 
Method Detail

AsmClassGenerator

public def AsmClassGenerator(SourceUnit source, GeneratorContext context, org.objectweb.asm.ClassVisitor classVisitor, ClassLoader classLoader, String sourceFile)


addInnerClass

protected boolean addInnerClass(ClassNode innerClass)


argumentSize

protected static int argumentSize(Expression arguments)


argumentsUseStack

protected boolean argumentsUseStack(Expression arguments)
Returns:
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

protected static boolean containsSpreadExpression(Expression arguments)


createClosureClass

protected ClassNode createClosureClass(ClosureExpression expression)


createInterfaceSyntheticStaticFields

protected void createInterfaceSyntheticStaticFields()


createReturnLHSExpression

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


createReusableExpression

protected Expression createReusableExpression(Expression expression)


createSyntheticStaticFields

protected void createSyntheticStaticFields()


doConvertAndCast

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


doConvertAndCast

protected void doConvertAndCast(ClassNode type)


doConvertAndCast

protected void doConvertAndCast(ClassNode type, boolean coerce)


emptyArguments

protected boolean emptyArguments(Expression arguments)


evaluateBinaryExpression

protected void evaluateBinaryExpression(String method, BinaryExpression expression)


evaluateBinaryExpressionWithAssignment

protected void evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)


evaluateCompareTo

protected void evaluateCompareTo(BinaryExpression expression)


evaluateEqual

protected void evaluateEqual(BinaryExpression expression, boolean defineVariable)


evaluateExpression

protected void evaluateExpression(Expression expression)
Parameters:
expression


evaluateInstanceof

protected void evaluateInstanceof(BinaryExpression expression)


evaluateLogicalAndExpression

protected void evaluateLogicalAndExpression(BinaryExpression expression)


evaluateLogicalOrExpression

protected void evaluateLogicalOrExpression(BinaryExpression expression)


evaluatePostfixMethod

protected void evaluatePostfixMethod(String method, Expression expression)


evaluatePrefixMethod

protected void evaluatePrefixMethod(String method, Expression expression)


getBytecodeVersion

protected int getBytecodeVersion()


getClosureSharedVariables

protected Parameter[] getClosureSharedVariables(ClosureExpression ce)


getCompileUnit

protected CompileUnit getCompileUnit()


getExpressionType

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


getLHSType

protected ClassNode getLHSType(Expression leftExpression)
Deduces the type name required for some casting
Returns:
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
Parameters:
method - the method to be called by the mop method
useThis - if true, then it is a call on "this", "super" else
Returns:
the mop method name


getOutermostClass

protected ClassNode getOutermostClass()


getSourceUnit

protected SourceUnit getSourceUnit()


isComparisonExpression

protected boolean isComparisonExpression(Expression expression)


isFieldOrVariable

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


isGroovyObject

protected boolean isGroovyObject(Expression objectExpression)


isInClosure

protected boolean isInClosure()


isInClosureConstructor

protected boolean isInClosureConstructor()


isInScriptBody

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


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$" but does not contain "$dist$", then it is an MOP method
Parameters:
methodName - name of the method to test
Returns:
true if the method is a MOP method


isNotExplicitThisInClosure

protected boolean isNotExplicitThisInClosure(boolean implicitThis)


isPopRequired

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


isStaticMethod

protected boolean isStaticMethod()


isValidTypeForCast

protected boolean isValidTypeForCast(ClassNode type)


loadInstanceField

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


loadStaticField

public void loadStaticField(FieldExpression fldExp)
Parameters:
fldExp


loadThisOrOwner

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


onLineNumber

protected void onLineNumber(ASTNode statement, String message)


processClassVariable

protected void processClassVariable(String name)


processFieldAccess

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


processStackVariable

protected void processStackVariable(Variable variable, boolean useReferenceDirectly)


storeStaticField

public void storeStaticField(FieldExpression expression)


storeThisInstanceField

public void storeThisInstanceField(FieldExpression expression)


usesSuper

public static boolean usesSuper(MethodCallExpression call)


usesSuper

public static boolean usesSuper(PropertyExpression pe)


visitAndAutoboxBoolean

protected void visitAndAutoboxBoolean(Expression expression)


visitAnnotations

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


visitArgumentlistExpression

public void visitArgumentlistExpression(ArgumentListExpression ale)


visitArrayExpression

public void visitArrayExpression(ArrayExpression expression)


visitAssertStatement

public void visitAssertStatement(AssertStatement statement)


visitAttributeExpression

public void visitAttributeExpression(AttributeExpression expression)


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.
Parameters:
expression


visitBreakStatement

public void visitBreakStatement(BreakStatement statement)


visitBytecodeExpression

public void visitBytecodeExpression(BytecodeExpression cle)


visitBytecodeSequence

public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)


visitCaseStatement

public void visitCaseStatement(CaseStatement statement)


visitCaseStatement

public void visitCaseStatement(CaseStatement statement, int switchVariableIndex, org.objectweb.asm.Label thisLabel, org.objectweb.asm.Label nextLabel)


visitCastExpression

public void visitCastExpression(CastExpression castExpression)


visitClass

public void visitClass(ClassNode classNode)


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 Also:


visitConstructor

public void visitConstructor(ConstructorNode node)


visitConstructorCallExpression

public void visitConstructorCallExpression(ConstructorCallExpression call)


visitConstructorOrMethod

protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor)


visitContinueStatement

public void visitContinueStatement(ContinueStatement statement)


visitDeclarationExpression

public void visitDeclarationExpression(DeclarationExpression expression)


visitDoWhileLoop

public void visitDoWhileLoop(DoWhileStatement loop)


visitExpressionStatement

public void visitExpressionStatement(ExpressionStatement statement)


visitField

public void visitField(FieldNode fieldNode)


visitFieldExpression

public void visitFieldExpression(FieldExpression expression)


visitForLoop

public void visitForLoop(ForStatement loop)


visitGStringExpression

public void visitGStringExpression(GStringExpression expression)


visitGenericType

public void visitGenericType(GenericsType genericsType)


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

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


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

@Deprecated
public void visitRegexExpression(RegexExpression expression)


visitReturnStatement

public void visitReturnStatement(ReturnStatement statement)


visitSpreadExpression

public void visitSpreadExpression(SpreadExpression expression)


visitSpreadMapExpression

public void visitSpreadMapExpression(SpreadMapExpression expression)


visitStatement

protected 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)


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)


 

Copyright © 2003-2010 The Codehaus. All rights reserved.