JavaSymbol best = selectBest(env, callSite.symbol, argTypes, symbol, bestSoFar.symbol, autoboxing); if(best == symbol) { bestSoFar = Resolution.resolution(best); bestSoFar.type = resolveTypeSubstitution(((JavaType.MethodJavaType) best.type).resultType, site); JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) best;
if (symbol.kind < JavaSymbol.ERRONEOUS) { return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol);
return resolution; } else { return Resolution.resolution(new AccessErrorJavaSymbol(symbol, symbols.unknownType));
if (symbol.kind < JavaSymbol.ERRONEOUS) { return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol);
return resolution; } else { return Resolution.resolution(new AccessErrorJavaSymbol(symbol, Symbols.unknownType));
JavaSymbol best = selectBest(env, site.getSymbol(), argTypes, symbol, bestSoFar.symbol, autoboxing); if(best == symbol) { bestSoFar = Resolution.resolution(best); bestSoFar.type = resolveTypeSubstitution(((JavaType.MethodJavaType) best.type).resultType, site); JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) best;
if (symbol.kind < JavaSymbol.ERRONEOUS) { return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol);
if (symbol.kind < JavaSymbol.ERRONEOUS) { return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol);
/** * @param kind subset of {@link JavaSymbol#VAR}, {@link JavaSymbol#TYP} */ public Resolution findIdentInType(Env env, JavaSymbol.TypeJavaSymbol site, String name, int kind) { Resolution bestSoFar = unresolved(); Resolution resolution; JavaSymbol symbol; if ((kind & JavaSymbol.VAR) != 0) { resolution = findField(env, site, name, site); if (resolution.symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return resolution; } else if (resolution.symbol.kind < bestSoFar.symbol.kind) { bestSoFar = resolution; } } if ((kind & JavaSymbol.TYP) != 0) { symbol = findMemberType(env, site, name, site); if (symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol); } } return bestSoFar; }
/** * Finds method matching given name and types of arguments. */ public Resolution findMethod(Env env, String name, List<JavaType> argTypes, List<JavaType> typeParamTypes) { Resolution bestSoFar = unresolved(); Env env1 = env; while (env1.outer() != null) { Resolution res = findMethod(env1, env1.enclosingClass().getType(), name, argTypes, typeParamTypes); if (res.symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return res; } else if (res.symbol.kind < bestSoFar.symbol.kind) { bestSoFar = res; } env1 = env1.outer; } JavaSymbol sym = findInStaticImport(env, name, JavaSymbol.MTH); if (sym.kind < JavaSymbol.ERRONEOUS) { // symbol exists return Resolution.resolution(sym); } else if (sym.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(sym); } return bestSoFar; }
/** * @param kind subset of {@link JavaSymbol#VAR}, {@link JavaSymbol#TYP} */ public Resolution findIdentInType(Env env, JavaSymbol.TypeJavaSymbol site, String name, int kind) { Resolution bestSoFar = unresolved(); Resolution resolution; JavaSymbol symbol; if ((kind & JavaSymbol.VAR) != 0) { resolution = findField(env, site, name, site); if (resolution.symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return resolution; } else if (resolution.symbol.kind < bestSoFar.symbol.kind) { bestSoFar = resolution; } } if ((kind & JavaSymbol.TYP) != 0) { symbol = findMemberType(env, site, name, site); if (symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol); } } return bestSoFar; }
/** * @param kind subset of {@link JavaSymbol#VAR}, {@link JavaSymbol#TYP} */ public Resolution findIdentInType(Env env, JavaSymbol.TypeJavaSymbol site, String name, int kind) { Resolution bestSoFar = unresolved(); Resolution resolution; JavaSymbol symbol; if ((kind & JavaSymbol.VAR) != 0) { resolution = findField(env, site, name, site); if (resolution.symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return resolution; } else if (resolution.symbol.kind < bestSoFar.symbol.kind) { bestSoFar = resolution; } } if ((kind & JavaSymbol.TYP) != 0) { symbol = findMemberType(env, site, name, site); if (symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return Resolution.resolution(symbol); } else if (symbol.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(symbol); } } return bestSoFar; }
/** * Finds method matching given name and types of arguments. */ public Resolution findMethod(Env env, String name, List<JavaType> argTypes, List<JavaType> typeParamTypes) { Resolution bestSoFar = unresolved(); Env env1 = env; while (env1.outer != null) { Resolution res = findMethod(env1, env1.enclosingClass.getType(), name, argTypes, typeParamTypes); if (res.symbol.kind < JavaSymbol.ERRONEOUS) { // symbol exists return res; } else if (res.symbol.kind < bestSoFar.symbol.kind) { bestSoFar = res; } env1 = env1.outer; } JavaSymbol sym = findInStaticImport(env, name, JavaSymbol.MTH); if (sym.kind < JavaSymbol.ERRONEOUS) { // symbol exists return Resolution.resolution(sym); } else if (sym.kind < bestSoFar.symbol.kind) { bestSoFar = Resolution.resolution(sym); } return bestSoFar; }
private Resolve.Resolution getSymbolOfMemberSelectExpression(MemberSelectExpressionTree mse, int kind, Resolve.Env resolveEnv) { int expressionKind = JavaSymbol.TYP; if ((kind & JavaSymbol.VAR) != 0) { expressionKind |= JavaSymbol.VAR; } if ((kind & JavaSymbol.TYP) != 0) { expressionKind |= JavaSymbol.PCK; } //TODO: resolveAs result is only used here, should probably be refactored JavaSymbol site = resolveAs(mse.expression(), expressionKind, resolveEnv); if (site.kind == JavaSymbol.VAR) { return resolve.findIdentInType(resolveEnv, getType(mse.expression()).symbol, mse.identifier().name(), JavaSymbol.VAR); } if (site.kind == JavaSymbol.TYP) { return resolve.findIdentInType(resolveEnv, (JavaSymbol.TypeJavaSymbol) site, mse.identifier().name(), kind); } if (site.kind == JavaSymbol.PCK) { return Resolve.Resolution.resolution(resolve.findIdentInPackage(site, mse.identifier().name(), kind)); } return resolve.unresolved(); }
private Resolve.Resolution getSymbolOfMemberSelectExpression(MemberSelectExpressionTree mse, int kind, Resolve.Env resolveEnv) { int expressionKind = JavaSymbol.TYP; if ((kind & JavaSymbol.VAR) != 0) { expressionKind |= JavaSymbol.VAR; } if ((kind & JavaSymbol.TYP) != 0) { expressionKind |= JavaSymbol.PCK; } //TODO: resolveAs result is only used here, should probably be refactored JavaSymbol site = resolveAs(mse.expression(), expressionKind, resolveEnv); if (site.kind == JavaSymbol.VAR) { return resolve.findIdentInType(resolveEnv, getType(mse.expression()).symbol, mse.identifier().name(), JavaSymbol.VAR); } if (site.kind == JavaSymbol.TYP) { return resolve.findIdentInType(resolveEnv, (JavaSymbol.TypeJavaSymbol) site, mse.identifier().name(), kind); } if (site.kind == JavaSymbol.PCK) { return Resolve.Resolution.resolution(resolve.findIdentInPackage(site, mse.identifier().name(), kind)); } return resolve.unresolved(); }
private Resolve.Resolution getSymbolOfMemberSelectExpression(MemberSelectExpressionTree mse, int kind, Resolve.Env resolveEnv) { int expressionKind = JavaSymbol.TYP; if ((kind & JavaSymbol.VAR) != 0) { expressionKind |= JavaSymbol.VAR; } if ((kind & JavaSymbol.TYP) != 0) { expressionKind |= JavaSymbol.PCK; } //TODO: resolveAs result is only used here, should probably be refactored JavaSymbol site = resolveAs(mse.expression(), expressionKind, resolveEnv); if (site.kind == JavaSymbol.VAR) { return resolve.findIdentInType(resolveEnv, getType(mse.expression()).symbol, mse.identifier().name(), JavaSymbol.VAR); } if (site.kind == JavaSymbol.TYP) { return resolve.findIdentInType(resolveEnv, (JavaSymbol.TypeJavaSymbol) site, mse.identifier().name(), kind); } if (site.kind == JavaSymbol.PCK) { return Resolve.Resolution.resolution(resolve.findIdentInPackage(site, mse.identifier().name(), kind)); } return resolve.unresolved(); }
private Resolution resolveField(Env env, JavaSymbol.TypeJavaSymbol site, JavaSymbol.TypeJavaSymbol owner, JavaSymbol field) { if (isAccessible(env, site, field)) { Resolution resolution = Resolution.resolution(field); if (field.type != null) { // type may not have been resolved yet, but will be in 2nd pass resolution.type = typeSubstitutionSolver.applySiteSubstitution(field.type, owner.type); } return resolution; } return Resolution.resolution(new AccessErrorJavaSymbol(field, Symbols.unknownType)); }
private Resolution resolveField(Env env, JavaSymbol.TypeJavaSymbol site, JavaSymbol.TypeJavaSymbol owner, JavaSymbol field) { if (isAccessible(env, site, field)) { Resolution resolution = Resolution.resolution(field); if (field.type != null) { // type may not have been resolved yet, but will be in 2nd pass resolution.type = typeSubstitutionSolver.applySiteSubstitution(field.type, owner.type); } return resolution; } return Resolution.resolution(new AccessErrorJavaSymbol(field, Symbols.unknownType)); }