-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
ConstructorsResolutionTest.java
116 lines (93 loc) · 5.93 KB
/
ConstructorsResolutionTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.github.javaparser.symbolsolver.resolution;
import com.github.javaparser.JavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.resolution.declarations.ResolvedConstructorDeclaration;
import com.github.javaparser.resolution.types.ResolvedPrimitiveType;
import com.github.javaparser.symbolsolver.JavaSymbolSolver;
import com.github.javaparser.symbolsolver.javaparser.Navigator;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserConstructorDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.SymbolReference;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ConstructorsResolutionTest extends AbstractResolutionTest {
@Test
public void solveNormalConstructor() {
CompilationUnit cu = parseSample("ConstructorCalls");
ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "ConstructorCalls");
MethodDeclaration method = Navigator.demandMethod(clazz, "testNormalConstructor");
ObjectCreationExpr objectCreationExpr = method.getBody().get().getStatements().get(0)
.asExpressionStmt().getExpression().asObjectCreationExpr();
SymbolReference<ResolvedConstructorDeclaration> ref =
JavaParserFacade.get(new ReflectionTypeSolver()).solve(objectCreationExpr);
ConstructorDeclaration actualConstructor =
((JavaParserConstructorDeclaration) ref.getCorrespondingDeclaration()).getWrappedNode();
ClassOrInterfaceDeclaration otherClazz = Navigator.demandClass(cu, "OtherClass");
ConstructorDeclaration expectedConstructor = Navigator.demandConstructor(otherClazz, 0);
assertEquals(expectedConstructor, actualConstructor);
}
@Test
public void solveInnerClassConstructor() {
CompilationUnit cu = parseSample("ConstructorCalls");
ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "ConstructorCalls");
MethodDeclaration method = Navigator.demandMethod(clazz, "testInnerClassConstructor");
ObjectCreationExpr objectCreationExpr = method.getBody().get().getStatements().get(1)
.asExpressionStmt().getExpression().asObjectCreationExpr();
SymbolReference<ResolvedConstructorDeclaration> ref =
JavaParserFacade.get(new ReflectionTypeSolver()).solve(objectCreationExpr);
ConstructorDeclaration actualConstructor =
((JavaParserConstructorDeclaration) ref.getCorrespondingDeclaration()).getWrappedNode();
ClassOrInterfaceDeclaration innerClazz = Navigator.demandClass(cu, "OtherClass.InnerClass");
ConstructorDeclaration expectedConstructor = Navigator.demandConstructor(innerClazz, 0);
assertEquals(expectedConstructor, actualConstructor);
}
@Test
public void solveInnerClassConstructorWithNewScope() {
CompilationUnit cu = parseSample("ConstructorCalls");
ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "ConstructorCalls");
MethodDeclaration method = Navigator.demandMethod(clazz, "testInnerClassConstructorWithNewScope");
ObjectCreationExpr objectCreationExpr = method.getBody().get().getStatements().get(0)
.asExpressionStmt().getExpression().asObjectCreationExpr();
SymbolReference<ResolvedConstructorDeclaration> ref =
JavaParserFacade.get(new ReflectionTypeSolver()).solve(objectCreationExpr);
ConstructorDeclaration actualConstructor =
((JavaParserConstructorDeclaration) ref.getCorrespondingDeclaration()).getWrappedNode();
ClassOrInterfaceDeclaration innerClazz = Navigator.demandClass(cu, "OtherClass.InnerClass");
ConstructorDeclaration expectedConstructor = Navigator.demandConstructor(innerClazz, 0);
assertEquals(expectedConstructor, actualConstructor);
}
@Test
public void solveInnerInnerClassConstructor() {
CompilationUnit cu = parseSample("ConstructorCalls");
ClassOrInterfaceDeclaration clazz = Navigator.demandClass(cu, "ConstructorCalls");
MethodDeclaration method = Navigator.demandMethod(clazz, "testInnerInnerClassConstructor");
ObjectCreationExpr objectCreationExpr = method.getBody().get().getStatements().get(0)
.asExpressionStmt().getExpression().asObjectCreationExpr();
SymbolReference<ResolvedConstructorDeclaration> ref =
JavaParserFacade.get(new ReflectionTypeSolver()).solve(objectCreationExpr);
ConstructorDeclaration actualConstructor =
((JavaParserConstructorDeclaration) ref.getCorrespondingDeclaration()).getWrappedNode();
ClassOrInterfaceDeclaration innerClazz = Navigator.demandClass(cu, "OtherClass.InnerClass.InnerInnerClass");
ConstructorDeclaration expectedConstructor = Navigator.demandConstructor(innerClazz, 0);
assertEquals(expectedConstructor, actualConstructor);
}
@Test
public void solveEnumConstructorForJavaParserClass() {
// configure symbol solver before parsing
JavaParser.getStaticConfiguration().setSymbolResolver(new JavaSymbolSolver(new ReflectionTypeSolver()));
CompilationUnit cu = parseSample("ConstructorCallsEnum");
EnumDeclaration enumDeclaration = Navigator.demandEnum(cu, "ConstructorCallsEnum");
ConstructorDeclaration constructor = (ConstructorDeclaration) enumDeclaration.getChildNodes().get(2);
ResolvedConstructorDeclaration resolvedConstructor = constructor.resolve();
assertEquals("ConstructorCallsEnum", resolvedConstructor.declaringType().getName());
assertEquals(1, resolvedConstructor.getNumberOfParams());
assertEquals("i", resolvedConstructor.getParam(0).getName());
assertEquals(ResolvedPrimitiveType.INT, resolvedConstructor.getParam(0).getType());
}
}