org.codehaus.groovy.control
Class ResolveVisitor

java.lang.Object
  extended by org.codehaus.groovy.ast.CodeVisitorSupport
      extended by org.codehaus.groovy.ast.ClassCodeVisitorSupport
          extended by org.codehaus.groovy.ast.ClassCodeExpressionTransformer
              extended by org.codehaus.groovy.control.ResolveVisitor
All Implemented Interfaces:
ExpressionTransformer, GroovyClassVisitor, GroovyCodeVisitor
Direct Known Subclasses:
JavaAwareResolveVisitor

public class ResolveVisitor
extends ClassCodeExpressionTransformer

Visitor to resolve Types and convert VariableExpression to ClassExpressions if needed. The ResolveVisitor will try to find the Class for a ClassExpression and prints an error if it fails to do so. Constructions like C[], foo as C, (C) foo will force creation of a ClassExpression for C

Note: the method to start the resolving is startResolving(ClassNode, SourceUnit).

Author:
Jochen Theodorou

Nested Class Summary
private static class ResolveVisitor.ConstructedClassWithPackage
          we use ConstructedClassWithPackage to limit the resolving the compiler does when combining package names and class names.
private static class ResolveVisitor.LowerCaseClass
          we use LowerCaseClass to limit the resolving the compiler does for vanilla names starting with a lower case letter.
 
Field Summary
private  java.util.Map cachedClasses
           
private  CompilationUnit compilationUnit
           
private  ClassNode currentClass
           
private  VariableScope currentScope
           
static java.lang.String[] DEFAULT_IMPORTS
           
private  java.util.Map genericParameterNames
           
private  boolean inClosure
           
private  boolean inPropertyExpression
           
private  boolean isSpecialConstructorCall
           
private  boolean isTopLevelProperty
           
private static java.lang.Object NO_CLASS
           
private static java.lang.Object SCRIPT
           
private  SourceUnit source
           
 
Constructor Summary
ResolveVisitor(CompilationUnit cu)
           
 
Method Summary
private  void ambiguousClass(ClassNode type, ClassNode iType, java.lang.String name)
           
private  Expression correctClassClassChain(PropertyExpression pe)
           
protected  SourceUnit getSourceUnit()
           
private  long getTimeStamp(java.lang.Class cls)
           
private  boolean isSourceNewer(java.net.URL source, java.lang.Class cls)
           
private  java.lang.String lookupClassName(PropertyExpression pe)
           
private  java.lang.String replaceLastPoint(java.lang.String name)
           
private  boolean resolve(ClassNode type)
           
private  boolean resolve(ClassNode type, boolean testModuleImports, boolean testDefaultImports, boolean testStaticInnerClasses)
           
private  boolean resolveAliasFromModule(ClassNode type)
           
private  boolean resolveFromClassCache(ClassNode type)
           
private  boolean resolveFromCompileUnit(ClassNode type)
           
private  boolean resolveFromDefaultImports(ClassNode type, boolean testDefaultImports)
           
private  boolean resolveFromModule(ClassNode type, boolean testModuleImports)
           
private  boolean resolveFromStaticInnerClasses(ClassNode type, boolean testStaticInnerClasses)
           
private  void resolveGenericsHeader(GenericsType[] types)
           
private  void resolveGenericsType(GenericsType genericsType)
           
private  void resolveGenericsTypes(GenericsType[] types)
           
private  void resolveOrFail(ClassNode type, ASTNode node)
           
private  void resolveOrFail(ClassNode type, ASTNode node, boolean prefereImports)
           
private  void resolveOrFail(ClassNode type, java.lang.String msg, ASTNode node)
           
private  boolean resolveToClass(ClassNode type)
           
private  boolean resolveToInner(ClassNode type)
           
private  boolean resolveToInnerEnum(ClassNode type)
           
private  boolean resolveToScript(ClassNode type)
           
private  void setClass(ClassNode n, java.lang.Class cls)
           
 void startResolving(ClassNode node, SourceUnit source)
           
private  boolean testVanillaNameForClass(java.lang.String name)
           
 Expression transform(Expression exp)
          Transforms the given expression into another expression
protected  Expression transformAnnotationConstantExpression(AnnotationConstantExpression ace)
           
protected  Expression transformBinaryExpression(BinaryExpression be)
           
