aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel
diff options
context:
space:
mode:
Diffstat (limited to 'javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel')
-rw-r--r--javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclarationTest.java776
-rw-r--r--javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclarationTest.java106
-rw-r--r--javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclarationTest.java85
-rw-r--r--javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclarationTest.java78
4 files changed, 1045 insertions, 0 deletions
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclarationTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclarationTest.java
new file mode 100644
index 000000000..8de0e2391
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionClassDeclarationTest.java
@@ -0,0 +1,776 @@
+/*
+ * Copyright 2016 Federico Tomassetti
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.github.javaparser.symbolsolver.reflectionmodel;
+
+import com.github.javaparser.ast.AccessSpecifier;
+import com.github.javaparser.resolution.declarations.*;
+import com.github.javaparser.resolution.types.ResolvedReferenceType;
+import com.github.javaparser.resolution.types.ResolvedTypeVariable;
+import com.github.javaparser.symbolsolver.AbstractTest;
+import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
+import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import org.junit.Test;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ReflectionClassDeclarationTest extends AbstractTest {
+
+ private TypeSolver typeResolver = new ReflectionTypeSolver(false);
+
+ @Test
+ public void testIsClass() {
+ class Foo<E> {
+ E field;
+ }
+ class Bar extends Foo<String> {
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+ ResolvedClassDeclaration bar = new ReflectionClassDeclaration(Bar.class, typeResolver);
+
+ assertEquals(true, foo.isClass());
+ assertEquals(true, bar.isClass());
+ }
+
+ @Test
+ public void testGetSuperclassSimpleImplicit() {
+ class Foo<E> {
+ E field;
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+
+ assertEquals(Object.class.getCanonicalName(), foo.getSuperClass().getQualifiedName());
+ assertEquals(Collections.emptyList(), foo.getSuperClass().typeParametersValues());
+ }
+
+ @Test
+ public void testGetSuperclassSimple() {
+ class Bar {
+ }
+ class Foo<E> extends Bar {
+ E field;
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+
+ assertEquals("Bar", foo.getSuperClass().getTypeDeclaration().getName());
+ assertEquals(Collections.emptyList(), foo.getSuperClass().typeParametersValues());
+ }
+
+ @Test
+ public void testGetSuperclassWithGenericSimple() {
+ class Foo<E> {
+ E field;
+ }
+ class Bar extends Foo<String> {
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+ ResolvedClassDeclaration bar = new ReflectionClassDeclaration(Bar.class, typeResolver);
+
+ assertEquals("Foo", bar.getSuperClass().getTypeDeclaration().getName());
+ assertEquals(1, bar.getSuperClass().typeParametersValues().size());
+ assertEquals(String.class.getCanonicalName(), bar.getSuperClass().typeParametersValues().get(0).asReferenceType().getQualifiedName());
+ }
+
+ @Test
+ public void testGetSuperclassWithGenericInheritanceSameName() {
+ class Foo<E> {
+ E field;
+ }
+ class Bar<E> extends Foo<E> {
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+ ResolvedClassDeclaration bar = new ReflectionClassDeclaration(Bar.class, typeResolver);
+
+ assertEquals("Foo", bar.getSuperClass().getTypeDeclaration().getName());
+ assertEquals(1, bar.getSuperClass().typeParametersValues().size());
+ assertEquals(true, bar.getSuperClass().typeParametersValues().get(0).isTypeVariable());
+ assertEquals("E", bar.getSuperClass().typeParametersValues().get(0).asTypeParameter().getName());
+ assertEquals(true, bar.getSuperClass().typeParametersValues().get(0).asTypeParameter().declaredOnType());
+ assertEquals(false, bar.getSuperClass().typeParametersValues().get(0).asTypeParameter().declaredOnMethod());
+ assertTrue(bar.getSuperClass().typeParametersValues().get(0).asTypeParameter().getQualifiedName().endsWith("Bar.E"));
+ }
+
+ @Test
+ public void testGetSuperclassWithGenericInheritanceDifferentName() {
+ class Foo<E> {
+ E field;
+ }
+ class Bar extends Foo<String> {
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+ ResolvedClassDeclaration bar = new ReflectionClassDeclaration(Bar.class, typeResolver);
+
+ assertEquals(true, foo.isClass());
+ assertEquals(true, bar.isClass());
+ }
+
+ @Test
+ public void testGetFieldDeclarationTypeVariableInheritance() {
+ class Foo<E> {
+ E field;
+ }
+ class Bar extends Foo<String> {
+ }
+
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedReferenceTypeDeclaration foo = new ReflectionClassDeclaration(Foo.class, typeResolver);
+ ResolvedReferenceTypeDeclaration bar = new ReflectionClassDeclaration(Bar.class, typeResolver);
+
+ ResolvedFieldDeclaration fooField = foo.getField("field");
+ assertEquals(true, fooField.getType().isTypeVariable());
+ assertEquals("E", fooField.getType().asTypeParameter().getName());
+
+ ResolvedFieldDeclaration barField = bar.getField("field");
+ assertEquals(true, barField.getType().isReferenceType());
+ assertEquals(String.class.getCanonicalName(), barField.getType().asReferenceType().getQualifiedName());
+ }
+
+ @Test
+ public void testGetDeclaredMethods() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedReferenceTypeDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
+ List<ResolvedMethodDeclaration> methods = string.getDeclaredMethods().stream()
+ .filter(m -> m.accessSpecifier() != AccessSpecifier.PRIVATE && m.accessSpecifier() != AccessSpecifier.DEFAULT)
+ .sorted((a, b) -> a.getName().compareTo(b.getName()))
+ .collect(Collectors.toList());
+ if (isJava9()) {
+ assertEquals(69, methods.size());
+ } else {
+ assertEquals(67, methods.size());
+ }
+ assertEquals("charAt", methods.get(0).getName());
+ assertEquals(false, methods.get(0).isAbstract());
+ assertEquals(1, methods.get(0).getNumberOfParams());
+ assertEquals("int", methods.get(0).getParam(0).getType().describe());
+ if (isJava9()) {
+ assertEquals("compareTo", methods.get(6).getName());
+ assertEquals(false, methods.get(6).isAbstract());
+ assertEquals(1, methods.get(6).getNumberOfParams());
+ assertEquals("java.lang.String", methods.get(6).getParam(0).getType().describe());
+ } else {
+ assertEquals("concat", methods.get(6).getName());
+ assertEquals(false, methods.get(6).isAbstract());
+ assertEquals(1, methods.get(6).getNumberOfParams());
+ assertEquals("java.lang.String", methods.get(6).getParam(0).getType().describe());
+ }
+ }
+
+ @Test
+ public void testGetInterfaces() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ // Serializable, Cloneable, List<E>, RandomAccess
+ assertEquals(ImmutableSet.of(Serializable.class.getCanonicalName(),
+ Cloneable.class.getCanonicalName(),
+ List.class.getCanonicalName(),
+ RandomAccess.class.getCanonicalName()),
+ arraylist.getInterfaces().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetAllInterfaces() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ // Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
+ assertEquals(ImmutableSet.of(Serializable.class.getCanonicalName(),
+ Cloneable.class.getCanonicalName(),
+ List.class.getCanonicalName(),
+ RandomAccess.class.getCanonicalName(),
+ Collection.class.getCanonicalName(),
+ Iterable.class.getCanonicalName()),
+ arraylist.getAllInterfaces().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetAllSuperclasses() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ assertEquals(ImmutableSet.of(Object.class.getCanonicalName(),
+ AbstractCollection.class.getCanonicalName(),
+ AbstractList.class.getCanonicalName()),
+ arraylist.getAllSuperClasses().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ ResolvedClassDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
+ assertEquals(ImmutableSet.of(Object.class.getCanonicalName()),
+ string.getAllSuperClasses().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetPackageName() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ assertEquals("java.util", arraylist.getPackageName());
+ ResolvedClassDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
+ assertEquals("java.lang", string.getPackageName());
+ }
+
+ @Test
+ public void testGetClassName() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ assertEquals("ArrayList", arraylist.getClassName());
+ ResolvedClassDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
+ assertEquals("String", string.getClassName());
+ }
+
+ @Test
+ public void testGetQualifiedName() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ assertEquals("java.util.ArrayList", arraylist.getQualifiedName());
+ ResolvedClassDeclaration string = new ReflectionClassDeclaration(String.class, typeResolver);
+ assertEquals("java.lang.String", string.getQualifiedName());
+ }
+
+ // solveMethod
+ // isAssignableBy
+ // canBeAssignedTo
+ // hasField
+ // solveSymbol
+ // solveType
+ // getDeclaredMethods
+ // getAllMethods
+
+ @Test
+ public void testGetAllFields() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ assertEquals(ImmutableSet.of("modCount", "serialVersionUID", "MAX_ARRAY_SIZE", "size", "elementData", "EMPTY_ELEMENTDATA", "DEFAULTCAPACITY_EMPTY_ELEMENTDATA", "DEFAULT_CAPACITY"),
+ arraylist.getAllFields().stream().map(ResolvedDeclaration::getName).collect(Collectors.toSet()));
+ }
+
+ ///
+ /// Test ancestors
+ ///
+
+ @Test
+ public void testAllAncestors() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedClassDeclaration arraylist = new ReflectionClassDeclaration(ArrayList.class, typeResolver);
+ Map<String, ResolvedReferenceType> ancestors = new HashMap<>();
+ arraylist.getAllAncestors().forEach(a -> ancestors.put(a.getQualifiedName(), a));
+ assertEquals(9, ancestors.size());
+
+ ResolvedTypeVariable typeVariable = new ResolvedTypeVariable(arraylist.getTypeParameters().get(0));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(RandomAccess.class, typeResolver), typeResolver), ancestors.get("java.util.RandomAccess"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionClassDeclaration(AbstractCollection.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.AbstractCollection"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(List.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.List"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Cloneable.class, typeResolver), typeResolver), ancestors.get("java.lang.Cloneable"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Collection.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.Collection"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionClassDeclaration(AbstractList.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.AbstractList"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeResolver), typeResolver), ancestors.get("java.lang.Object"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Iterable.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.lang.Iterable"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Serializable.class, typeResolver), typeResolver), ancestors.get("java.io.Serializable"));
+ }
+
+ @Test
+ public void testGetSuperclassWithoutTypeParameters() {
+ ReflectionClassDeclaration compilationUnit = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.CompilationUnit");
+ assertEquals("com.github.javaparser.ast.Node", compilationUnit.getSuperClass().getQualifiedName());
+ }
+
+ @Test
+ public void testGetSuperclassWithTypeParameters() {
+ ReflectionClassDeclaration compilationUnit = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+ assertEquals("com.github.javaparser.ast.body.CallableDeclaration", compilationUnit.getSuperClass().getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", compilationUnit.getSuperClass().typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.CallableDeclaration.T").get().asReferenceType().getQualifiedName());
+ }
+
+ @Test
+ public void testGetAllSuperclassesWithoutTypeParameters() {
+ ReflectionClassDeclaration cu = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.CompilationUnit");
+ assertEquals(ImmutableSet.of("com.github.javaparser.ast.Node", "java.lang.Object"), cu.getAllSuperClasses().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetAllSuperclassesWithTypeParameters() {
+ ReflectionClassDeclaration constructorDeclaration = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+ assertEquals(4, constructorDeclaration.getAllSuperClasses().size());
+ assertEquals(true, constructorDeclaration.getAllSuperClasses().stream().anyMatch(s -> s.getQualifiedName().equals("com.github.javaparser.ast.body.CallableDeclaration")));
+ assertEquals(true, constructorDeclaration.getAllSuperClasses().stream().anyMatch(s -> s.getQualifiedName().equals("com.github.javaparser.ast.body.BodyDeclaration")));
+ assertEquals(true, constructorDeclaration.getAllSuperClasses().stream().anyMatch(s -> s.getQualifiedName().equals("com.github.javaparser.ast.Node")));
+ assertEquals(true, constructorDeclaration.getAllSuperClasses().stream().anyMatch(s -> s.getQualifiedName().equals("java.lang.Object")));
+
+ ResolvedReferenceType ancestor;
+
+ ancestor = constructorDeclaration.getAllSuperClasses().get(0);
+ assertEquals("com.github.javaparser.ast.body.CallableDeclaration", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.CallableDeclaration.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = constructorDeclaration.getAllSuperClasses().get(1);
+ assertEquals("com.github.javaparser.ast.body.BodyDeclaration", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.BodyDeclaration.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = constructorDeclaration.getAllSuperClasses().get(2);
+ assertEquals("com.github.javaparser.ast.Node", ancestor.getQualifiedName());
+
+ ancestor = constructorDeclaration.getAllSuperClasses().get(3);
+ assertEquals("java.lang.Object", ancestor.getQualifiedName());
+ }
+
+ @Test
+ public void testGetInterfacesWithoutParameters() {
+ ReflectionClassDeclaration compilationUnit = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.CompilationUnit");
+ assertEquals(ImmutableSet.of(), compilationUnit.getInterfaces().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+
+ ReflectionClassDeclaration coid = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ClassOrInterfaceDeclaration");
+
+ assertEquals(ImmutableSet.of("com.github.javaparser.ast.nodeTypes.NodeWithExtends",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier",
+ "com.github.javaparser.ast.nodeTypes.NodeWithConstructors",
+ "com.github.javaparser.ast.nodeTypes.NodeWithImplements",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier",
+ "com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters",
+ "com.github.javaparser.resolution.Resolvable"),
+ coid.getInterfaces().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetInterfacesWithParameters() {
+ ReflectionClassDeclaration constructorDeclaration = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+ System.out.println(constructorDeclaration.getInterfaces().stream().map(t -> t.getQualifiedName()).collect(Collectors.toList()));
+ assertEquals(8, constructorDeclaration.getInterfaces().size());
+
+ ResolvedReferenceType interfaze;
+
+ interfaze = constructorDeclaration.getInterfaces().get(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(1);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(2);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(3);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(4);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(5);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(6);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getInterfaces().get(7);
+ assertEquals("com.github.javaparser.resolution.Resolvable", interfaze.getQualifiedName());
+ }
+
+ @Test
+ public void testGetAllInterfacesWithoutParameters() {
+ ReflectionClassDeclaration compilationUnit = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.CompilationUnit");
+ assertEquals(ImmutableSet.of("java.lang.Cloneable", "com.github.javaparser.ast.visitor.Visitable", "com.github.javaparser.ast.observer.Observable",
+ "com.github.javaparser.HasParentNode", "com.github.javaparser.ast.nodeTypes.NodeWithRange",
+ "com.github.javaparser.ast.nodeTypes.NodeWithTokenRange").stream().sorted().collect(Collectors.toList()),
+ compilationUnit.getAllInterfaces().stream().map(i -> i.getQualifiedName()).sorted().collect(Collectors.toList()));
+
+ ReflectionClassDeclaration coid = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ClassOrInterfaceDeclaration");
+ assertEquals(ImmutableSet.of("com.github.javaparser.ast.nodeTypes.NodeWithExtends",
+ "com.github.javaparser.ast.nodeTypes.NodeWithAnnotations",
+ "java.lang.Cloneable",
+ "com.github.javaparser.HasParentNode",
+ "com.github.javaparser.ast.visitor.Visitable",
+ "com.github.javaparser.ast.nodeTypes.NodeWithImplements",
+ "com.github.javaparser.ast.nodeTypes.NodeWithSimpleName",
+ "com.github.javaparser.ast.nodeTypes.NodeWithModifiers",
+ "com.github.javaparser.ast.nodeTypes.NodeWithJavadoc",
+ "com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters",
+ "com.github.javaparser.ast.nodeTypes.NodeWithMembers",
+ "com.github.javaparser.ast.observer.Observable",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers",
+ "com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier",
+ "com.github.javaparser.ast.nodeTypes.NodeWithRange",
+ "com.github.javaparser.ast.nodeTypes.NodeWithTokenRange",
+ "com.github.javaparser.ast.nodeTypes.NodeWithConstructors",
+ "com.github.javaparser.resolution.Resolvable"), coid.getAllInterfaces().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetAllInterfacesWithParameters() {
+ ReflectionClassDeclaration constructorDeclaration = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+ List<ResolvedReferenceType> interfaces = constructorDeclaration.getAllInterfaces();
+ assertEquals(34, interfaces.size());
+
+ ResolvedReferenceType interfaze;
+ int i = 0;
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithModifiers", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithModifiers.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.resolution.Resolvable", interfaze.getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("java.lang.Cloneable", interfaze.getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.HasParentNode", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.HasParentNode.T").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.observer.Observable", interfaze.getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.visitor.Visitable", interfaze.getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithRange", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithRange.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTokenRange", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTokenRange.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithAnnotations", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithAnnotations.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithModifiers", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithModifiers.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithDeclaration", interfaze.getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier.N").get().asReferenceType().getQualifiedName());
+
+ interfaze = constructorDeclaration.getAllInterfaces().get(i++);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier", interfaze.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", interfaze.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier.N").get().asReferenceType().getQualifiedName());
+ }
+
+ @Test
+ public void testGetAncestorsWithTypeParameters() {
+ ReflectionClassDeclaration constructorDeclaration = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+ assertEquals(9, constructorDeclaration.getAncestors().size());
+
+ ResolvedReferenceType ancestor;
+ List<ResolvedReferenceType> ancestors = constructorDeclaration.getAncestors();
+ ancestors.sort(Comparator.comparing(ResolvedReferenceType::getQualifiedName));
+
+ ancestor = ancestors.get(0);
+ assertEquals("com.github.javaparser.ast.body.CallableDeclaration", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.CallableDeclaration.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(1);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(2);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(3);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(4);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(5);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(6);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(7);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.get(8);
+ assertEquals("com.github.javaparser.resolution.Resolvable", ancestor.getQualifiedName());
+ }
+
+ @Test
+ public void testGetAllAncestorsWithoutTypeParameters() {
+ ReflectionClassDeclaration cu = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.CompilationUnit");
+ assertEquals(ImmutableSet.of("java.lang.Cloneable", "com.github.javaparser.ast.visitor.Visitable",
+ "com.github.javaparser.ast.observer.Observable", "com.github.javaparser.ast.Node",
+ "com.github.javaparser.ast.nodeTypes.NodeWithTokenRange", "java.lang.Object", "com.github.javaparser.HasParentNode",
+ "com.github.javaparser.ast.nodeTypes.NodeWithRange"), cu.getAllAncestors().stream().map(i -> i.getQualifiedName()).collect(Collectors.toSet()));
+ }
+
+ @Test
+ public void testGetAllAncestorsWithTypeParameters() {
+ ReflectionClassDeclaration constructorDeclaration = (ReflectionClassDeclaration) typeResolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration");
+
+ ResolvedReferenceType ancestor;
+ List<ResolvedReferenceType> ancestors = constructorDeclaration.getAllAncestors();
+ ancestors.sort(Comparator.comparing(ResolvedReferenceType::getQualifiedName));
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.HasParentNode", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.HasParentNode.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.Node", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.body.BodyDeclaration", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.BodyDeclaration.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.body.CallableDeclaration", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.CallableDeclaration.T").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithAnnotations", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithAnnotations.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithBlockStmt.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithDeclaration", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithJavadoc.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithModifiers", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithModifiers.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithRange", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithRange.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithSimpleName.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithThrownExceptions.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTokenRange", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.Node", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTokenRange.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.NodeWithTypeParameters.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAbstractModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithAccessModifiers.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithFinalModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPrivateModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithProtectedModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithPublicModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStaticModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier", ancestor.getQualifiedName());
+ assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", ancestor.typeParametersMap().getValueBySignature("com.github.javaparser.ast.nodeTypes.modifiers.NodeWithStrictfpModifier.N").get().asReferenceType().getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.observer.Observable", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.ast.visitor.Visitable", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("com.github.javaparser.resolution.Resolvable", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("java.lang.Cloneable", ancestor.getQualifiedName());
+
+ ancestor = ancestors.remove(0);
+ assertEquals("java.lang.Object", ancestor.getQualifiedName());
+
+ assertTrue(ancestors.isEmpty());
+ }
+}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclarationTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclarationTest.java
new file mode 100644
index 000000000..00379b0ba
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclarationTest.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2016 Federico Tomassetti
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.github.javaparser.symbolsolver.reflectionmodel;
+
+import com.github.javaparser.symbolsolver.AbstractTest;
+import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ReflectionEnumDeclarationTest extends AbstractTest {
+
+ private TypeSolver typeSolver = new ReflectionTypeSolver(false);
+
+ ///
+ /// Test misc
+ ///
+
+ @Test
+ public void testIsClass() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(false, modifier.isClass());
+ }
+
+ @Test
+ public void testIsInterface() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(false, modifier.isInterface());
+ }
+
+ @Test
+ public void testIsEnum() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(true, modifier.isEnum());
+ }
+
+ @Test
+ public void testIsTypeVariable() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(false, modifier.isTypeParameter());
+ }
+
+ @Test
+ public void testIsType() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(true, modifier.isType());
+ }
+
+ @Test
+ public void testAsType() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(modifier, modifier.asType());
+ }
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void testAsClass() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ modifier.asClass();
+ }
+
+ @Test(expected = UnsupportedOperationException.class)
+ public void testAsInterface() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ modifier.asInterface();
+ }
+
+ @Test
+ public void testAsEnum() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals(modifier, modifier.asEnum());
+ }
+
+ @Test
+ public void testGetPackageName() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals("com.github.javaparser.ast", modifier.getPackageName());
+ }
+
+ @Test
+ public void testGetClassName() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals("Modifier", modifier.getClassName());
+ }
+
+ @Test
+ public void testGetQualifiedName() {
+ ReflectionEnumDeclaration modifier = (ReflectionEnumDeclaration) typeSolver.solveType("com.github.javaparser.ast.Modifier");
+ assertEquals("com.github.javaparser.ast.Modifier", modifier.getQualifiedName());
+ }
+
+}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclarationTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclarationTest.java
new file mode 100644
index 000000000..a52661078
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionInterfaceDeclarationTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2016 Federico Tomassetti
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.github.javaparser.symbolsolver.reflectionmodel;
+
+import com.github.javaparser.resolution.declarations.ResolvedInterfaceDeclaration;
+import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
+import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration;
+import com.github.javaparser.resolution.types.ResolvedReferenceType;
+import com.github.javaparser.resolution.types.ResolvedTypeVariable;
+import com.github.javaparser.symbolsolver.AbstractTest;
+import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
+import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+import com.google.common.collect.ImmutableList;
+import org.junit.Test;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+
+public class ReflectionInterfaceDeclarationTest extends AbstractTest {
+
+ @Test
+ public void testGetDeclaredMethods() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedReferenceTypeDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver);
+ List<ResolvedMethodDeclaration> methods = list.getDeclaredMethods().stream()
+ .sorted((a, b) -> a.getName().compareTo(b.getName()))
+ .collect(Collectors.toList());
+ if (isJava9()) {
+ assertEquals(40, methods.size());
+ assertEquals("clear", methods.get(4).getName());
+ assertEquals(true, methods.get(4).isAbstract());
+ assertEquals(0, methods.get(4).getNumberOfParams());
+ assertEquals("contains", methods.get(5).getName());
+ assertEquals(true, methods.get(5).isAbstract());
+ assertEquals(1, methods.get(5).getNumberOfParams());
+ assertEquals(true, methods.get(5).getParam(0).getType().isReferenceType());
+ assertEquals(Object.class.getCanonicalName(), methods.get(5).getParam(0).getType().asReferenceType().getQualifiedName());
+ } else {
+ assertEquals(28, methods.size());
+ assertEquals("clear", methods.get(4).getName());
+ assertEquals(true, methods.get(4).isAbstract());
+ assertEquals(0, methods.get(4).getNumberOfParams());
+ assertEquals("contains", methods.get(5).getName());
+ assertEquals(true, methods.get(5).isAbstract());
+ assertEquals(1, methods.get(5).getNumberOfParams());
+ assertEquals(true, methods.get(5).getParam(0).getType().isReferenceType());
+ assertEquals(Object.class.getCanonicalName(), methods.get(5).getParam(0).getType().asReferenceType().getQualifiedName());
+ }
+ }
+
+ @Test
+ public void testAllAncestors() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+ ResolvedInterfaceDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver);
+ Map<String, ResolvedReferenceType> ancestors = new HashMap<>();
+ list.getAllAncestors().forEach(a -> ancestors.put(a.getQualifiedName(), a));
+ assertEquals(3, ancestors.size());
+
+ ResolvedTypeVariable typeVariable = new ResolvedTypeVariable(list.getTypeParameters().get(0));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Collection.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.util.Collection"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionClassDeclaration(Object.class, typeResolver), typeResolver), ancestors.get("java.lang.Object"));
+ assertEquals(new ReferenceTypeImpl(new ReflectionInterfaceDeclaration(Iterable.class, typeResolver), ImmutableList.of(typeVariable), typeResolver), ancestors.get("java.lang.Iterable"));
+ }
+
+}
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclarationTest.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclarationTest.java
new file mode 100644
index 000000000..8a5be170f
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclarationTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 Federico Tomassetti
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.github.javaparser.symbolsolver.reflectionmodel;
+
+import com.github.javaparser.resolution.declarations.ResolvedClassDeclaration;
+import com.github.javaparser.resolution.declarations.ResolvedInterfaceDeclaration;
+import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration;
+import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+public class ReflectionMethodDeclarationTest {
+
+ @Test
+ public void testGetSignature() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedClassDeclaration object = new ReflectionClassDeclaration(Object.class, typeResolver);
+ ResolvedInterfaceDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver);
+
+ ResolvedMethodDeclaration hashCode = object.getAllMethods().stream().filter(m -> m.getName().equals("hashCode")).findFirst().get().getDeclaration();
+ ResolvedMethodDeclaration equals = object.getAllMethods().stream().filter(m -> m.getName().equals("equals")).findFirst().get().getDeclaration();
+ ResolvedMethodDeclaration containsAll = list.getAllMethods().stream().filter(m -> m.getName().equals("containsAll")).findFirst().get().getDeclaration();
+ ResolvedMethodDeclaration subList = list.getAllMethods().stream().filter(m -> m.getName().equals("subList")).findFirst().get().getDeclaration();
+
+ assertEquals("hashCode()", hashCode.getSignature());
+ assertEquals("equals(java.lang.Object)", equals.getSignature());
+ assertEquals("containsAll(java.util.Collection<? extends java.lang.Object>)", containsAll.getSignature());
+ assertEquals("subList(int, int)", subList.getSignature());
+ }
+
+ @Test
+ public void testGetGenericReturnType() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedInterfaceDeclaration map = new ReflectionInterfaceDeclaration(Map.class, typeResolver);
+
+ ResolvedMethodDeclaration put = map.getAllMethods().stream().filter(m -> m.getName().equals("put")).findFirst().get().getDeclaration();
+ assertEquals(true, put.getReturnType().isTypeVariable());
+ assertEquals(true, put.getReturnType().asTypeParameter().declaredOnType());
+ assertEquals("java.util.Map.V", put.getReturnType().asTypeParameter().getQualifiedName());
+ }
+
+ @Test
+ public void testGetGenericParameters() {
+ TypeSolver typeResolver = new ReflectionTypeSolver();
+
+ ResolvedInterfaceDeclaration map = new ReflectionInterfaceDeclaration(Map.class, typeResolver);
+
+ ResolvedMethodDeclaration put = map.getAllMethods().stream().filter(m -> m.getName().equals("put")).findFirst().get().getDeclaration();
+ assertEquals(true, put.getParam(0).getType().isTypeVariable());
+ assertEquals(true, put.getParam(0).getType().asTypeParameter().declaredOnType());
+ assertEquals("java.util.Map.K", put.getParam(0).getType().asTypeParameter().getQualifiedName());
+
+ assertEquals(true, put.getParam(1).getType().isTypeVariable());
+ assertEquals(true, put.getParam(1).getType().asTypeParameter().declaredOnType());
+ assertEquals("java.util.Map.V", put.getParam(1).getType().asTypeParameter().getQualifiedName());
+ }
+}