/** * Searches all extended or implemented super classes or interfaces for * special classes that differ with the atomics version and replaces them * with the appropriate class. * * @param n */ private static void replaceParentClassesForAtomics(ClassOrInterfaceDeclaration n) { replaceParentClassesForAtomics(n.getExtendedTypes()); replaceParentClassesForAtomics(n.getImplementedTypes()); }
@Override public List<ResolvedReferenceType> getInterfaces() { List<ResolvedReferenceType> interfaces = new ArrayList<>(); if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType t : wrappedNode.getImplementedTypes()) { interfaces.add(toReferenceType(t)); } } return interfaces; }
@Override public List<ResolvedReferenceType> getInterfaces() { List<ResolvedReferenceType> interfaces = new ArrayList<>(); if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType t : wrappedNode.getImplementedTypes()) { interfaces.add(toReferenceType(t)); } } return interfaces; }
@Override public List<ResolvedReferenceType> getInterfaces() { List<ResolvedReferenceType> interfaces = new ArrayList<>(); if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType t : wrappedNode.getImplementedTypes()) { interfaces.add(toReferenceType(t)); } } return interfaces; }
@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; }
private static void writeClassDeclaration(PrintStream s, ClassOrInterfaceDeclaration c) { s.format("\npublic%s class %s", c.isFinal() ? " final" : "", c.getName()); if (c.getImplementedTypes() != null && !c.getImplementedTypes().isEmpty()) { s.format(" implements"); for (ClassOrInterfaceType iface : c.getImplementedTypes()) { s.append(" " + iface); } } s.append(" {\n"); Preconditions.checkArgument(c.getExtendedTypes().size() == 0); }
private static void writeClassDeclaration(PrintStream s, ClassOrInterfaceDeclaration c) { s.format("\npublic%s class %s", c.isFinal() ? " final" : "", c.getName()); if (c.getImplementedTypes() != null && !c.getImplementedTypes().isEmpty()) { s.format(" implements"); for (ClassOrInterfaceType iface : c.getImplementedTypes()) { s.append(" " + iface); } } s.append(" {\n"); Preconditions.checkArgument(c.getExtendedTypes().size() == 0); }
@Override public List<ResolvedReferenceType> getAncestors() { List<ResolvedReferenceType> ancestors = new ArrayList<>(); if (wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType extended : wrappedNode.getExtendedTypes()) { ancestors.add(toReferenceType(extended)); } } if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) { ancestors.add(toReferenceType(implemented)); } } return ancestors; }
@Override public List<ResolvedReferenceType> getAncestors() { List<ResolvedReferenceType> ancestors = new ArrayList<>(); if (wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType extended : wrappedNode.getExtendedTypes()) { ancestors.add(toReferenceType(extended)); } } if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) { ancestors.add(toReferenceType(implemented)); } } return ancestors; }
@Override public List<ResolvedReferenceType> getInterfacesExtended() { List<ResolvedReferenceType> interfaces = new ArrayList<>(); if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType t : wrappedNode.getImplementedTypes()) { interfaces.add(new ReferenceTypeImpl(solveType(t.getName().getId(), typeSolver).getCorrespondingDeclaration().asInterface(), typeSolver)); } } return interfaces; }
@Override public List<ResolvedReferenceType> getInterfacesExtended() { List<ResolvedReferenceType> interfaces = new ArrayList<>(); if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType t : wrappedNode.getImplementedTypes()) { interfaces.add(new ReferenceTypeImpl(solveType(t.getName().getId(), typeSolver).getCorrespondingDeclaration().asInterface(), typeSolver)); } } return interfaces; }
@Override public List<ResolvedReferenceType> getAncestors(boolean acceptIncompleteList) { List<ResolvedReferenceType> ancestors = new ArrayList<>(); if (wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType extended : wrappedNode.getExtendedTypes()) { try { ancestors.add(toReferenceType(extended)); } catch (UnsolvedSymbolException e) { if (!acceptIncompleteList) { // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully throw e; } } } } if (wrappedNode.getImplementedTypes() != null) { for (ClassOrInterfaceType implemented : wrappedNode.getImplementedTypes()) { try { ancestors.add(toReferenceType(implemented)); } catch (UnsolvedSymbolException e) { if (!acceptIncompleteList) { // we only throw an exception if we require a complete list; otherwise, we attempt to continue gracefully throw e; } } } } return ancestors; }
@Override public List<ResolvedFieldDeclaration> fieldsExposedToChild(Node child) { List<ResolvedFieldDeclaration> fields = new LinkedList<>(); fields.addAll(this.wrappedNode.resolve().getDeclaredFields()); this.wrappedNode.getExtendedTypes().forEach(i -> fields.addAll(i.resolve().getAllFieldsVisibleToInheritors())); this.wrappedNode.getImplementedTypes().forEach(i -> fields.addAll(i.resolve().getAllFieldsVisibleToInheritors())); return fields; }
@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; }
public void calculate(ClassOrInterfaceDeclaration classOrInterfaceDeclaration, CompilationUnit compilationUnit) { List<ClassOrInterfaceType> implementedInterfaces = classOrInterfaceDeclaration.getImplementedTypes(); for (ClassOrInterfaceType implementedInterface : implementedInterfaces) { String implementedInterfaceName = implementedInterface.getNameAsString(); String implementedInterfacePackageName = implementedInterface .findCompilationUnit() .flatMap(CompilationUnit::getPackageDeclaration) .flatMap(pkg -> Optional.of(pkg.getNameAsString())).orElse("???"); if (typeDao.exist(implementedInterfaceName, implementedInterfacePackageName)) { // JDK interfaces are not indexed int interfaceId = typeDao.getId(implementedInterfaceName, implementedInterfacePackageName); String cuPackageName = compilationUnit.getPackageDeclaration().get().getNameAsString(); int nbClasses = typeDao.count(classOrInterfaceDeclaration.getNameAsString(), cuPackageName); if (nbClasses > 1) { System.err.println("More than one class having the same name '" + classOrInterfaceDeclaration.getName() + "' and package '" + cuPackageName + "'"); } else { int classId = typeDao.getId(classOrInterfaceDeclaration.getNameAsString(), cuPackageName); implementsDao.save(new Implements(classId, interfaceId)); } } } } }
@Override public boolean canBeAssignedTo(ResolvedReferenceTypeDeclaration other) { // TODO consider generic types if (this.getQualifiedName().equals(other.getQualifiedName())) { return true; } if (this.wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getExtendedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.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; } if (this.wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getExtendedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.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; } if (this.wrappedNode.getExtendedTypes() != null) { for (ClassOrInterfaceType type : wrappedNode.getExtendedTypes()) { ResolvedReferenceTypeDeclaration ancestor = (ResolvedReferenceTypeDeclaration) new SymbolSolver(typeSolver).solveType(type); if (ancestor.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; }