protected  Expression transformClosureExpression(ClosureExpression ce)
           
protected  Expression transformConstructorCallExpression(ConstructorCallExpression cce)
           
protected  Expression transformDeclarationExpression(DeclarationExpression de)
           
protected  Expression transformMethodCallExpression(MethodCallExpression mce)
           
protected  Expression transformPropertyExpression(PropertyExpression pe)
           
protected  Expression transformVariableExpression(VariableExpression ve)
           
 void visitAnnotations(AnnotatedNode node)
           
 void visitBlockStatement(BlockStatement block)
           
 void visitCatchStatement(CatchStatement cs)
           
 void visitClass(ClassNode node)
           
protected  void visitConstructorOrMethod(MethodNode node, boolean isConstructor)
           
 void visitField(FieldNode node)
           
 void visitForLoop(ForStatement forLoop)
           
 void visitProperty(PropertyNode node)
           
 
Methods inherited from class org.codehaus.groovy.ast.ClassCodeExpressionTransformer
visitAssertStatement, visitCaseStatement, visitDoWhileLoop, visitExpressionStatement, visitIfElse, visitReturnStatement, visitSwitch, visitSynchronizedStatement, visitThrowStatement, visitWhileLoop
 
Methods inherited from class org.codehaus.groovy.ast.ClassCodeVisitorSupport
addError, visitBreakStatement, visitClassCodeContainer, visitConstructor, visitContinueStatement, visitMethod, visitStatement, visitTryCatchFinally
 
Methods inherited from class org.codehaus.groovy.ast.CodeVisitorSupport
visitArgumentlistExpression, visitArrayExpression, visitAttributeExpression, visitBinaryExpression, visitBitwiseNegationExpression, visitBooleanExpression, visitBytecodeExpression, visitCastExpression, visitClassExpression, visitClosureExpression, visitClosureListExpression, visitConstantExpression, visitConstructorCallExpression, visitDeclarationExpression, visitFieldExpression, visitGStringExpression, visitListExpression, visitListOfExpressions, visitMapEntryExpression, visitMapExpression, visitMethodCallExpression, visitMethodPointerExpression, visitNotExpression, visitPostfixExpression, visitPrefixExpression, visitPropertyExpression, visitRangeExpression, visitRegexExpression, visitShortTernaryExpression, visitSpreadExpression, visitSpreadMapExpression, visitStaticMethodCallExpression, visitTernaryExpression, visitTupleExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitVariableExpression
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

currentClass

private ClassNode currentClass

DEFAULT_IMPORTS

public static final java.lang.String[] DEFAULT_IMPORTS

compilationUnit

private CompilationUnit compilationUnit

cachedClasses

private java.util.Map cachedClasses

NO_CLASS

private static final java.lang.Object NO_CLASS

SCRIPT

private static final java.lang.Object SCRIPT

source

private SourceUnit source

currentScope

private VariableScope currentScope

isTopLevelProperty

private boolean isTopLevelProperty

inPropertyExpression

private boolean inPropertyExpression

inClosure

private boolean inClosure

isSpecialConstructorCall

private boolean isSpecialConstructorCall

genericParameterNames

private java.util.Map genericParameterNames
Constructor Detail

ResolveVisitor

public ResolveVisitor(CompilationUnit cu)
Method Detail

startResolving

public void startResolving(ClassNode node,
                           SourceUnit source)

visitConstructorOrMethod

protected void visitConstructorOrMethod(MethodNode node,
                                        boolean isConstructor)
Overrides:
visitConstructorOrMethod in class ClassCodeExpressionTransformer

visitField

public void visitField(FieldNode node)
Specified by:
visitField in interface GroovyClassVisitor
Overrides:
visitField in class ClassCodeExpressionTransformer

visitProperty

public void visitProperty(PropertyNode node)
Specified by:
visitProperty in interface GroovyClassVisitor
Overrides:
visitProperty in class ClassCodeExpressionTransformer

resolveToInner

private boolean resolveToInner(ClassNode type)

resolveToInnerEnum

private boolean resolveToInnerEnum(ClassNode type)

resolveOrFail

private void resolveOrFail(ClassNode type,
                           java.lang.String msg,
                           ASTNode node)

resolveOrFail

