コード例 #1
0
  @Test
  public void generateDotClassDiagram() throws IOException {
    JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
    javaProjectBuilder.addSourceTree(new File("./src/main/java/me/loki2302/"));

    StringBuilder stringBuilder = new StringBuilder();

    stringBuilder.append("digraph g { overlap = false; node [shape=rectangle;];\n");

    int clusterIdx = 0;
    for (JavaPackage javaPackage : javaProjectBuilder.getPackages()) {
      stringBuilder.append(String.format("subgraph cluster_%d {\n", clusterIdx++));
      stringBuilder.append(String.format("label=\"%s\";\n", javaPackage.getName()));
      for (JavaClass javaClass : javaPackage.getClasses()) {
        stringBuilder.append(String.format("%s;\n", simpleName(javaClass.getName())));
      }
      stringBuilder.append("}\n");
    }

    for (JavaClass javaClass : javaProjectBuilder.getClasses()) {
      // inheritance
      JavaClass superClass = javaClass.getSuperJavaClass();
      if (superClass != null) {
        if (!shouldIgnore(superClass)) {
          stringBuilder.append(
              String.format(
                  "%s -> %s;\n",
                  simpleName(javaClass.getName()), simpleName(superClass.getName())));
        }
      }

      for (JavaClass i : javaClass.getInterfaces()) {
        if (shouldIgnore(i)) {
          continue;
        }

        stringBuilder.append(
            String.format("%s -> %s;\n", simpleName(javaClass.getName()), simpleName(i.getName())));
      }

      // delegation
      List<JavaField> fields = javaClass.getFields();
      for (JavaField field : fields) {
        if (shouldIgnore(field.getType())) {
          continue;
        }

        stringBuilder.append(
            String.format(
                "%s -> %s;\n",
                simpleName(javaClass.getName()), simpleName(field.getType().getName())));
      }
    }

    stringBuilder.append("}\n");

    documentation.text("classDiagram", stringBuilder.toString());
  }
コード例 #2
0
  @Test
  public void generatePlantUmlClassDiagram() throws IOException {
    JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
    javaProjectBuilder.addSourceTree(new File("./src/main/java"));

    StringBuilder stringBuilder = new StringBuilder();

    for (JavaClass javaClass : javaProjectBuilder.getClasses()) {
      if (shouldIgnore(javaClass)) {
        continue;
      }

      String classType;
      if (javaClass.isInterface()) {
        classType = "interface";
      } else if (javaClass.isAbstract()) {
        classType = "abstract class";
      } else {
        classType = "class";
      }

      stringBuilder.append(String.format("%s %s", classType, javaClass.getFullyQualifiedName()));

      // extends
      JavaClass superClass = javaClass.getSuperJavaClass();
      if (superClass != null) {
        if (!shouldIgnore(superClass)) {
          stringBuilder.append(String.format(" extends %s", superClass.getFullyQualifiedName()));
        }
      }

      // implements
      List<JavaClass> interfaces = javaClass.getInterfaces();
      if (!interfaces.isEmpty()) {
        List<String> interfaceNames =
            interfaces
                .stream()
                .filter(i -> !shouldIgnore(i))
                .map(i -> i.getFullyQualifiedName())
                .collect(Collectors.toList());
        String implementsString = " implements " + String.join(", ", interfaceNames);
        stringBuilder.append(implementsString);
      }

      stringBuilder.append("\n");
    }

    for (JavaClass javaClass : javaProjectBuilder.getClasses()) {
      if (shouldIgnore(javaClass)) {
        continue;
      }

      // delegation
      List<JavaField> fields = javaClass.getFields();
      for (JavaField field : fields) {
        if (shouldIgnore(field.getType())) {
          continue;
        }

        stringBuilder.append(
            String.format(
                "%s -> %s: delegates\n",
                javaClass.getFullyQualifiedName(), field.getType().getFullyQualifiedName()));
      }
    }

    documentation.text("classDiagram", stringBuilder.toString());
  }