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\$
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)
|
protected static boolean
|
containsSpreadExpression(Expression arguments)
|
protected ClassNode
|
createClosureClass(ClosureExpression expression)
|
protected void
|
createInterfaceSyntheticStaticFields()
|
protected Expression
|
createReturnLHSExpression(Expression expression)
|
protected Expression
|
createReusableExpression(Expression expression)
|
protected void
|
createSyntheticStaticFields()
|
protected void
|
doConvertAndCast(ClassNode type, Expression expression, boolean ignoreAutoboxing, boolean forceCast, boolean coerce)
|
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)
|
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)
|
protected ClassNode
|
getLHSType(Expression leftExpression)
|
static String
|
getMopMethodName(MethodNode method, boolean useThis)
method to determine if a method is a MOP method.
|
protected ClassNode
|
getOutermostClass()
|
protected SourceUnit
|
getSourceUnit()
|
protected boolean
|
isComparisonExpression(Expression expression)
|
protected boolean
|
isFieldOrVariable(String name)
|
protected boolean
|
isGroovyObject(Expression objectExpression)
|
protected boolean
|
isInClosure()
|
protected boolean
|
isInClosureConstructor()
|
protected boolean
|
isInScriptBody()
|
static boolean
|
isMopMethod(String methodName)
|
protected boolean
|
isNotExplicitThisInClosure(boolean implicitThis)
|
protected boolean
|
isPopRequired(Expression expression)
|
protected boolean
|
isStaticMethod()
|
protected boolean
|
isValidTypeForCast(ClassNode type)
|
void
|
loadInstanceField(FieldExpression fldExp)
|
void
|
loadStaticField(FieldExpression fldExp)
@return true if we are in a script body, where all variables declared are no longer
local variables but are properties
|
protected void
|
loadThisOrOwner()
|
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)
|
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)
|
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)
|
void
|
visitClosureExpression(ClosureExpression expression)
|
void
|
visitClosureListExpression(ClosureListExpression expression)
Note: ignore it.
|
void
|
visitConstantExpression(ConstantExpression expression)
|
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)
@param expression
|
void
|
visitTryCatchFinally(TryCatchStatement statement)
|
void
|
visitTupleExpression(TupleExpression expression)
|
void
|
visitUnaryMinusExpression(UnaryMinusExpression expression)
|
void
|
visitUnaryPlusExpression(UnaryPlusExpression expression)
|
void
|
visitVariableExpression(VariableExpression expression)
load class object on stack
|
void
|
visitWhileLoop(WhileStatement loop)
|
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 |
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
-
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)
-
containsSpreadExpression
protected static boolean containsSpreadExpression(Expression arguments)
-
createClosureClass
protected ClassNode createClosureClass(ClosureExpression expression)
-
createInterfaceSyntheticStaticFields
protected void createInterfaceSyntheticStaticFields()
-
createReturnLHSExpression
protected Expression createReturnLHSExpression(Expression expression)
-
createReusableExpression
protected Expression createReusableExpression(Expression expression)
-
createSyntheticStaticFields
protected void createSyntheticStaticFields()
-
doConvertAndCast
protected void doConvertAndCast(ClassNode type, Expression expression, boolean ignoreAutoboxing, boolean forceCast, boolean coerce)
-
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)
-
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)
-
getLHSType
protected ClassNode getLHSType(Expression leftExpression)
-
getMopMethodName
public static String getMopMethodName(MethodNode method, boolean useThis)
- 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
getOutermostClass
protected ClassNode getOutermostClass()
-
getSourceUnit
protected SourceUnit getSourceUnit()
-
isComparisonExpression
protected boolean isComparisonExpression(Expression expression)
-
isFieldOrVariable
protected boolean isFieldOrVariable(String name)
-
isGroovyObject
protected boolean isGroovyObject(Expression objectExpression)
-
isInClosure
protected boolean isInClosure()
-
isInClosureConstructor
protected boolean isInClosureConstructor()
-
isInScriptBody
protected boolean isInScriptBody()
-
isMopMethod
public static boolean isMopMethod(String methodName)
-
isNotExplicitThisInClosure
protected boolean isNotExplicitThisInClosure(boolean implicitThis)
-
isPopRequired
protected boolean isPopRequired(Expression expression)
-
isStaticMethod
protected boolean isStaticMethod()
-
isValidTypeForCast
protected boolean isValidTypeForCast(ClassNode type)
-
loadInstanceField
public void loadInstanceField(FieldExpression fldExp)
-
loadStaticField
public void loadStaticField(FieldExpression fldExp)
-
- Returns:
- true if we are in a script body, where all variables declared are no longer
local variables but are properties
loadThisOrOwner
protected void loadThisOrOwner()
-
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)
-
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)
-
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)
-
visitClosureExpression
public void visitClosureExpression(ClosureExpression expression)
-
visitClosureListExpression
public void visitClosureListExpression(ClosureListExpression expression)
- Note: ignore it. Annotation generation needs the current visitor.
visitConstantExpression
public void visitConstantExpression(ConstantExpression expression)
-
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
if (isInClosure() && !implicitThis /*&& AsmClassGenerator.isThisExpression(receiver)*/) cn = cn.getOuterClass();
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)
-
- Parameters:
- expression
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)
- load class object on stack
visitWhileLoop
public void visitWhileLoop(WhileStatement loop)
-
Copyright © 2003-2010 The Codehaus. All rights reserved.