Top Description Inners Fields Constructors Methods
org.codehaus.groovy.control

public Class ResolveVisitor

extends ClassCodeExpressionTransformer
Class Inheritance
Known Direct Subclasses
org.codehaus.groovy.tools.javac.JavaAwareResolveVisitor
Imports
groovy.lang.Tuple2, org.apache.groovy.ast.tools.ExpressionUtils, org.codehaus.groovy.GroovyBugError, org.codehaus.groovy.ast.ASTNode, .AnnotatedNode, .AnnotationNode, .ClassCodeExpressionTransformer, .ClassHelper, .ClassNode, .CompileUnit, .CompileUnit.ConstructedOuterNestedClassNode, .DynamicVariable, .FieldNode, .GenericsType, .GenericsType.GenericsTypeName, .ImportNode, .InnerClassNode, .MethodNode, .ModuleNode, .Parameter, .PropertyNode, .Variable, .VariableScope, org.codehaus.groovy.ast.expr.AnnotationConstantExpression, .ArgumentListExpression, .BinaryExpression, .CastExpression, .ClassExpression, .ClosureExpression, .ConstantExpression, .ConstructorCallExpression, .DeclarationExpression, .Expression, .ListExpression, .MapEntryExpression, .MapExpression, .MethodCallExpression, .PropertyExpression, .SpreadMapExpression, .VariableExpression, org.codehaus.groovy.ast.stmt.BlockStatement, .CatchStatement, .ForStatement, .Statement, org.codehaus.groovy.control.ClassNodeResolver.LookupResult, org.codehaus.groovy.runtime.memoize.UnlimitedConcurrentCache, org.codehaus.groovy.syntax.Types, org.codehaus.groovy.transform.trait.Traits, org.codehaus.groovy.vmplugin.VMPluginFactory, org.objectweb.asm.Opcodes, java.lang.annotation.Annotation, .Retention, .RetentionPolicy, java.lang.reflect.Modifier, java.util.Collections, .HashMap, .HashSet, .LinkedHashMap, .LinkedList, .List, .ListIterator, .Map, .Objects, .Set, java.util.function.BiConsumer, .Predicate

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

Nested and Inner Type Summary

Modifier and TypeClass and Description
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.ConstructedNestedClass

A ConstructedNestedClass consists of an outer class and a name part, denoting a nested class with an unknown number of levels down.

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

Modifier and TypeField and Description
private static final String
private static final String
private boolean
private ClassNodeResolver
private final CompilationUnit
private ClassNode
private MethodNode
private VariableScope
private ImportNode
private static final Map<String, Set<String>>
public static final String[]
public static final String[]
private final Set<FieldNode>
private Map<GenericsType.GenericsTypeName, GenericsType>
private boolean
private boolean
private boolean
private final Map<ClassNode, ClassNode>
public static final String
private SourceUnit

Constructor Summary

AccessConstructor and Description
public
ResolveVisitor(final CompilationUnit compilationUnit)

Method Summary

Modifier and TypeMethod and Description
private void
ambiguousClass(final ClassNode type, final ClassNode iType, final String name)

private void
private void
checkCyclicInheritance(final ClassNode node, final ClassNode type)

private void
private static Expression
correctClassClassChain(final PropertyExpression pe)

Returns "Type" class expression for "Type.class" or "pack.Type.class".

private boolean
private static Map<String, ClassNode>
findHierClasses(final ClassNode currentClass)

private void
private void
private static String
protected SourceUnit
private boolean
isRepeatable(final Class<?> annTypeClass)

private static boolean
isVisibleNestedClass(final ClassNode innerType, final ClassNode outerType)

private static String
private static Tuple2<StringBuilder, Boolean>
makeClassName(final boolean doInitialClassTest, final StringBuilder name, final String varName)

private static String
protected boolean
resolve(final ClassNode type)

protected boolean
resolve(final ClassNode type, final boolean testModuleImports, final boolean testDefaultImports, final boolean testStaticInnerClasses)

private boolean
protected boolean
protected boolean
protected boolean
resolveFromDefaultImports(final ClassNode type, final String[] packagePrefixes)

protected boolean
resolveFromModule(final ClassNode type, final boolean testModuleImports)

protected boolean
private void
private void
resolveGenericsHeader(final GenericsType[] types, final GenericsType rootType, final int level)

private boolean
resolveGenericsType(final GenericsType genericsType)

private boolean
protected boolean
private void
resolveOrFail(final ClassNode type, final ASTNode node)

private void
resolveOrFail(final ClassNode type, final String msg, final ASTNode node)

private void
resolveOrFail(final ClassNode type, final String msg, final ASTNode node, final boolean preferImports)

private void
protected boolean
protected boolean
private boolean
private static void
resolveWildcardBounding(final GenericsType[] typeArguments, final ClassNode type)

For cases like "Foo<?

public void
setClassNodeResolver(final ClassNodeResolver classNodeResolver)

private boolean
setRedirect(final ClassNode type, final ClassNode classToCheck)

public void
startResolving(final ClassNode node, final SourceUnit source)

private static boolean
public Expression
protected Expression
protected Expression
protected Expression
protected Expression
protected Expression
private static Expression
protected Expression
protected Expression
protected Expression
private CompileUnit.ConstructedOuterNestedClassNode
tryToConstructOuterNestedClassNode(final ClassNode type, final ClassNode outerClassNode, final BiConsumer<CompileUnit.ConstructedOuterNestedClassNode, ClassNode> setRedirectListener)

Deprecated as a consequence of CompileUnit.ConstructedOuterNestedClassNode being deprecated.
private CompileUnit.ConstructedOuterNestedClassNode
tryToConstructOuterNestedClassNodeForBaseType(final CompileUnit compileUnit, final String typeName, final ClassNode cn, final BiConsumer<CompileUnit.ConstructedOuterNestedClassNode, ClassNode> setRedirectListener)

Deprecated as a consequence of CompileUnit.ConstructedOuterNestedClassNode being deprecated.
private CompileUnit.ConstructedOuterNestedClassNode
tryToConstructOuterNestedClassNodeViaStaticImport(final CompileUnit compileUnit, final ImportNode importNode, final String typeName, final BiConsumer<CompileUnit.ConstructedOuterNestedClassNode, ClassNode> setRedirectListener)

Deprecated as a consequence of CompileUnit.ConstructedOuterNestedClassNode being deprecated.
public void
public void
public void
public void
protected void
public void
public void
public void
Inherited from org.codehaus.groovy.ast.ClassCodeExpressionTransformer:
setSourcePositionvisitAnnotationvisitAssertStatementvisitCaseStatementvisitDoWhileLoopvisitExpressionStatementvisitIfElsevisitReturnStatementvisitSwitchvisitSynchronizedStatementvisitThrowStatementvisitWhileLoop