Exemplo n.º 1
0
  /**
   * 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);
      }
    }
  }
Exemplo n.º 2
0
  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;
  }
Exemplo n.º 3
0
  /**
   * 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;
  }
Exemplo n.º 4
0
  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;
  }