Static support methods for StaticTypeCheckingVisitor.
| Modifiers | Name | Description |
|---|---|---|
protected static ClassNode |
ArrayList_TYPE |
|
protected static ClassNode |
Collection_TYPE |
|
protected static Comparator |
DGM_METHOD_NODE_COMPARATOR |
This comparator is used when we return the list of methods from DGM which name correspond to a given name. |
protected static ClassNode |
Deprecated_TYPE |
|
protected static StaticTypeCheckingSupport.ExtensionMethodCache |
EXTENSION_METHOD_CACHE |
|
protected static ClassNode |
GSTRING_STRING_CLASSNODE |
|
protected static ClassNode |
Matcher_TYPE |
|
protected static Map |
NUMBER_TYPES |
|
protected static ClassNode |
UNKNOWN_PARAMETER_TYPE |
This is for internal use only. |
| Type | Name and description |
|---|---|
static int |
allParametersAndArgumentsMatch(Parameter[] params, ClassNode[] args)Checks that arguments and parameter types match. |
static boolean |
checkCompatibleAssignmentTypes(ClassNode left, ClassNode right)Returns true or false depending on whether the right classnode can be assigned to the left classnode. |
static boolean |
checkCompatibleAssignmentTypes(ClassNode left, ClassNode right, Expression rightExpression) |
static boolean |
checkCompatibleAssignmentTypes(ClassNode left, ClassNode right, Expression rightExpression, boolean allowConstructorCoercion) |
static List |
chooseBestMethod(ClassNode receiver, Collection methods, ClassNode... args) |
static Set |
collectAllInterfaces(ClassNode node) |
static Object |
evaluateExpression(Expression expr, CompilerConfiguration config) |
static List |
findDGMMethodsByNameAndArguments(ClassNode receiver, String name, ClassNode[] args)Returns true if the provided class node, when considered as a receiver of a message or as a parameter, is using a placeholder in its generics type. |
static List |
findDGMMethodsByNameAndArguments(ClassLoader loader, ClassNode receiver, String name, ClassNode[] args) |
static List |
findDGMMethodsByNameAndArguments(ClassNode receiver, String name, ClassNode[] args, List methods) |
static List |
findDGMMethodsByNameAndArguments(ClassLoader loader, ClassNode receiver, String name, ClassNode[] args, List methods) |
protected static Set |
findDGMMethodsForClassNode(ClassNode clazz, String name)@deprecated Use findDGMMethodsForClassNode(ClassLoader,ClassNode,String) instead |
protected static Set |
findDGMMethodsForClassNode(ClassLoader loader, ClassNode clazz, String name) |
protected static void |
findDGMMethodsForClassNode(ClassNode clazz, String name, TreeSet accumulator)@deprecated Use findDGMMethodsForClassNode(ClassLoader, ClassNode, String, TreeSet) instead |
protected static void |
findDGMMethodsForClassNode(ClassLoader loader, ClassNode clazz, String name, TreeSet accumulator) |
protected static Variable |
findTargetVariable(VariableExpression ve)Given a variable expression, returns the ultimately accessed variable. |
protected static GenericsType |
fullyResolve(GenericsType gt, Map placeholders) |
protected static ClassNode |
fullyResolveType(ClassNode type, Map placeholders) |
static boolean |
implementsInterfaceOrIsSubclassOf(ClassNode type, ClassNode superOrInterface) |
protected static boolean |
isArrayAccessExpression(Expression expression)Returns true for expressions of the form x[...] |
static boolean |
isAssignment(int op) |
static boolean |
isBeingCompiled(ClassNode node) |
static boolean |
isClassClassNodeWrappingConcreteType(ClassNode classNode) |
static boolean |
isGStringOrGStringStringLUB(ClassNode node)A helper method that can be used to evaluate expressions as found in annotation parameters. |
static boolean |
isParameterizedWithGStringOrGStringString(ClassNode node) |
static boolean |
isParameterizedWithString(ClassNode node) |
static boolean |
isUsingGenericsOrIsArrayUsingGenerics(ClassNode cn) |
static boolean |
isUsingUncheckedGenerics(ClassNode node) |
static boolean |
isWildcardLeftHandSide(ClassNode node)Tells if a class is one of the "accept all" classes as the left hand side of an assignment. |
static boolean |
isWithCall(String name, Expression callArguments)Called on method call checks in order to determine if a method call corresponds to the idiomatic o.with { ... } structure |
static boolean |
missesGenericsTypes(ClassNode cn) |
static Parameter[] |
parameterizeArguments(ClassNode receiver, MethodNode m)Given a parameter, builds a new parameter for which the known generics placeholders are resolved. |
static ClassNode |
resolveClassNodeGenerics(Map resolvedPlaceholders, Map placeholdersFromContext, ClassNode currentType) |
protected static boolean |
typeCheckMethodArgumentWithGenerics(ClassNode parameterType, ClassNode argumentType, boolean lastArg) |
protected static boolean |
typeCheckMethodsWithGenerics(ClassNode receiver, ClassNode[] arguments, MethodNode candidateMethod) |
This comparator is used when we return the list of methods from DGM which name correspond to a given name. As we also lookup for DGM methods of superclasses or interfaces, it may be possible to find two methods which have the same name and the same arguments. In that case, we should not add the method from superclass or interface otherwise the system won't be able to select the correct method, resulting in an ambiguous method selection for similar methods.
This is for internal use only. When an argument method is null, we cannot determine its type, so we use this one as a wildcard.
Checks that arguments and parameter types match.
params - method parametersargs - type argumentsReturns true or false depending on whether the right classnode can be assigned to the left classnode. This method should not add errors by itself: we let the caller decide what to do if an incompatible assignment is found.
left - the class to be assigned toright - the assignee classReturns true if the provided class node, when considered as a receiver of a message or as a parameter, is using a placeholder in its generics type. In this case, we're facing unchecked generics and type checking is limited (ex: void foo(Set s) { s.keySet() }
node - the node to testGiven a variable expression, returns the ultimately accessed variable.
ve - a variable expressionReturns true for expressions of the form x[...]
expression - an expressionA helper method that can be used to evaluate expressions as found in annotation parameters. For example, it will evaluate a constant, be it referenced directly as an integer or as a reference to a field. If this method throws an exception, then the expression cannot be evaluated on its own.
expr - the expression to be evaluatedconfig - the compiler configurationTells if a class is one of the "accept all" classes as the left hand side of an assignment.
node - the classnode to testCalled on method call checks in order to determine if a method call corresponds to the idiomatic o.with { ... } structure
name - name of the method calledcallArguments - arguments of the methodGiven a parameter, builds a new parameter for which the known generics placeholders are resolved.
genericFromReceiver - resolved generics from the receiver of the messageplaceholdersFromContext, - resolved generics from the method contextmethodParameter - the method parameter for which we want to resolve generic typesparamType - the (unresolved) type of the method parameter