private void resolveOrFail(ClassNode type,
                           ASTNode node,
                           boolean prefereImports)

resolveOrFail

private void resolveOrFail(ClassNode type,
                           ASTNode node)

resolve

private boolean resolve(ClassNode type)

resolve

private boolean resolve(ClassNode type,
                        boolean testModuleImports,
                        boolean testDefaultImports,
                        boolean testStaticInnerClasses)

resolveFromClassCache

private boolean resolveFromClassCache(ClassNode type)

getTimeStamp

private long getTimeStamp(java.lang.Class cls)

isSourceNewer

private boolean isSourceNewer(java.net.URL source,
                              java.lang.Class cls)

resolveToScript

private boolean resolveToScript(ClassNode type)

replaceLastPoint

private java.lang.String replaceLastPoint(java.lang.String name)

resolveFromStaticInnerClasses

private boolean resolveFromStaticInnerClasses(ClassNode type,
                                              boolean testStaticInnerClasses)

resolveFromDefaultImports

private boolean resolveFromDefaultImports(ClassNode type,
                                          boolean testDefaultImports)

resolveFromCompileUnit

private boolean resolveFromCompileUnit(ClassNode type)

setClass

private void setClass(ClassNode n,
                      java.lang.Class cls)

ambiguousClass

private void ambiguousClass(ClassNode type,
                            ClassNode iType,
                            java.lang.String name)

resolveAliasFromModule

private boolean resolveAliasFromModule(ClassNode type)

resolveFromModule

private boolean resolveFromModule(ClassNode type,
                                  boolean testModuleImports)

resolveToClass

private boolean resolveToClass(ClassNode type)

transform

public Expression transform(Expression exp)
Description copied from interface: ExpressionTransformer
Transforms the given expression into another expression

Specified by:
transform in interface ExpressionTransformer
Overrides:
transform in class ClassCodeExpressionTransformer

lookupClassName

private java.lang.String lookupClassName(PropertyExpression pe)

correctClassClassChain

private Expression correctClassClassChain(PropertyExpression pe)

transformPropertyExpression

protected Expression transformPropertyExpression(PropertyExpression pe)

transformVariableExpression

protected Expression transformVariableExpression(VariableExpression ve)

testVanillaNameForClass

private boolean testVanillaNameForClass(java.lang.String name)

transformBinaryExpression

protected Expression transformBinaryExpression(BinaryExpression be)

transformClosureExpression

protected Expression transformClosureExpression(ClosureExpression ce)

transformConstructorCallExpression

protected Expression transformConstructorCallExpression(ConstructorCallExpression cce)

transformMethodCallExpression

protected Expression transformMethodCallExpression(MethodCallExpression mce)

transformDeclarationExpression

protected Expression transformDeclarationExpression(DeclarationExpression de)

transformAnnotationConstantExpression

protected Expression transformAnnotationConstantExpression(AnnotationConstantExpression ace)

visitAnnotations

public void visitAnnotations(AnnotatedNode node)
Overrides:
visitAnnotations in class ClassCodeExpressionTransformer

visitClass

public void visitClass(ClassNode node)
Specified by:
visitClass in interface GroovyClassVisitor
Overrides:
visitClass in class ClassCodeVisitorSupport

visitCatchStatement

public void visitCatchStatement(CatchStatement cs)
Specified by:
visitCatchStatement in interface GroovyCodeVisitor
Overrides:
visitCatchStatement in class ClassCodeVisitorSupport

visitForLoop

public void visitForLoop(ForStatement forLoop)
Specified by:
visitForLoop in interface GroovyCodeVisitor
Overrides:
visitForLoop in class ClassCodeExpressionTransformer

visitBlockStatement

public void visitBlockStatement(BlockStatement block)
Specified by:
visitBlockStatement in interface GroovyCodeVisitor
Overrides:
visitBlockStatement in class ClassCodeVisitorSupport

getSourceUnit

protected SourceUnit getSourceUnit()
Specified by:
getSourceUnit in class ClassCodeVisitorSupport

resolveGenericsTypes

private void resolveGenericsTypes(GenericsType[] types)

resolveGenericsHeader

private void resolveGenericsHeader(GenericsType[] types)

resolveGenericsType

private void resolveGenericsType(GenericsType genericsType)


Copyright © ${year} The Codehaus. All Rights Reserved.