public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { return findMethod(env, site, name, argTypes, typeParams, false); }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { return findMethod(env, site, site, name, argTypes, typeParams); }
private Resolution findConstructor(Env env, JavaType site, List<JavaType> argTypes, List<JavaType> typeParams, boolean autoboxing) { return findMethod(env, site, site, "<init>", argTypes, typeParams, autoboxing); }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { return findMethod(env, site, site, name, argTypes, typeParams, false); }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { return findMethod(env, site, site, name, argTypes, typeParams); }
private Resolution findMethodByStrictThenLooseInvocation(Env env, JavaType callSite, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { // JLS8 - §5.3 searching by strict invocation, then loose invocation Resolution bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, false, false); // searching for a specific method applicable with fixed arity and loose invocation if (!argTypes.isEmpty() && bestSoFar.symbol.kind >= JavaSymbol.ERRONEOUS) { // retry with loose invocation bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, true, false); } if(bestSoFar.symbol.kind >= JavaSymbol.ERRONEOUS) { // loose invocation and var arity bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, true, true); } return bestSoFar; }
private Resolution findMethodByStrictThenLooseInvocation(Env env, JavaType callSite, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) { // JLS8 - §5.3 searching by strict invocation, then loose invocation Resolution bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, false, false); // searching for a specific method applicable with fixed arity and loose invocation if (!argTypes.isEmpty() && bestSoFar.symbol.kind >= JavaSymbol.ERRONEOUS) { // retry with loose invocation bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, true, false); } if(bestSoFar.symbol.kind >= JavaSymbol.ERRONEOUS) { // loose invocation and var arity bestSoFar = findMethod(env, callSite, site, name, argTypes, typeParams, true, true); } return bestSoFar; }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes) { return findMethod(env, site, name, argTypes, ImmutableList.<JavaType>of(), false); } public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams) {
private Resolution findMethod(Env env, JavaType callSite, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams, boolean looseInvocation, boolean varArity) { return findMethod(env, callSite, site, name, argTypes, typeParams, looseInvocation, varArity, new HashSet<>()); }
private Resolution findMethod(Env env, JavaType callSite, JavaType site, String name, List<JavaType> argTypes, List<JavaType> typeParams, boolean looseInvocation, boolean varArity) { return findMethod(env, callSite, site, name, argTypes, typeParams, looseInvocation, varArity, new HashSet<>()); }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes) { return findMethod(env, site, site, name, argTypes, Collections.emptyList()); }
public Resolution findMethod(Env env, JavaType site, String name, List<JavaType> argTypes) { return findMethod(env, site, site, name, argTypes, ImmutableList.<JavaType>of(), false); }
Resolution findMethodReference(Env env, List<JavaType> samMethodArgs, MethodReferenceTree methodRefTree) { Tree expression = methodRefTree.expression(); JavaType expressionType = (JavaType) ((AbstractTypedTree) expression).symbolType(); String methodName = getMethodReferenceMethodName(methodRefTree.method().name()); Resolution resolution = findMethod(env, expressionType, methodName, samMethodArgs); // JLS §15.13.1 if (secondSearchRequired(expression, expressionType, resolution.symbol, samMethodArgs)) { resolution = findMethod(env, expressionType, methodName, samMethodArgs.stream().skip(1).collect(Collectors.toList())); } return resolution; }
Resolution findMethodReference(Env env, List<JavaType> samMethodArgs, MethodReferenceTree methodRefTree) { Tree expression = methodRefTree.expression(); JavaType expressionType = (JavaType) ((AbstractTypedTree) expression).symbolType(); String methodName = getMethodReferenceMethodName(methodRefTree.method().name()); Resolution resolution = findMethod(env, expressionType, methodName, samMethodArgs); // JLS §15.13.1 if (secondSearchRequired(expression, expressionType, resolution.symbol, samMethodArgs)) { resolution = findMethod(env, expressionType, methodName, samMethodArgs.stream().skip(1).collect(Collectors.toList())); } return resolution; }
private JavaSymbol resolveConstructorSymbol(IdentifierTree identifier, Resolve.Env methodEnv, List<JavaType> argTypes) { JavaSymbol symbol = resolve.findMethod(methodEnv, (JavaType) identifier.symbolType(), "<init>", argTypes).symbol(); associateReference(identifier, symbol); return symbol; }
private JavaType binaryExpressionType(BinaryExpressionTree tree, JavaType left, JavaType right) { JavaSymbol symbol = resolve.findMethod(semanticModel.getEnv(tree), symbols.predefClass.type, tree.operatorToken().text(), ImmutableList.of(left, right)).symbol(); if (symbol.kind != JavaSymbol.MTH) { // not found return Symbols.unknownType; } return ((MethodJavaType) symbol.type).resultType; }
private JavaType binaryExpressionType(BinaryExpressionTree tree, JavaType left, JavaType right) { JavaSymbol symbol = resolve.findMethod(semanticModel.getEnv(tree), symbols.predefClass.type, tree.operatorToken().text(), ImmutableList.of(left, right)).symbol(); if (symbol.kind != JavaSymbol.MTH) { // not found return Symbols.unknownType; } return ((MethodJavaType) symbol.type).resultType; }
private JavaSymbol resolveConstructorSymbol(IdentifierTree identifier, Resolve.Env methodEnv, List<JavaType> argTypes) { JavaSymbol symbol = resolve.findMethod(methodEnv, (JavaType) identifier.symbolType(), "<init>", argTypes).symbol(); associateReference(identifier, symbol); return symbol; }
private Resolve.Resolution resolveConstructorSymbol(IdentifierTree identifier, Type type, Resolve.Env methodEnv, List<JavaType> argTypes, List<JavaType> typeArgumentsTypes) { Resolve.Resolution resolution = resolve.findMethod(methodEnv, (JavaType) type, "<init>", argTypes, typeArgumentsTypes); JavaSymbol symbol = resolution.symbol(); inferArgumentTypes(argTypes, resolution); ((IdentifierTreeImpl) identifier).setSymbol(symbol); associateReference(identifier, symbol); return resolution; }
private Resolve.Resolution resolveConstructorSymbol(IdentifierTree identifier, Type type, Resolve.Env methodEnv, List<JavaType> argTypes, List<JavaType> typeArgumentsTypes) { Resolve.Resolution resolution = resolve.findMethod(methodEnv, (JavaType) type, "<init>", argTypes, typeArgumentsTypes); JavaSymbol symbol = resolution.symbol(); inferArgumentTypes(argTypes, resolution); ((IdentifierTreeImpl) identifier).setSymbol(symbol); associateReference(identifier, symbol); return resolution; }