@Override protected int getNumberOfTypes(CompilationUnit compilationUnit) { List<AnnotationExpr> annotations = compilationUnit.getTypes().get(0).getAnnotations(); return annotations.size(); }
@Override public ResolvedParameterDeclaration getParam(int i) { if (i < 0 || i >= getNumberOfParams()) { throw new IllegalArgumentException(String.format("No param with index %d. Number of params: %d", i, getNumberOfParams())); } return new JavaParserParameterDeclaration(wrappedNode.getParameters().get(i), typeSolver); }
@Override public ResolvedParameterDeclaration getParam(int i) { if (i < 0 || i >= getNumberOfParams()) { throw new IllegalArgumentException(String.format("No param with index %d. Number of params: %d", i, getNumberOfParams())); } return new JavaParserParameterDeclaration(wrappedNode.getParameters().get(i), typeSolver); }
@Override public ResolvedParameterDeclaration getParam(int i) { if (i < 0 || i >= getNumberOfParams()) { throw new IllegalArgumentException(String.format("No param with index %d. Number of params: %d", i, getNumberOfParams())); } return new JavaParserParameterDeclaration(wrappedNode.getParameters().get(i), typeSolver); }
@Override public ResolvedParameterDeclaration getParam(int i) { if (i < 0 || i >= getNumberOfParams()) { throw new IllegalArgumentException(String.format("No param with index %d. Number of params: %d", i, getNumberOfParams())); } return new JavaParserParameterDeclaration(wrappedNode.getParameters().get(i), typeSolver); }
@Override public ResolvedType getSpecifiedException(int index) { if (index < 0 || index >= getNumberOfSpecifiedExceptions()) { throw new IllegalArgumentException(String.format("No exception with index %d. Number of exceptions: %d", index, getNumberOfSpecifiedExceptions())); } return JavaParserFacade.get(typeSolver) .convert(wrappedNode.getThrownExceptions().get(index), wrappedNode); } }
public static int getParamPos(Node node) { if (getParentNode(node) instanceof MethodCallExpr) { MethodCallExpr call = (MethodCallExpr) getParentNode(node); for (int i = 0; i < call.getArguments().size(); i++) { if (call.getArguments().get(i) == node) return i; } throw new IllegalStateException(); } else { throw new IllegalArgumentException(); } }
@Override public ResolvedType visit(FieldDeclaration node, Boolean solveLambdas) { if (node.getVariables().size() == 1) { return node.getVariables().get(0).accept(this, solveLambdas); } else { throw new IllegalArgumentException("Cannot resolve the type of a field with multiple variable declarations. Pick one"); } } }
@Override public ResolvedType getSpecifiedException(int index) { if (index < 0 || index >= getNumberOfSpecifiedExceptions()) { throw new IllegalArgumentException(String.format("No exception with index %d. Number of exceptions: %d", index, getNumberOfSpecifiedExceptions())); } return JavaParserFacade.get(typeSolver).convert(wrappedNode.getThrownExceptions() .get(index), wrappedNode); } }
public static int getParamPos(Node node) { if (requireParentNode(node) instanceof MethodCallExpr) { MethodCallExpr call = (MethodCallExpr) requireParentNode(node); for (int i = 0; i < call.getArguments().size(); i++) { if (call.getArguments().get(i) == node) return i; } throw new IllegalStateException(); } throw new IllegalArgumentException(); }
@Override public ResolvedType getSpecifiedException(int index) { if (index < 0 || index >= getNumberOfSpecifiedExceptions()) { throw new IllegalArgumentException(String.format("No exception with index %d. Number of exceptions: %d", index, getNumberOfSpecifiedExceptions())); } return JavaParserFacade.get(typeSolver).convert(wrappedNode.getThrownExceptions() .get(index), wrappedNode); }
@Override public ResolvedType getSpecifiedException(int index) { if (index < 0 || index >= getNumberOfSpecifiedExceptions()) { throw new IllegalArgumentException(String.format("No exception with index %d. Number of exceptions: %d", index, getNumberOfSpecifiedExceptions())); } return JavaParserFacade.get(typeSolver) .convert(wrappedNode.getThrownExceptions().get(index), wrappedNode); }
@Override public ResolvedType visit(FieldDeclaration node, Boolean solveLambdas) { if (node.getVariables().size() == 1) { return node.getVariables().get(0).accept(this, solveLambdas); } else { throw new IllegalArgumentException("Cannot resolve the type of a field with multiple variable declarations. Pick one"); } } }
@Override public ResolvedType visit(VariableDeclarationExpr node, Boolean solveLambdas) { if (node.getVariables().size() != 1) { throw new UnsupportedOperationException(); } return facade.convertToUsageVariableType(node.getVariables().get(0)); }
public String getName() { if (declaration instanceof MethodDeclaration) { return ((MethodDeclaration) declaration).getNameAsString(); } else if (declaration instanceof FieldDeclaration) { NodeList<VariableDeclarator> vars = ((FieldDeclaration) declaration).getVariables(); if (vars.size() == 1) { return vars.get(0).getNameAsString(); } } return null; } }
@Override public ResolvedReferenceType getSuperClass() { if (wrappedNode.getExtendedTypes().isEmpty()) { return object(); } else { return toReferenceType(wrappedNode.getExtendedTypes().get(0)); } }
@Test public void lambdaMapParameter() throws ParseException { CompilationUnit cu = parseSample("Lambda"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Agenda"); MethodDeclaration method = Navigator.demandMethod(clazz, "lambdaMap"); ReturnStmt returnStmt = Navigator.findReturnStmt(method); MethodCallExpr methodCallExpr = (MethodCallExpr) returnStmt.getExpression().get(); Expression expression = methodCallExpr.getArguments().get(0); JavaParserFacade javaParserFacade = JavaParserFacade.get(new ReflectionTypeSolver()); ResolvedType type = javaParserFacade.getType(expression); assertEquals("java.util.function.Function<? super java.lang.String, ? extends java.lang.String>", type.describe()); }
@Test public void issue235() throws ParseException { CompilationUnit cu = parseSample("Issue235"); ClassOrInterfaceDeclaration cls = Navigator.demandClassOrInterface(cu, "Foo"); TypeSolver typeSolver = new ReflectionTypeSolver(); JavaParserFacade javaParserFacade = JavaParserFacade.get(typeSolver); MethodDeclaration m = Navigator.demandMethod(cls, this.method); ExpressionStmt stmt = (ExpressionStmt) m.getBody().get().getStatements().get(0); ObjectCreationExpr expression = (ObjectCreationExpr) stmt.getExpression(); Assert.assertNotNull(javaParserFacade.convertToUsage(expression.getType())); } }
@Test public void resolveUsageOfGenericFieldSimpleCase() throws ParseException { CompilationUnit cu = parseSample("Generics"); ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "SomeCollection"); MethodDeclaration method = Navigator.demandMethod(clazz, "foo1"); ExpressionStmt stmt = (ExpressionStmt) method.getBody().get().getStatements().get(0); Expression expression = stmt.getExpression(); ResolvedType type = JavaParserFacade.get(new ReflectionTypeSolver()).getType(expression); assertEquals(false, type.isTypeVariable()); assertEquals("java.lang.String", type.describe()); }
@Test public void resolveLambdaType() throws ParseException, IOException { CompilationUnit cu = parseSample("Navigator"); com.github.javaparser.ast.body.ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "Navigator"); MethodDeclaration method = Navigator.demandMethod(clazz, "findType"); MethodCallExpr callToFilter = Navigator.findMethodCall(method, "filter"); Expression lambdaExpr = callToFilter.getArguments().get(0); String pathToJar = adaptPath("src/test/resources/javaparser-core-2.1.0.jar"); TypeSolver typeSolver = new CombinedTypeSolver(new ReflectionTypeSolver(), new JarTypeSolver(pathToJar)); ResolvedType typeOfLambdaExpr = JavaParserFacade.get(typeSolver).getType(lambdaExpr); assertEquals("java.util.function.Predicate<? super com.github.javaparser.ast.body.TypeDeclaration>", typeOfLambdaExpr.describe()); }