private void assertCanSolveGenericMethodCallMustUseProvidedTypeArgs(String callMethodName) throws ParseException { MethodCallExpr methodCallExpr = getMethodCallExpr("genericMethodTest", callMethodName); CombinedTypeSolver typeSolver = createTypeSolver(); MethodCallExprContext context = new MethodCallExprContext(methodCallExpr, typeSolver); Optional<MethodUsage> ref = context.solveMethodAsUsage(callMethodName, Collections.emptyList(), typeSolver); assertTrue(ref.isPresent()); assertEquals("MethodCalls", ref.get().declaringType().getQualifiedName()); assertEquals(Collections.singletonList("java.lang.Integer"), ref.get().typeParametersMap().getTypes().stream().map(ty -> ty.asReferenceType().describe()).collect(Collectors.toList())); }
private void assertCanSolveGenericMethodCallCanInferFromArguments(String callMethodName) throws ParseException { MethodCallExpr methodCallExpr = getMethodCallExpr("genericMethodTest", callMethodName); CombinedTypeSolver typeSolver = createTypeSolver(); MethodCallExprContext context = new MethodCallExprContext(methodCallExpr, typeSolver); ResolvedReferenceTypeDeclaration stringType = typeSolver.solveType("java.lang.String"); List<ResolvedType> argumentsTypes = new ArrayList<>(); argumentsTypes.add(new ReferenceTypeImpl(stringType, typeSolver)); Optional<MethodUsage> ref = context.solveMethodAsUsage(callMethodName, argumentsTypes, typeSolver); assertTrue(ref.isPresent()); assertEquals("MethodCalls", ref.get().declaringType().getQualifiedName()); assertEquals(Collections.singletonList("java.lang.String"), ref.get().typeParametersMap().getTypes().stream().map(ty -> ty.asReferenceType().describe()).collect(Collectors.toList())); } }
@Test public void solveNestedMethodCallExprContextWithoutScope() throws ParseException { MethodCallExpr methodCallExpr = getMethodCallExpr("bar1", "foo"); CombinedTypeSolver typeSolver = createTypeSolver(); Context context = new MethodCallExprContext(methodCallExpr, typeSolver); Optional<MethodUsage> ref = context.solveMethodAsUsage("foo", Collections.emptyList(), typeSolver); assertTrue(ref.isPresent()); assertEquals("MethodCalls", ref.get().declaringType().getQualifiedName()); }
return new ClassOrInterfaceDeclarationContext((ClassOrInterfaceDeclaration) node, typeSolver); } else if (node instanceof MethodCallExpr) { return new MethodCallExprContext((MethodCallExpr) node, typeSolver); } else if (node instanceof EnumDeclaration) { return new EnumDeclarationContext((EnumDeclaration) node, typeSolver);
return new ClassOrInterfaceDeclarationContext((ClassOrInterfaceDeclaration) node, typeSolver); } else if (node instanceof MethodCallExpr) { return new MethodCallExprContext((MethodCallExpr) node, typeSolver); } else if (node instanceof EnumDeclaration) { return new EnumDeclarationContext((EnumDeclaration) node, typeSolver);
return new ClassOrInterfaceDeclarationContext((ClassOrInterfaceDeclaration) node, typeSolver); } else if (node instanceof MethodCallExpr) { return new MethodCallExprContext((MethodCallExpr) node, typeSolver); } else if (node instanceof EnumDeclaration) { return new EnumDeclarationContext((EnumDeclaration) node, typeSolver);