diff options
Diffstat (limited to 'javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/reflectionmodel')
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()); + } +} |