public SymbolReference<ResolvedConstructorDeclaration> solve(ExplicitConstructorInvocationStmt explicitConstructorInvocationStmt, boolean solveLambdas) { List<ResolvedType> argumentTypes = new LinkedList<>(); List<LambdaArgumentTypePlaceholder> placeholders = new LinkedList<>(); solveArguments(explicitConstructorInvocationStmt, explicitConstructorInvocationStmt.getArguments(), solveLambdas, argumentTypes, placeholders); Optional<ClassOrInterfaceDeclaration> optAncestor = explicitConstructorInvocationStmt.getAncestorOfType(ClassOrInterfaceDeclaration.class); if (!optAncestor.isPresent()) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } ClassOrInterfaceDeclaration classNode = optAncestor.get(); ResolvedTypeDeclaration typeDecl = null; if (!explicitConstructorInvocationStmt.isThis()) { ResolvedType classDecl = JavaParserFacade.get(typeSolver).convert(classNode.getExtendedTypes(0), classNode); if (classDecl.isReferenceType()) { typeDecl = classDecl.asReferenceType().getTypeDeclaration(); } } else { SymbolReference<ResolvedTypeDeclaration> sr = JavaParserFactory.getContext(classNode, typeSolver).solveType(classNode.getNameAsString(), typeSolver); if (sr.isSolved()) { typeDecl = sr.getCorrespondingDeclaration(); } } if (typeDecl == null) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } SymbolReference<ResolvedConstructorDeclaration> res = ConstructorResolutionLogic.findMostApplicable(((ResolvedClassDeclaration) typeDecl).getConstructors(), argumentTypes, typeSolver); for (LambdaArgumentTypePlaceholder placeholder : placeholders) { placeholder.setMethod(res); } return res; }
return; NodeList<Expression> args = ((ExplicitConstructorInvocationStmt)(stmts.get(0))).getArguments(); args.set(0, new NameExpr("type")); args.set(1, new NameExpr("casImpl"));
public SymbolReference<ResolvedConstructorDeclaration> solve(ExplicitConstructorInvocationStmt explicitConstructorInvocationStmt, boolean solveLambdas) { List<ResolvedType> argumentTypes = new LinkedList<>(); List<LambdaArgumentTypePlaceholder> placeholders = new LinkedList<>(); solveArguments(explicitConstructorInvocationStmt, explicitConstructorInvocationStmt.getArguments(), solveLambdas, argumentTypes, placeholders); Optional<ClassOrInterfaceDeclaration> optAncestor = explicitConstructorInvocationStmt.findAncestor(ClassOrInterfaceDeclaration.class); if (!optAncestor.isPresent()) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } ClassOrInterfaceDeclaration classNode = optAncestor.get(); ResolvedTypeDeclaration typeDecl = null; if (!explicitConstructorInvocationStmt.isThis()) { ResolvedType classDecl = JavaParserFacade.get(typeSolver).convert(classNode.getExtendedTypes(0), classNode); if (classDecl.isReferenceType()) { typeDecl = classDecl.asReferenceType().getTypeDeclaration(); } } else { SymbolReference<ResolvedTypeDeclaration> sr = JavaParserFactory.getContext(classNode, typeSolver).solveType(classNode.getNameAsString()); if (sr.isSolved()) { typeDecl = sr.getCorrespondingDeclaration(); } } if (typeDecl == null) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } SymbolReference<ResolvedConstructorDeclaration> res = ConstructorResolutionLogic.findMostApplicable(((ResolvedClassDeclaration) typeDecl).getConstructors(), argumentTypes, typeSolver); for (LambdaArgumentTypePlaceholder placeholder : placeholders) { placeholder.setMethod(res); } return res; }
public SymbolReference<ResolvedConstructorDeclaration> solve(ExplicitConstructorInvocationStmt explicitConstructorInvocationStmt, boolean solveLambdas) { List<ResolvedType> argumentTypes = new LinkedList<>(); List<LambdaArgumentTypePlaceholder> placeholders = new LinkedList<>(); solveArguments(explicitConstructorInvocationStmt, explicitConstructorInvocationStmt.getArguments(), solveLambdas, argumentTypes, placeholders); Optional<ClassOrInterfaceDeclaration> optAncestor = explicitConstructorInvocationStmt.getAncestorOfType(ClassOrInterfaceDeclaration.class); if (!optAncestor.isPresent()) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } ClassOrInterfaceDeclaration classNode = optAncestor.get(); ResolvedTypeDeclaration typeDecl = null; if (!explicitConstructorInvocationStmt.isThis()) { ResolvedType classDecl = JavaParserFacade.get(typeSolver).convert(classNode.getExtendedTypes(0), classNode); if (classDecl.isReferenceType()) { typeDecl = classDecl.asReferenceType().getTypeDeclaration(); } } else { SymbolReference<ResolvedTypeDeclaration> sr = JavaParserFactory.getContext(classNode, typeSolver).solveType(classNode.getNameAsString(), typeSolver); if (sr.isSolved()) { typeDecl = sr.getCorrespondingDeclaration(); } } if (typeDecl == null) { return SymbolReference.unsolved(ResolvedConstructorDeclaration.class); } SymbolReference<ResolvedConstructorDeclaration> res = ConstructorResolutionLogic.findMostApplicable(((ResolvedClassDeclaration) typeDecl).getConstructors(), argumentTypes, typeSolver); for (LambdaArgumentTypePlaceholder placeholder : placeholders) { placeholder.setMethod(res); } return res; }