/** * This method is only useful if the graph has been built, and {@link #generateArrows(ArrayList)} * has been called on all classes. This method removes any arrows that point to classes that are * super classes of classes that this class has arrows to. */ public void removeExtraArrows() { ArrayList<UMLClass> pointedTo = new ArrayList<UMLClass>(); for (UMLArrow arrow : this.arrows) { pointedTo.add(arrow.getEndClass()); } // If the used class is in a field, ignore it. for (UMLClass firstClass : new ArrayList<UMLClass>(pointedTo)) { for (UMLClass secondClass : new ArrayList<UMLClass>(pointedTo)) { if (firstClass.checkExtendsOrImplements(secondClass)) { pointedTo.remove(secondClass); } else if (secondClass.checkExtendsOrImplements(firstClass)) { pointedTo.remove(firstClass); } } } // Add back in extends/implements arrows for (UMLArrow arrow : this.arrows) { if (arrow.extendsOrImplements()) { pointedTo.add(arrow.getEndClass()); } } for (UMLArrow arrow : new ArrayList<UMLArrow>(this.arrows)) { if ((!pointedTo.contains(arrow.getEndClass())) && arrow.isUsesArrow()) { this.arrows.remove(arrow); } } }
public ArrayList<UMLClass> getAllExtendsOrImplements() { ArrayList<UMLClass> finalList = new ArrayList<UMLClass>(); ArrayList<UMLClass> extendsOrImplements = new ArrayList<UMLClass>(); for (UMLArrow arrow : this.arrows) { if (arrow.extendsOrImplements()) { extendsOrImplements.add(arrow.getEndClass()); } } for (UMLClass uClass : extendsOrImplements) { finalList.addAll(uClass.getAllExtendsOrImplementsHelper()); } return finalList; }
/** * This method is only useful if the graph has been built, and {@link #generateArrows(ArrayList)} * has been called on all classes. * * @param c The class to check if this class (directly or indirectly) extends or implements. * @return Whether or not this class extends or implements c. */ public boolean checkExtendsOrImplements(UMLClass c) { if ((this.extension == null || this.extension.isEmpty()) && this.implementations.isEmpty()) { return false; } ArrayList<UMLClass> extImpl = new ArrayList<UMLClass>(); for (UMLArrow arrow : this.arrows) { if (arrow.extendsOrImplements()) { extImpl.add(arrow.getEndClass()); } } for (UMLClass cls : extImpl) { if (cls.getName().equals(c.getName())) { return true; } else if (cls.checkExtendsOrImplements(c)) { return true; } } return false; }
private ArrayList<UMLClass> getAllExtendsOrImplementsHelper() { ArrayList<UMLClass> finalList = new ArrayList<UMLClass>(); ArrayList<UMLClass> extendsOrImplements = new ArrayList<UMLClass>(); for (UMLArrow arrow : this.arrows) { if (arrow.extendsOrImplements()) { extendsOrImplements.add(arrow.getEndClass()); } } for (UMLClass uClass : extendsOrImplements) { ArrayList<UMLClass> temp = uClass.getAllExtendsOrImplementsHelper(); for (UMLClass uClass2 : temp) { if (!finalList.contains(uClass2)) { finalList.add(uClass2); } } } finalList.add(this); return finalList; }