@Override public List<ResolvedReferenceType> getAncestors() { List<ResolvedReferenceType> ancestors = new ArrayList<>(); ResolvedReferenceType superclass = getSuperClass(); if (superclass != null) { ancestors.add(superclass); } if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) { ResolvedReferenceType ancestor = toReferenceType(implemented); ancestors.add(ancestor); } } return ancestors; }
@Override public List<ResolvedReferenceType> getAncestors() { List<ResolvedReferenceType> ancestors = new ArrayList<>(); ResolvedReferenceType superclass = getSuperClass(); if (superclass != null) { ancestors.add(superclass); } if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) { ResolvedReferenceType ancestor = toReferenceType(implemented); ancestors.add(ancestor); } } return ancestors; }
ResolvedReferenceType superclass; try { superclass = getSuperClass(); } catch (UnsolvedSymbolException e) { if (acceptIncompleteList) {
@Override public boolean canBeAssignedTo(ResolvedReferenceTypeDeclaration other) { // TODO consider generic types if (this.getQualifiedName().equals(other.getQualifiedName())) { return true; } ResolvedClassDeclaration superclass = (ResolvedClassDeclaration) getSuperClass().getTypeDeclaration(); if (superclass != null) { // We want to avoid infinite recursion in case of Object having Object as ancestor if (Object.class.getCanonicalName().equals(superclass.getQualifiedName())) { return true; } if (superclass.canBeAssignedTo(other)) { return true; } } if (this.wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getImplementedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.canBeAssignedTo(other)) { return true; } } } return false; }
@Override public boolean canBeAssignedTo(ResolvedReferenceTypeDeclaration other) { // TODO consider generic types if (this.getQualifiedName().equals(other.getQualifiedName())) { return true; } ResolvedClassDeclaration superclass = (ResolvedClassDeclaration) getSuperClass().getTypeDeclaration(); if (superclass != null) { // We want to avoid infinite recursion in case of Object having Object as ancestor if (Object.class.getCanonicalName().equals(superclass.getQualifiedName())) { return true; } if (superclass.canBeAssignedTo(other)) { return true; } } if (this.wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getImplementedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.canBeAssignedTo(other)) { return true; } } } return false; }
@Override public boolean canBeAssignedTo(ResolvedReferenceTypeDeclaration other) { // TODO consider generic types if (this.getQualifiedName().equals(other.getQualifiedName())) { return true; } ResolvedClassDeclaration superclass = (ResolvedClassDeclaration) getSuperClass().getTypeDeclaration(); if (superclass != null) { // We want to avoid infinite recursion in case of Object having Object as ancestor if (Object.class.getCanonicalName().equals(superclass.getQualifiedName())) { return true; } if (superclass.canBeAssignedTo(other)) { return true; } } if (this.wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getImplementedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.canBeAssignedTo(other)) { return true; } } } return false; }
@Test public void issue113superClassIsResolvedCorrectly() throws FileNotFoundException { String pathToSourceFile = adaptPath("src/test/resources/issue113/com/foo/Widget.java"); CompilationUnit cu = JavaParser.parse(new File(pathToSourceFile)); JavaParserClassDeclaration jssExtendedWidget = new JavaParserClassDeclaration(cu.getClassByName("Widget").get(), typeSolver); ResolvedReferenceType superClass = jssExtendedWidget.getSuperClass(); assertEquals("com.foo.base.Widget", superClass.getQualifiedName()); }
@Test public void testGetSuperclassWithTypeParameters() { JavaParserClassDeclaration compilationUnit = (JavaParserClassDeclaration) typeSolverNewCode.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); assertEquals("com.github.javaparser.ast.body.BodyDeclaration", compilationUnit.getSuperClass().getQualifiedName()); assertEquals("com.github.javaparser.ast.body.ConstructorDeclaration", compilationUnit.getSuperClass().typeParametersMap().getValueBySignature("com.github.javaparser.ast.body.BodyDeclaration.T").get().asReferenceType().getQualifiedName()); }
@Test public void testGetSuperclassWithoutTypeParameters() { JavaParserClassDeclaration compilationUnit = (JavaParserClassDeclaration) typeSolver.solveType("com.github.javaparser.ast.CompilationUnit"); assertEquals("com.github.javaparser.ast.Node", compilationUnit.getSuperClass().getQualifiedName()); }