From 1d03695f8e14ee4e5a915142d00d11a80d75b67e Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Sat, 27 Oct 2018 21:28:41 +0200 Subject: [PATCH] Produce simpler dot files, reduce code duplication in edge generation. --- .../java/org/umlgraph/doclet/ClassGraph.java | 142 +++++++++--------- .../org/umlgraph/doclet/RelationType.java | 30 ++-- .../java/org/umlgraph/doclet/StringUtil.java | 12 ++ src/test/java/org/umlgraph/test/DotDiff.java | 2 +- testdata/dot-ref/Abstr.dot | 33 ++-- testdata/dot-ref/Inference.dot | 81 +++++----- testdata/dot-ref/Irp.dot | 29 ++-- testdata/dot-ref/MultiAssoc.dot | 21 +-- testdata/dot-ref/MyVector.dot | 45 +++--- testdata/dot-ref/Root.dot | 77 +++++----- testdata/dot-ref/RunnableRef.dot | 21 +-- testdata/dot-ref/Style.dot | 39 ++--- testdata/dot-ref/TestHideOp.dot | 13 +- testdata/dot-ref/ViewAll.dot | 45 +++--- testdata/dot-ref/ViewAllDetailed.dot | 45 +++--- testdata/dot-ref/ViewAtt.dot | 45 +++--- testdata/dot-ref/ViewChildEmpty.dot | 21 +-- testdata/dot-ref/ViewChildOverride.dot | 21 +-- testdata/dot-ref/ViewColors.dot | 53 +++---- testdata/dot-ref/ViewContext.dot | 69 ++++----- testdata/dot-ref/ViewInterfaces.dot | 45 +++--- testdata/dot-ref/ViewProduct.dot | 21 +-- testdata/dot-ref/ViewSubclasses.dot | 45 +++--- testdata/dot-ref/active.dot | 13 +- testdata/dot-ref/advrel.dot | 53 +++---- testdata/dot-ref/assoc.dot | 31 ++-- testdata/dot-ref/car.dot | 37 ++--- testdata/dot-ref/catalina.dot | 97 ++++++------ testdata/dot-ref/class-eg.dot | 29 ++-- testdata/dot-ref/classadd.dot | 13 +- testdata/dot-ref/color.dot | 43 +++--- testdata/dot-ref/ctor.dot | 13 +- testdata/dot-ref/disable.dot | 21 +-- testdata/dot-ref/extends.dot | 17 ++- testdata/dot-ref/foo.dot | 33 ++-- testdata/dot-ref/general.dot | 89 +++++------ testdata/dot-ref/java5.dot | 17 ++- testdata/dot-ref/schema.dot | 57 +++---- testdata/dot-ref/strip.dot | 17 ++- testdata/dot-ref/vis.dot | 13 +- 40 files changed, 806 insertions(+), 742 deletions(-) diff --git a/src/main/java/org/umlgraph/doclet/ClassGraph.java b/src/main/java/org/umlgraph/doclet/ClassGraph.java index 07bd05c..1c35a78 100644 --- a/src/main/java/org/umlgraph/doclet/ClassGraph.java +++ b/src/main/java/org/umlgraph/doclet/ClassGraph.java @@ -21,6 +21,7 @@ package org.umlgraph.doclet; import static org.umlgraph.doclet.StringUtil.buildRelativePathFromClassNames; import static org.umlgraph.doclet.StringUtil.escape; +import static org.umlgraph.doclet.StringUtil.fmt; import static org.umlgraph.doclet.StringUtil.guilWrap; import static org.umlgraph.doclet.StringUtil.guillemize; import static org.umlgraph.doclet.StringUtil.htmlNewline; @@ -144,13 +145,13 @@ class ClassGraph { } private static int qualifiedNameInner(Options opt, String r, StringBuilder buf, int last, boolean strip) { - boolean guessPackage = last < r.length() && Character.isLowerCase(r.charAt(last)); + strip = strip && last < r.length() && Character.isLowerCase(r.charAt(last)); for (int i = last; i < r.length(); i++) { char c = r.charAt(i); if (c == '.' || c == '$') { - if (strip && guessPackage) + if (strip) last = i + 1; // skip dot - guessPackage = guessPackage && last < r.length() && Character.isLowerCase(r.charAt(last)); + strip = strip && last < r.length() && Character.isLowerCase(r.charAt(last)); continue; } if (Character.isJavaIdentifierPart(c)) @@ -275,9 +276,13 @@ class ClassGraph { /** Print the common class node's properties */ private void nodeProperties(Options opt) { - w.print(", fontname=\"" + opt.nodeFontName + "\""); - w.print(", fontcolor=\"" + opt.nodeFontColor + "\""); - w.print(", fontsize=" + opt.nodeFontSize); + Options def = opt.getGlobalOptions(); + if (opt.nodeFontName != def.nodeFontName) + w.print(",fontname=\"" + opt.nodeFontName + "\""); + if (opt.nodeFontColor != def.nodeFontColor) + w.print(",fontcolor=\"" + opt.nodeFontColor + "\""); + if (opt.nodeFontSize != def.nodeFontSize) + w.print(",fontsize=" + fmt(opt.nodeFontSize)); w.print(opt.shape.style); w.println("];"); } @@ -361,9 +366,9 @@ class ClassGraph { if (c.isEnum() && !opt.showEnumerations) return ci.name; // Associate classname's alias - w.println("\t// " + className); + w.println(linePrefix + "// " + className); // Create label - w.print("\t" + ci.name + " [label="); + w.print(linePrefix + ci.name + " [label="); boolean showMembers = (opt.showAttributes && c.fields().length > 0) || @@ -371,7 +376,8 @@ class ClassGraph { (opt.showOperations && c.methods().length > 0) || (opt.showConstructors && c.constructors().length > 0); - externalTableStart(opt, c.qualifiedName(), classToUrl(c, rootClass)); + final String url = classToUrl(c, rootClass); + externalTableStart(opt, c.qualifiedName(), url); firstInnerTableStart(opt); if (c.isInterface()) @@ -447,22 +453,23 @@ class ClassGraph { } } externalTableEnd(); - w.print(", URL=\"" + classToUrl(c, rootClass) + "\""); + if (url != null) + w.print(", URL=\"" + url + "\""); nodeProperties(opt); // If needed, add a note for this node int ni = 0; for (Tag t : c.tags("note")) { String noteName = "n" + ni + "c" + ci.name; - w.print("\t// Note annotation\n"); - w.print("\t" + noteName + " [label="); - externalTableStart(UmlGraph.getCommentOptions(), c.qualifiedName(), classToUrl(c, rootClass)); + w.print(linePrefix + "// Note annotation\n"); + w.print(linePrefix + noteName + " [label="); + externalTableStart(UmlGraph.getCommentOptions(), c.qualifiedName(), url); innerTableStart(); tableLine(Align.LEFT, Font.CLASS.wrap(UmlGraph.getCommentOptions(), htmlNewline(escape(t.text())))); innerTableEnd(); externalTableEnd(); nodeProperties(UmlGraph.getCommentOptions()); - w.print("\t" + noteName + " -> " + relationNode(c) + "[arrowhead=none];\n"); + w.print(linePrefix + noteName + " -> " + relationNode(c) + "[arrowhead=none];\n"); ni++; } ci.nodePrinted = true; @@ -479,13 +486,12 @@ class ClassGraph { String tagname = rt.lower; for (Tag tag : from.tags(tagname)) { String t[] = tokenize(tag.text()); // l-src label l-dst target + t = t.length == 1 ? new String[] { "-", "-", "-", t[0] } : t; // Shorthand if (t.length != 4) { System.err.println("Error in " + from + "\n" + tagname + " expects four fields (l-src label l-dst target): " + tag.text()); return; } ClassDoc to = from.findClass(t[3]); - - if (to != null) { if(hidden(to)) continue; @@ -507,19 +513,32 @@ class ClassGraph { */ private void relation(Options opt, RelationType rt, ClassDoc from, String fromName, ClassDoc to, String toName, String tailLabel, String label, String headLabel) { + tailLabel = (tailLabel != null && !tailLabel.isEmpty()) ? ",taillabel=\"" + tailLabel + "\"" : ""; + label = (label != null && !label.isEmpty()) ? ",label=\"" + guillemize(opt, label) + "\"" : ""; + headLabel = (headLabel != null && !headLabel.isEmpty()) ? ",headlabel=\"" + headLabel + "\"" : ""; + boolean unLabeled = tailLabel.isEmpty() && label.isEmpty() && headLabel.isEmpty(); + String n1 = relationNode(from, fromName), n2 = relationNode(to, toName); + // For ranking we need to output extends/implements backwards. + if (rt.backorder) { // Swap: + String tmp = n1; + n1 = n2; + n2 = tmp; + tmp = tailLabel; + tailLabel = headLabel; + headLabel = tmp; + } + Options def = opt.getGlobalOptions(); // print relation - w.println("\t// " + fromName + " " + rt.lower + " " + toName); - w.println("\t" + relationNode(from, fromName) + " -> " + relationNode(to, toName) + " [" + - "taillabel=\"" + tailLabel + "\", " + - ((label == null || label.isEmpty()) ? "label=\"\", " : "label=\"" + guillemize(opt, label) + "\", ") + - "headlabel=\"" + headLabel + "\", " + - "fontname=\"" + opt.edgeFontName + "\", " + - "fontcolor=\"" + opt.edgeFontColor + "\", " + - "fontsize=" + opt.edgeFontSize + ", " + - "color=\"" + opt.edgeColor + "\", " + - rt.style + "];" - ); + w.println(linePrefix + "// " + fromName + " " + rt.lower + " " + toName); + w.println(linePrefix + n1 + " -> " + n2 + " [" + rt.style + + (opt.edgeColor != def.edgeColor ? ",color=\"" + opt.edgeColor + "\"" : "") + + (unLabeled ? "" : + (opt.edgeFontName != def.edgeFontName ? ",fontname=\"" + opt.edgeFontName + "\"" : "") + + (opt.edgeFontColor != def.edgeFontColor ? ",fontcolor=\"" + opt.edgeFontColor + "\"" : "") + + (opt.edgeFontSize != def.edgeFontSize ? ",fontsize=" + fmt(opt.edgeFontSize) : "")) + + tailLabel + label + headLabel + + "];"); // update relation info RelationDirection d = RelationDirection.BOTH; @@ -569,44 +588,28 @@ class ClassGraph { Options opt = optionProvider.getOptionsFor(c); if (hidden(c) || c.name().equals("")) // avoid phantom classes, they may pop up when the source uses annotations return; - String className = c.toString(); // Print generalization (through the Java superclass) Type s = c.superclassType(); ClassDoc sc = s != null && !s.qualifiedTypeName().equals(Object.class.getName()) ? s.asClassDoc() : null; - if (sc != null && !c.isEnum() && !hidden(sc)) { - w.println("\t//" + c + " extends " + s + "\n" + - "\t" + relationNode(sc) + " -> " + relationNode(c) + - " [" + RelationType.EXTENDS.style + "];"); - getClassInfo(className).addRelation(sc.toString(), RelationType.EXTENDS, RelationDirection.OUT); - getClassInfo(sc.toString()).addRelation(className, RelationType.EXTENDS, RelationDirection.IN); - } - + if (sc != null && !c.isEnum() && !hidden(sc)) + relation(opt, RelationType.EXTENDS, c, sc, null, null, null); // Print generalizations (through @extends tags) for (Tag tag : c.tags("extends")) - if (!hidden(tag.text())) { - ClassDoc from = c.findClass(tag.text()); - w.println("\t//" + c + " extends " + tag.text() + "\n" + - "\t" + relationNode(from, tag.text()) + " -> " + relationNode(c) + " [" + RelationType.EXTENDS.style + "];"); - getClassInfo(className).addRelation(tag.text(), RelationType.EXTENDS, RelationDirection.OUT); - getClassInfo(tag.text()).addRelation(className, RelationType.EXTENDS, RelationDirection.IN); - } + if (!hidden(tag.text())) + relation(opt, RelationType.EXTENDS, c, c.findClass(tag.text()), null, null, null); // Print realizations (Java interfaces) for (Type iface : c.interfaceTypes()) { ClassDoc ic = iface.asClassDoc(); - if (!hidden(ic)) { - w.println("\t//" + c + " implements " + ic + "\n\t" + relationNode(ic) + " -> " + relationNode(c) - + " [" + RelationType.IMPLEMENTS.style + "];"); - getClassInfo(className).addRelation(ic.toString(), RelationType.IMPLEMENTS, RelationDirection.OUT); - getClassInfo(ic.toString()).addRelation(className, RelationType.IMPLEMENTS, RelationDirection.IN); - } + if (!hidden(ic)) + relation(opt, RelationType.IMPLEMENTS, c, ic, null, null, null); } // Print other associations - allRelation(opt, RelationType.ASSOC, c); - allRelation(opt, RelationType.NAVASSOC, c); - allRelation(opt, RelationType.HAS, c); - allRelation(opt, RelationType.NAVHAS, c); allRelation(opt, RelationType.COMPOSED, c); allRelation(opt, RelationType.NAVCOMPOSED, c); + allRelation(opt, RelationType.HAS, c); + allRelation(opt, RelationType.NAVHAS, c); + allRelation(opt, RelationType.ASSOC, c); + allRelation(opt, RelationType.NAVASSOC, c); allRelation(opt, RelationType.DEPEND, c); } @@ -623,8 +626,8 @@ class ClassGraph { Options opt = optionProvider.getOptionsFor(className); if(opt.matchesHideExpression(className)) continue; - w.println("\t// " + className); - w.print("\t" + info.name + "[label="); + w.println(linePrefix + "// " + className); + w.print(linePrefix + info.name + "[label="); externalTableStart(opt, className, classToUrl(className)); innerTableStart(); String qualifiedName = qualifiedName(opt, className); @@ -641,7 +644,7 @@ class ClassGraph { innerTableEnd(); externalTableEnd(); if (className == null || className.length() == 0) - w.print(", URL=\"" + classToUrl(className) + "\""); + w.print(",URL=\"" + classToUrl(className) + "\""); nodeProperties(opt); } } @@ -892,19 +895,24 @@ class ClassGraph { Version.VERSION + " (http://www.spinellis.gr/umlgraph/)\n" + "#\n\n" + "digraph G {\n" + - "\tedge [fontname=\"" + opt.edgeFontName + - "\",fontsize=10,labelfontname=\"" + opt.edgeFontName + - "\",labelfontsize=10];\n" + - "\tnode [fontname=\"" + opt.nodeFontName + - "\",fontsize=10,shape=plaintext];" + linePrefix + "graph [fontnames=\"svg\"]\n" + + linePrefix + "edge [fontname=\"" + opt.edgeFontName + + "\",fontsize=" + fmt(opt.edgeFontSize) + + ",labelfontname=\"" + opt.edgeFontName + + "\",labelfontsize=" + fmt(opt.edgeFontSize) + + ",color=\"" + opt.edgeColor + "\"];\n" + + linePrefix + "node [fontname=\"" + opt.nodeFontName + + "\",fontcolor=\"" + opt.nodeFontColor + + "\",fontsize=" + fmt(opt.nodeFontSize) + + ",shape=plaintext];" ); - w.println("\tnodesep=" + opt.nodeSep + ";"); - w.println("\tranksep=" + opt.rankSep + ";"); + w.println(linePrefix + "nodesep=" + opt.nodeSep + ";"); + w.println(linePrefix + "ranksep=" + opt.rankSep + ";"); if (opt.horizontal) - w.println("\trankdir=LR;"); + w.println(linePrefix + "rankdir=LR;"); if (opt.bgColor != null) - w.println("\tbgcolor=\"" + opt.bgColor + "\";\n"); + w.println(linePrefix + "bgcolor=\"" + opt.bgColor + "\";\n"); } /** Dot epilogue */ @@ -953,9 +961,9 @@ class ClassGraph { } private void tableLine(Align align, String text) { - w.print("" // + w.print(" " // + text // MAY contain markup! - + "" + linePostfix); + + " " + linePostfix); } private static class FieldRelationInfo { diff --git a/src/main/java/org/umlgraph/doclet/RelationType.java b/src/main/java/org/umlgraph/doclet/RelationType.java index 7965b68..09f33a1 100644 --- a/src/main/java/org/umlgraph/doclet/RelationType.java +++ b/src/main/java/org/umlgraph/doclet/RelationType.java @@ -6,21 +6,29 @@ package org.umlgraph.doclet; * @author Erich Schubert */ public enum RelationType { - ASSOC("arrowhead=none"), // - NAVASSOC("arrowhead=open"), // - HAS("arrowhead=none, arrowtail=ediamond, dir=both"), // - NAVHAS("arrowhead=open, arrowtail=ediamond, dir=both"), // - COMPOSED("arrowhead=none, arrowtail=diamond, dir=both"), // - NAVCOMPOSED("arrowhead=open, arrowtail=diamond, dir=both"), // - DEPEND("arrowhead=open, style=dashed"), // - EXTENDS("arrowtail=empty, dir=back"), // - IMPLEMENTS("arrowtail=empty, dir=back, style=dashed"); + DEPEND("arrowhead=open,style=dashed,weight=0", false), // Weakest + NAVASSOC("arrowhead=open,weight=1", false), // + ASSOC("arrowhead=none,weight=2", false), // + NAVHAS("arrowhead=open,arrowtail=ediamond,dir=both,weight=3", false), // + HAS("arrowhead=none,arrowtail=ediamond,dir=back,weight=4", false), // + NAVCOMPOSED("arrowhead=open,arrowtail=diamond,dir=both,weight=5", false), // + COMPOSED("arrowhead=none,arrowtail=diamond,dir=back,weight=6", false), // + IMPLEMENTS("arrowtail=empty,style=dashed,dir=back,weight=9", true), // + EXTENDS("arrowtail=empty,dir=back,weight=10", true); - public final String lower, style; + /** Lower case version of the label */ + public final String lower; + + /** Graphviz style */ + public final String style; + + /** Backwards edges with respect to node ranking */ + public final boolean backorder; /** Enum constructors must be private */ - private RelationType(String style) { + private RelationType(String style, boolean backorder) { this.lower = toString().toLowerCase(); this.style = style; + this.backorder = backorder; } } diff --git a/src/main/java/org/umlgraph/doclet/StringUtil.java b/src/main/java/org/umlgraph/doclet/StringUtil.java index 8de60e0..e122e0b 100644 --- a/src/main/java/org/umlgraph/doclet/StringUtil.java +++ b/src/main/java/org/umlgraph/doclet/StringUtil.java @@ -216,4 +216,16 @@ class StringUtil { start = className.lastIndexOf('.', start - 1); } } + + /** + * Format a double to a string. + *

+ * Avoids printing "10.0" for exact values like 10. + * + * @param val Value + * @return Formatted value + */ + public static String fmt(double val) { + return val == Math.round(val) ? Long.toString((long) val) : Double.toString(val); + } } diff --git a/src/test/java/org/umlgraph/test/DotDiff.java b/src/test/java/org/umlgraph/test/DotDiff.java index 32ae72a..6d3ea20 100644 --- a/src/test/java/org/umlgraph/test/DotDiff.java +++ b/src/test/java/org/umlgraph/test/DotDiff.java @@ -166,7 +166,7 @@ public class DotDiff { int closedBracketIdx = line.lastIndexOf(']'); int arrowIdx = line.indexOf("->"); if (openBrackedIdx < 0 && closedBracketIdx < 0 || line.startsWith("edge") - || line.startsWith("node")) + || line.startsWith("node") || line.startsWith("graph")) extraLines.add(line); else if (arrowIdx > 0 && arrowIdx < openBrackedIdx) { // that's an arc arcLines.add(line); diff --git a/testdata/dot-ref/Abstr.dot b/testdata/dot-ref/Abstr.dot index d2df0bf..1c79e51 100644 --- a/testdata/dot-ref/Abstr.dot +++ b/testdata/dot-ref/Abstr.dot @@ -5,21 +5,22 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // test.AbstractNode - c1 [label=<
AbstractNode
abstractMethod()
concreteMethod()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // test.InnerNode - c2 [label=<
InnerNode
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // test.Leaf - c3 [label=<
Leaf
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //test.InnerNode extends test.AbstractNode - c1:p -> c2:p [dir=back,arrowtail=empty]; - // test.InnerNode COMPOSED test.AbstractNode - c2:p -> c1:p [taillabel="1", label="has", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - //test.Leaf extends test.AbstractNode - c1:p -> c3:p [dir=back,arrowtail=empty]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// test.AbstractNode +c1 [label=<
AbstractNode
abstractMethod()
concreteMethod()
>]; +// test.InnerNode +c2 [label=<
InnerNode
>]; +// test.Leaf +c3 [label=<
Leaf
>]; +//test.InnerNode extends test.AbstractNode +c1:p -> c2:p [arrowtail=empty,dir=back,weight=10]; +// test.InnerNode composed test.AbstractNode +c2:p -> c1:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", label="has", headlabel="*"]; +//test.Leaf extends test.AbstractNode +c1:p -> c3:p [arrowtail=empty,dir=back,weight=10]; } diff --git a/testdata/dot-ref/Inference.dot b/testdata/dot-ref/Inference.dot index 708e239..2914986 100644 --- a/testdata/dot-ref/Inference.dot +++ b/testdata/dot-ref/Inference.dot @@ -5,45 +5,46 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // A - c66 [label=<
A
first : B
second : B
third : C
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // B - c67 [label=<
B
doSomething(b : B, c : C) : A
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // C - c68 [label=<
C
collectionOfA : List<A>
collectionOfB : ArrayList<B>
mapOfD : Map<String, D>
childs : C[]
anOpaqueList : List<>
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // MyFunnyList - c69 [label=<
MyFunnyList<T, V>
myField : V
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // MyList - c70 [label=<
MyList
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // D - c71 [label=<
D
anotherListOfA : MyList
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //MyFunnyList extends java.util.ArrayList - c72:p -> c69:p [dir=back,arrowtail=empty]; - //MyList extends MyFunnyList - c69:p -> c70:p [dir=back,arrowtail=empty]; - // A HAS B - c66:p -> c67:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both]; - // A HAS C - c66:p -> c68:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both]; - // C NAVASSOC B - c68:p -> c67:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // C NAVASSOC D - c68:p -> c71:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // C NAVASSOC C - c68:p -> c68:p [taillabel="", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // C NAVASSOC java.util.List - c68:p -> c73:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // D NAVASSOC MyList - c71:p -> c70:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // B DEPEND A - c67:p -> c66:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; - // java.util.List - c73 [label=<
«interface»
List<E>
size() : int
isEmpty() : boolean
contains(arg0 : Object) : boolean
iterator() : Iterator<E>
toArray() : Object[]
toArray(arg0 : T[]) : T[]
add(arg0 : E) : boolean
remove(arg0 : Object) : boolean
containsAll(arg0 : Collection<?>) : boolean
addAll(arg0 : Collection<?>) : boolean
addAll(arg0 : int, arg1 : Collection<?>) : boolean
removeAll(arg0 : Collection<?>) : boolean
retainAll(arg0 : Collection<?>) : boolean
replaceAll(arg0 : UnaryOperator<E>)
sort(arg0 : Comparator<?>)
clear()
equals(arg0 : Object) : boolean
hashCode() : int
get(arg0 : int) : E
set(arg0 : int, arg1 : E) : E
add(arg0 : int, arg1 : E)
remove(arg0 : int) : E
indexOf(arg0 : Object) : int
lastIndexOf(arg0 : Object) : int
listIterator() : ListIterator<E>
listIterator(arg0 : int) : ListIterator<E>
subList(arg0 : int, arg1 : int) : List<E>
spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // java.util.ArrayList - c72 [label=<
ArrayList<E>
serialVersionUID : long
DEFAULT_CAPACITY : int
EMPTY_ELEMENTDATA : Object[]
DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[]
elementData : Object[]
size : int
MAX_ARRAY_SIZE : int
trimToSize()
ensureCapacity(arg0 : int)
ensureCapacityInternal(arg0 : int)
ensureExplicitCapacity(arg0 : int)
grow(arg0 : int)
hugeCapacity(arg0 : int) : int
size() : int
isEmpty() : boolean
contains(arg0 : Object) : boolean
indexOf(arg0 : Object) : int
lastIndexOf(arg0 : Object) : int
clone() : Object
toArray() : Object[]
toArray(arg0 : T[]) : T[]
elementData(arg0 : int) : E
get(arg0 : int) : E
set(arg0 : int, arg1 : E) : E
add(arg0 : E) : boolean
add(arg0 : int, arg1 : E)
remove(arg0 : int) : E
remove(arg0 : Object) : boolean
fastRemove(arg0 : int)
clear()
addAll(arg0 : Collection<?>) : boolean
addAll(arg0 : int, arg1 : Collection<?>) : boolean
removeRange(arg0 : int, arg1 : int)
rangeCheck(arg0 : int)
rangeCheckForAdd(arg0 : int)
outOfBoundsMsg(arg0 : int) : String
removeAll(arg0 : Collection<?>) : boolean
retainAll(arg0 : Collection<?>) : boolean
batchRemove(arg0 : Collection<?>, arg1 : boolean) : boolean
writeObject(arg0 : ObjectOutputStream)
readObject(arg0 : ObjectInputStream)
listIterator(arg0 : int) : ListIterator<E>
listIterator() : ListIterator<E>
iterator() : Iterator<E>
subList(arg0 : int, arg1 : int) : List<E>
subListRangeCheck(arg0 : int, arg1 : int, arg2 : int)
forEach(arg0 : Consumer<?>)
spliterator() : Spliterator<E>
removeIf(arg0 : Predicate<?>) : boolean
replaceAll(arg0 : UnaryOperator<E>)
sort(arg0 : Comparator<?>)
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// A +c66 [label=<
A
first : B
second : B
third : C
>]; +// B +c67 [label=<
B
doSomething(b : B, c : C) : A
>]; +// C +c68 [label=<
C
collectionOfA : List<A>
collectionOfB : ArrayList<B>
mapOfD : Map<String, D>
childs : C[]
anOpaqueList : List<>
>]; +// MyFunnyList +c69 [label=<
MyFunnyList<T, V>
myField : V
>]; +// MyList +c70 [label=<
MyList
>]; +// D +c71 [label=<
D
anotherListOfA : MyList
>]; +//MyFunnyList extends java.util.ArrayList +c72:p -> c69:p [arrowtail=empty,dir=back,weight=10]; +//MyList extends MyFunnyList +c69:p -> c70:p [arrowtail=empty,dir=back,weight=10]; +// A has B +c66:p -> c67:p [arrowhead=none,arrowtail=ediamond,dir=back,weight=4]; +// A has C +c66:p -> c68:p [arrowhead=none,arrowtail=ediamond,dir=back,weight=4]; +// C navassoc B +c68:p -> c67:p [arrowhead=open,weight=1,headlabel="*"]; +// C navassoc D +c68:p -> c71:p [arrowhead=open,weight=1,headlabel="*"]; +// C navassoc C +c68:p -> c68:p [arrowhead=open,weight=1,headlabel="*"]; +// C navassoc java.util.List +c68:p -> c73:p [arrowhead=open,weight=1]; +// D navassoc MyList +c71:p -> c70:p [arrowhead=open,weight=1]; +// B depend A +c67:p -> c66:p [arrowhead=open,style=dashed,weight=0]; +// java.util.List +c73 [label=<
«interface»
List<E>
size() : int
isEmpty() : boolean
contains(arg0 : Object) : boolean
iterator() : Iterator<E>
toArray() : Object[]
toArray(arg0 : T[]) : T[]
add(arg0 : E) : boolean
remove(arg0 : Object) : boolean
containsAll(arg0 : Collection<?>) : boolean
addAll(arg0 : Collection<?>) : boolean
addAll(arg0 : int, arg1 : Collection<?>) : boolean
removeAll(arg0 : Collection<?>) : boolean
retainAll(arg0 : Collection<?>) : boolean
replaceAll(arg0 : UnaryOperator<E>)
sort(arg0 : Comparator<?>)
clear()
equals(arg0 : Object) : boolean
hashCode() : int
get(arg0 : int) : E
set(arg0 : int, arg1 : E) : E
add(arg0 : int, arg1 : E)
remove(arg0 : int) : E
indexOf(arg0 : Object) : int
lastIndexOf(arg0 : Object) : int
listIterator() : ListIterator<E>
listIterator(arg0 : int) : ListIterator<E>
subList(arg0 : int, arg1 : int) : List<E>
spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"]; +// java.util.ArrayList +c72 [label=<
ArrayList<E>
serialVersionUID : long
DEFAULT_CAPACITY : int
EMPTY_ELEMENTDATA : Object[]
DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[]
elementData : Object[]
size : int
MAX_ARRAY_SIZE : int
trimToSize()
ensureCapacity(arg0 : int)
ensureCapacityInternal(arg0 : int)
ensureExplicitCapacity(arg0 : int)
grow(arg0 : int)
hugeCapacity(arg0 : int) : int
size() : int
isEmpty() : boolean
contains(arg0 : Object) : boolean
indexOf(arg0 : Object) : int
lastIndexOf(arg0 : Object) : int
clone() : Object
toArray() : Object[]
toArray(arg0 : T[]) : T[]
elementData(arg0 : int) : E
get(arg0 : int) : E
set(arg0 : int, arg1 : E) : E
add(arg0 : E) : boolean
add(arg0 : int, arg1 : E)
remove(arg0 : int) : E
remove(arg0 : Object) : boolean
fastRemove(arg0 : int)
clear()
addAll(arg0 : Collection<?>) : boolean
addAll(arg0 : int, arg1 : Collection<?>) : boolean
removeRange(arg0 : int, arg1 : int)
rangeCheck(arg0 : int)
rangeCheckForAdd(arg0 : int)
outOfBoundsMsg(arg0 : int) : String
removeAll(arg0 : Collection<?>) : boolean
retainAll(arg0 : Collection<?>) : boolean
batchRemove(arg0 : Collection<?>, arg1 : boolean) : boolean
writeObject(arg0 : ObjectOutputStream)
readObject(arg0 : ObjectInputStream)
listIterator(arg0 : int) : ListIterator<E>
listIterator() : ListIterator<E>
iterator() : Iterator<E>
subList(arg0 : int, arg1 : int) : List<E>
subListRangeCheck(arg0 : int, arg1 : int, arg2 : int)
forEach(arg0 : Consumer<?>)
spliterator() : Spliterator<E>
removeIf(arg0 : Predicate<?>) : boolean
replaceAll(arg0 : UnaryOperator<E>)
sort(arg0 : Comparator<?>)
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html"]; } diff --git a/testdata/dot-ref/Irp.dot b/testdata/dot-ref/Irp.dot index fe3da57..c23a426 100644 --- a/testdata/dot-ref/Irp.dot +++ b/testdata/dot-ref/Irp.dot @@ -5,19 +5,20 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Application - c74 [label=<
Application
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // IrpApplication - c75 [label=<
IrpApplication
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Main - c76 [label=<
Main
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //IrpApplication extends Application - c74:p -> c75:p [dir=back,arrowtail=empty]; - // Main DEPEND IrpApplication - c76:p -> c75:p [taillabel="", label="«friend»", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Application +c74 [label=<
Application
>]; +// IrpApplication +c75 [label=<
IrpApplication
>]; +// Main +c76 [label=<
Main
>]; +//IrpApplication extends Application +c74:p -> c75:p [arrowtail=empty,dir=back,weight=10]; +// Main depend IrpApplication +c76:p -> c75:p [arrowhead=open,style=dashed,weight=0,label="«friend»"]; } diff --git a/testdata/dot-ref/MultiAssoc.dot b/testdata/dot-ref/MultiAssoc.dot index 63a42fa..230d5e8 100644 --- a/testdata/dot-ref/MultiAssoc.dot +++ b/testdata/dot-ref/MultiAssoc.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // A - c81 [label=<
A
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // C - c83 [label=<
C
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // A DEPEND C - c81:p -> c83:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// A +c81 [label=<
A
>]; +// C +c83 [label=<
C
>]; +// A depend C +c81:p -> c83:p [arrowhead=open,style=dashed,weight=0]; } diff --git a/testdata/dot-ref/MyVector.dot b/testdata/dot-ref/MyVector.dot index 734024d..29c0127 100644 --- a/testdata/dot-ref/MyVector.dot +++ b/testdata/dot-ref/MyVector.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // MyVector - c85 [label=<
MyVector<E, P>
~ addAll(index : int, c : Collection<E>) : boolean
~ foo(x : MyVector<P, MyVector<E, E>>) : MyVector<E, P>
~ removeAll(c : Collection<?>) : boolean
~ set(index : int, element : E) : E
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //MyVector extends java.util.Vector - c86:p -> c85:p [dir=back,arrowtail=empty]; - //MyVector implements java.util.List - c87:p -> c85:p [dir=back,arrowtail=empty,style=dashed]; - //MyVector implements java.util.RandomAccess - c88:p -> c85:p [dir=back,arrowtail=empty,style=dashed]; - //MyVector implements java.lang.Cloneable - c89:p -> c85:p [dir=back,arrowtail=empty,style=dashed]; - // java.util.RandomAccess - c88 [label=<
«interface»
RandomAccess
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // java.util.List - c87 [label=<
«interface»
List<E>
+ size() : int
+ isEmpty() : boolean
+ contains(arg0 : Object) : boolean
+ iterator() : Iterator<E>
+ toArray() : Object[]
+ toArray(arg0 : T[]) : T[]
+ add(arg0 : E) : boolean
+ remove(arg0 : Object) : boolean
+ containsAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : int, arg1 : Collection<?>) : boolean
+ removeAll(arg0 : Collection<?>) : boolean
+ retainAll(arg0 : Collection<?>) : boolean
+ replaceAll(arg0 : UnaryOperator<E>)
+ sort(arg0 : Comparator<?>)
+ clear()
+ equals(arg0 : Object) : boolean
+ hashCode() : int
+ get(arg0 : int) : E
+ set(arg0 : int, arg1 : E) : E
+ add(arg0 : int, arg1 : E)
+ remove(arg0 : int) : E
+ indexOf(arg0 : Object) : int
+ lastIndexOf(arg0 : Object) : int
+ listIterator() : ListIterator<E>
+ listIterator(arg0 : int) : ListIterator<E>
+ subList(arg0 : int, arg1 : int) : List<E>
+ spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // java.lang.Cloneable - c89 [label=<
«interface»
Cloneable
>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // java.util.Vector - c86 [label=<
Vector<E>
# elementData : Object[]
# elementCount : int
# capacityIncrement : int
- serialVersionUID : long
- MAX_ARRAY_SIZE : int
+ copyInto(arg0 : Object[])
+ trimToSize()
+ ensureCapacity(arg0 : int)
- ensureCapacityHelper(arg0 : int)
- grow(arg0 : int)
- hugeCapacity(arg0 : int) : int
+ setSize(arg0 : int)
+ capacity() : int
+ size() : int
+ isEmpty() : boolean
+ elements() : Enumeration<E>
+ contains(arg0 : Object) : boolean
+ indexOf(arg0 : Object) : int
+ indexOf(arg0 : Object, arg1 : int) : int
+ lastIndexOf(arg0 : Object) : int
+ lastIndexOf(arg0 : Object, arg1 : int) : int
+ elementAt(arg0 : int) : E
+ firstElement() : E
+ lastElement() : E
+ setElementAt(arg0 : E, arg1 : int)
+ removeElementAt(arg0 : int)
+ insertElementAt(arg0 : E, arg1 : int)
+ addElement(arg0 : E)
+ removeElement(arg0 : Object) : boolean
+ removeAllElements()
+ clone() : Object
+ toArray() : Object[]
+ toArray(arg0 : T[]) : T[]
~ elementData(arg0 : int) : E
+ get(arg0 : int) : E
+ set(arg0 : int, arg1 : E) : E
+ add(arg0 : E) : boolean
+ remove(arg0 : Object) : boolean
+ add(arg0 : int, arg1 : E)
+ remove(arg0 : int) : E
+ clear()
+ containsAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : Collection<?>) : boolean
+ removeAll(arg0 : Collection<?>) : boolean
+ retainAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : int, arg1 : Collection<?>) : boolean
+ equals(arg0 : Object) : boolean
+ hashCode() : int
+ toString() : String
+ subList(arg0 : int, arg1 : int) : List<E>
# removeRange(arg0 : int, arg1 : int)
- writeObject(arg0 : ObjectOutputStream)
+ listIterator(arg0 : int) : ListIterator<E>
+ listIterator() : ListIterator<E>
+ iterator() : Iterator<E>
+ forEach(arg0 : Consumer<?>)
+ removeIf(arg0 : Predicate<?>) : boolean
+ replaceAll(arg0 : UnaryOperator<E>)
+ sort(arg0 : Comparator<?>)
+ spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// MyVector +c85 [label=<
MyVector<E, P>
~ addAll(index : int, c : Collection<E>) : boolean
~ foo(x : MyVector<P, MyVector<E, E>>) : MyVector<E, P>
~ removeAll(c : Collection<?>) : boolean
~ set(index : int, element : E) : E
>]; +//MyVector extends java.util.Vector +c86:p -> c85:p [arrowtail=empty,dir=back,weight=10]; +//MyVector implements java.util.List +c87:p -> c85:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//MyVector implements java.util.RandomAccess +c88:p -> c85:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//MyVector implements java.lang.Cloneable +c89:p -> c85:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +// java.util.RandomAccess +c88 [label=<
«interface»
RandomAccess
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html"]; +// java.util.List +c87 [label=<
«interface»
List<E>
+ size() : int
+ isEmpty() : boolean
+ contains(arg0 : Object) : boolean
+ iterator() : Iterator<E>
+ toArray() : Object[]
+ toArray(arg0 : T[]) : T[]
+ add(arg0 : E) : boolean
+ remove(arg0 : Object) : boolean
+ containsAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : int, arg1 : Collection<?>) : boolean
+ removeAll(arg0 : Collection<?>) : boolean
+ retainAll(arg0 : Collection<?>) : boolean
+ replaceAll(arg0 : UnaryOperator<E>)
+ sort(arg0 : Comparator<?>)
+ clear()
+ equals(arg0 : Object) : boolean
+ hashCode() : int
+ get(arg0 : int) : E
+ set(arg0 : int, arg1 : E) : E
+ add(arg0 : int, arg1 : E)
+ remove(arg0 : int) : E
+ indexOf(arg0 : Object) : int
+ lastIndexOf(arg0 : Object) : int
+ listIterator() : ListIterator<E>
+ listIterator(arg0 : int) : ListIterator<E>
+ subList(arg0 : int, arg1 : int) : List<E>
+ spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"]; +// java.lang.Cloneable +c89 [label=<
«interface»
Cloneable
>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html"]; +// java.util.Vector +c86 [label=<
Vector<E>
# elementData : Object[]
# elementCount : int
# capacityIncrement : int
- serialVersionUID : long
- MAX_ARRAY_SIZE : int
+ copyInto(arg0 : Object[])
+ trimToSize()
+ ensureCapacity(arg0 : int)
- ensureCapacityHelper(arg0 : int)
- grow(arg0 : int)
- hugeCapacity(arg0 : int) : int
+ setSize(arg0 : int)
+ capacity() : int
+ size() : int
+ isEmpty() : boolean
+ elements() : Enumeration<E>
+ contains(arg0 : Object) : boolean
+ indexOf(arg0 : Object) : int
+ indexOf(arg0 : Object, arg1 : int) : int
+ lastIndexOf(arg0 : Object) : int
+ lastIndexOf(arg0 : Object, arg1 : int) : int
+ elementAt(arg0 : int) : E
+ firstElement() : E
+ lastElement() : E
+ setElementAt(arg0 : E, arg1 : int)
+ removeElementAt(arg0 : int)
+ insertElementAt(arg0 : E, arg1 : int)
+ addElement(arg0 : E)
+ removeElement(arg0 : Object) : boolean
+ removeAllElements()
+ clone() : Object
+ toArray() : Object[]
+ toArray(arg0 : T[]) : T[]
~ elementData(arg0 : int) : E
+ get(arg0 : int) : E
+ set(arg0 : int, arg1 : E) : E
+ add(arg0 : E) : boolean
+ remove(arg0 : Object) : boolean
+ add(arg0 : int, arg1 : E)
+ remove(arg0 : int) : E
+ clear()
+ containsAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : Collection<?>) : boolean
+ removeAll(arg0 : Collection<?>) : boolean
+ retainAll(arg0 : Collection<?>) : boolean
+ addAll(arg0 : int, arg1 : Collection<?>) : boolean
+ equals(arg0 : Object) : boolean
+ hashCode() : int
+ toString() : String
+ subList(arg0 : int, arg1 : int) : List<E>
# removeRange(arg0 : int, arg1 : int)
- writeObject(arg0 : ObjectOutputStream)
+ listIterator(arg0 : int) : ListIterator<E>
+ listIterator() : ListIterator<E>
+ iterator() : Iterator<E>
+ forEach(arg0 : Consumer<?>)
+ removeIf(arg0 : Predicate<?>) : boolean
+ replaceAll(arg0 : UnaryOperator<E>)
+ sort(arg0 : Comparator<?>)
+ spliterator() : Spliterator<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html"]; } diff --git a/testdata/dot-ref/Root.dot b/testdata/dot-ref/Root.dot index f912672..93499ea 100644 --- a/testdata/dot-ref/Root.dot +++ b/testdata/dot-ref/Root.dot @@ -5,43 +5,44 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Root - c90 [label=<
Root
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Adapter - c91 [label=<
Adapter
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Element - c92 [label=<
Element
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ObjectType - c93 [label=<
ObjectType
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ObjectMap - c94 [label=<
ObjectMap
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Table - c95 [label=<
Table
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // DataOperation - c96 [label=<
DataOperation
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Root ASSOC Adapter - c90:p -> c91:p [taillabel="1..1", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Root ASSOC ObjectType - c90:p -> c93:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Root ASSOC ObjectMap - c90:p -> c94:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Root ASSOC Table - c90:p -> c95:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Root ASSOC DataOperation - c90:p -> c96:p [taillabel="", label="", headlabel="0..n", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - //ObjectType extends Element - c92:p -> c93:p [dir=back,arrowtail=empty]; - //ObjectMap extends Element - c92:p -> c94:p [dir=back,arrowtail=empty]; - // ObjectMap HAS ObjectType - c94:p -> c93:p [taillabel="1..1", label="", headlabel="1..1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both]; - //Table extends Element - c92:p -> c95:p [dir=back,arrowtail=empty]; - //DataOperation extends Element - c92:p -> c96:p [dir=back,arrowtail=empty]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Root +c90 [label=<
Root
>]; +// Adapter +c91 [label=<
Adapter
>]; +// Element +c92 [label=<
Element
>]; +// ObjectType +c93 [label=<
ObjectType
>]; +// ObjectMap +c94 [label=<
ObjectMap
>]; +// Table +c95 [label=<
Table
>]; +// DataOperation +c96 [label=<
DataOperation
>]; +// Root assoc Adapter +c90:p -> c91:p [arrowhead=none,weight=2,taillabel="1..1", headlabel="0..n"]; +// Root assoc ObjectType +c90:p -> c93:p [arrowhead=none,weight=2,headlabel="0..n"]; +// Root assoc ObjectMap +c90:p -> c94:p [arrowhead=none,weight=2,headlabel="0..n"]; +// Root assoc Table +c90:p -> c95:p [arrowhead=none,weight=2,headlabel="0..n"]; +// Root assoc DataOperation +c90:p -> c96:p [arrowhead=none,weight=2,headlabel="0..n"]; +//ObjectType extends Element +c92:p -> c93:p [arrowtail=empty,dir=back,weight=10]; +//ObjectMap extends Element +c92:p -> c94:p [arrowtail=empty,dir=back,weight=10]; +// ObjectMap has ObjectType +c94:p -> c93:p [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..1", headlabel="1..1"]; +//Table extends Element +c92:p -> c95:p [arrowtail=empty,dir=back,weight=10]; +//DataOperation extends Element +c92:p -> c96:p [arrowtail=empty,dir=back,weight=10]; } diff --git a/testdata/dot-ref/RunnableRef.dot b/testdata/dot-ref/RunnableRef.dot index 27b145d..b2aaa42 100644 --- a/testdata/dot-ref/RunnableRef.dot +++ b/testdata/dot-ref/RunnableRef.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // test.RunnableRef - c98 [label=<
RunnableRef
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // test.RunnableRef DEPEND java.lang.Runnable - c98:p -> c99:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; - // java.lang.Runnable - c99 [label=<
«interface»
Runnable
>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// test.RunnableRef +c98 [label=<
RunnableRef
>]; +// test.RunnableRef depend java.lang.Runnable +c98:p -> c99:p [arrowhead=open,style=dashed,weight=0]; +// java.lang.Runnable +c99 [label=<
«interface»
Runnable
>, URL="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html"]; } diff --git a/testdata/dot-ref/Style.dot b/testdata/dot-ref/Style.dot index 6d2a255..f4a2200 100644 --- a/testdata/dot-ref/Style.dot +++ b/testdata/dot-ref/Style.dot @@ -5,23 +5,24 @@ # digraph G { - edge [fontname="arial",fontsize=10,labelfontname="arial",labelfontsize=10]; - node [fontname="arial",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // net.sf.whatever.test.AbstractBase - c112 [label=<
«base»
AbstractBase
net.sf.whatever.test
{since = 1.0}
field : int
{since = 1.5}
abstractMethod()
concreteMethod() : int
>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0]; - // net.sf.whatever.test.Composite - c113 [label=<
Composite
net.sf.whatever.test
>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0]; - // net.sf.whatever.test.Style - c114 [label=<
Style
net.sf.whatever.test
>, URL="null", fontname="arial", fontcolor="black", fontsize=9.0]; - //net.sf.whatever.test.Composite extends net.sf.whatever.test.AbstractBase - c112:p -> c113:p [dir=back,arrowtail=empty]; - // net.sf.whatever.test.Composite COMPOSED from.Outer.Space.AlienClass - c113:p -> c115:p [taillabel="1", label="has", headlabel="*", fontname="arial", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - //net.sf.whatever.test.Style extends net.sf.whatever.test.AbstractBase - c112:p -> c114:p [dir=back,arrowtail=empty]; - // from.Outer.Space.AlienClass - c115[label=<
AlienClass
from.Outer.Space
>, fontname="arial", fontcolor="black", fontsize=9.0]; +graph [fontnames="svg"] +edge [fontname="arial",fontsize=10,labelfontname="arial",labelfontsize=10,color="black"]; +node [fontname="arial",fontcolor="black",fontsize=9,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// net.sf.whatever.test.AbstractBase +c112 [label=<
«base»
AbstractBase
net.sf.whatever.test
{since = 1.0}
field : int
{since = 1.5}
abstractMethod()
concreteMethod() : int
>]; +// net.sf.whatever.test.Composite +c113 [label=<
Composite
net.sf.whatever.test
>]; +// net.sf.whatever.test.Style +c114 [label=<
Style
net.sf.whatever.test
>]; +//net.sf.whatever.test.Composite extends net.sf.whatever.test.AbstractBase +c112:p -> c113:p [arrowtail=empty,dir=back,weight=10]; +// net.sf.whatever.test.Composite composed from.Outer.Space.AlienClass +c113:p -> c115:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1",label="has",headlabel="*"]; +//net.sf.whatever.test.Style extends net.sf.whatever.test.AbstractBase +c112:p -> c114:p [arrowtail=empty,dir=back,weight=10]; +// from.Outer.Space.AlienClass +c115[label=<
AlienClass
from.Outer.Space
>]; } - + diff --git a/testdata/dot-ref/TestHideOp.dot b/testdata/dot-ref/TestHideOp.dot index 661db51..92ea15a 100644 --- a/testdata/dot-ref/TestHideOp.dot +++ b/testdata/dot-ref/TestHideOp.dot @@ -5,11 +5,12 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // test.TestHideOp - c117 [label=<
TestHideOp
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// test.TestHideOp +c117 [label=<
TestHideOp
>]; } diff --git a/testdata/dot-ref/ViewAll.dot b/testdata/dot-ref/ViewAll.dot index bb8a66d..4380432 100644 --- a/testdata/dot-ref/ViewAll.dot +++ b/testdata/dot-ref/ViewAll.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.invoice.InvoiceItem - c355 [label=<
InvoiceItem
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Invoice - c356 [label=<
Invoice
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Customer - c357 [label=<
Customer
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product - c358 [label=<
Product
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c359 [label=<
Category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product - c355:p -> c358:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer - c356:p -> c357:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem - c356:p -> c355:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c358:p -> c359:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.invoice.InvoiceItem +c355 [label=<
InvoiceItem
>]; +// gr.spinellis.basic.invoice.Invoice +c356 [label=<
Invoice
>]; +// gr.spinellis.basic.invoice.Customer +c357 [label=<
Customer
>]; +// gr.spinellis.basic.product.Product +c358 [label=<
Product
>]; +// gr.spinellis.basic.product.Category +c359 [label=<
Category
>]; +// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product +c355:p -> c358:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer +c356:p -> c357:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem +c356:p -> c355:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c358:p -> c359:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewAllDetailed.dot b/testdata/dot-ref/ViewAllDetailed.dot index 079b0f7..9413de1 100644 --- a/testdata/dot-ref/ViewAllDetailed.dot +++ b/testdata/dot-ref/ViewAllDetailed.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.invoice.InvoiceItem - c317 [label=<
InvoiceItem
product : Product
quantity : int
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Invoice - c318 [label=<
Invoice
total : double
items : InvoiceItem[]
customer : Customer
addItem(p : Product, quantity : int)
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Customer - c319 [label=<
Customer
name : String
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product - c320 [label=<
Product
name : String
stock : int
price : double
category : Category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c321 [label=<
Category
name : String
products : List<>
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product - c317:p -> c320:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer - c318:p -> c319:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem - c318:p -> c317:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c320:p -> c321:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.invoice.InvoiceItem +c317 [label=<
InvoiceItem
product : Product
quantity : int
>]; +// gr.spinellis.basic.invoice.Invoice +c318 [label=<
Invoice
total : double
items : InvoiceItem[]
customer : Customer
addItem(p : Product, quantity : int)
>]; +// gr.spinellis.basic.invoice.Customer +c319 [label=<
Customer
name : String
>]; +// gr.spinellis.basic.product.Product +c320 [label=<
Product
name : String
stock : int
price : double
category : Category
>]; +// gr.spinellis.basic.product.Category +c321 [label=<
Category
name : String
products : List<>
>]; +// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product +c317:p -> c320:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer +c318:p -> c319:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem +c318:p -> c317:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c320:p -> c321:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewAtt.dot b/testdata/dot-ref/ViewAtt.dot index 07f93ca..cd7a8a3 100644 --- a/testdata/dot-ref/ViewAtt.dot +++ b/testdata/dot-ref/ViewAtt.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.invoice.InvoiceItem - c279 [label=<
InvoiceItem
product
quantity
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0]; - // gr.spinellis.basic.invoice.Invoice - c280 [label=<
Invoice
total
items
customer
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0]; - // gr.spinellis.basic.invoice.Customer - c281 [label=<
Customer
name
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0]; - // gr.spinellis.basic.product.Product - c282 [label=<
Product
name
stock
price
category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0]; - // gr.spinellis.basic.product.Category - c283 [label=<
Category
name
products
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=16.0]; - // gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product - c279:p -> c282:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer - c280:p -> c281:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem - c280:p -> c279:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c282:p -> c283:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.invoice.InvoiceItem +c279 [label=<
InvoiceItem
product
quantity
>, fontname="Helvetica", fontcolor="black", fontsize=16.0]; +// gr.spinellis.basic.invoice.Invoice +c280 [label=<
Invoice
total
items
customer
>, fontname="Helvetica", fontcolor="black", fontsize=16.0]; +// gr.spinellis.basic.invoice.Customer +c281 [label=<
Customer
name
>, fontname="Helvetica", fontcolor="black", fontsize=16.0]; +// gr.spinellis.basic.product.Product +c282 [label=<
Product
name
stock
price
category
>, fontname="Helvetica", fontcolor="black", fontsize=16.0]; +// gr.spinellis.basic.product.Category +c283 [label=<
Category
name
products
>, fontname="Helvetica", fontcolor="black", fontsize=16.0]; +// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product +c279:p -> c282:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer +c280:p -> c281:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem +c280:p -> c279:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c282:p -> c283:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewChildEmpty.dot b/testdata/dot-ref/ViewChildEmpty.dot index d525e6e..8cd3f95 100644 --- a/testdata/dot-ref/ViewChildEmpty.dot +++ b/testdata/dot-ref/ViewChildEmpty.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.product.Product - c244 [label=<
Product
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c245 [label=<
Category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c244:p -> c245:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.product.Product +c244 [label=<
Product
>]; +// gr.spinellis.basic.product.Category +c245 [label=<
Category
>]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c244:p -> c245:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewChildOverride.dot b/testdata/dot-ref/ViewChildOverride.dot index 1ab5aab..e798251 100644 --- a/testdata/dot-ref/ViewChildOverride.dot +++ b/testdata/dot-ref/ViewChildOverride.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.product.Product - c206 [label=<
Product
name
stock
price
category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c207 [label=<
Category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c206:p -> c207:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.product.Product +c206 [label=<
Product
name
stock
price
category
>]; +// gr.spinellis.basic.product.Category +c207 [label=<
Category
>]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c206:p -> c207:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewColors.dot b/testdata/dot-ref/ViewColors.dot index 2cb9a5a..09dc45a 100644 --- a/testdata/dot-ref/ViewColors.dot +++ b/testdata/dot-ref/ViewColors.dot @@ -5,31 +5,32 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.invoice.InvoiceItem - c164 [label=<
InvoiceItem
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Invoice - c165 [label=<
Invoice
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.Customer - c166 [label=<
Customer
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product - c167 [label=<
Product
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c168 [label=<
Category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.invoice.InvoiceItem ASSOC gr.spinellis.basic.product.Product - c164:p -> c167:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice ASSOC gr.spinellis.basic.invoice.Customer - c165:p -> c166:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.invoice.Invoice COMPOSED gr.spinellis.basic.invoice.InvoiceItem - c165:p -> c164:p [taillabel="1", label="", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c167:p -> c168:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // gr.spinellis.basic.product.Category DEPEND java.util.List - c168:p -> c202:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; - // java.util.List - c202 [label=<
«interface»
List<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.invoice.InvoiceItem +c164 [label=<
InvoiceItem
>]; +// gr.spinellis.basic.invoice.Invoice +c165 [label=<
Invoice
>]; +// gr.spinellis.basic.invoice.Customer +c166 [label=<
Customer
>]; +// gr.spinellis.basic.product.Product +c167 [label=<
Product
>]; +// gr.spinellis.basic.product.Category +c168 [label=<
Category
>]; +// gr.spinellis.basic.invoice.InvoiceItem assoc gr.spinellis.basic.product.Product +c164:p -> c167:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice assoc gr.spinellis.basic.invoice.Customer +c165:p -> c166:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.invoice.Invoice composed gr.spinellis.basic.invoice.InvoiceItem +c165:p -> c164:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="*"]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c167:p -> c168:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; +// gr.spinellis.basic.product.Category depend java.util.List +c168:p -> c202:p [arrowhead=open,style=dashed,weight=0]; +// java.util.List +c202 [label=<
«interface»
List<E>
>, URL="http://docs.oracle.com/javase/7/docs/api/java/util/List.html"]; } diff --git a/testdata/dot-ref/ViewContext.dot b/testdata/dot-ref/ViewContext.dot index b5bab9b..134c5f9 100644 --- a/testdata/dot-ref/ViewContext.dot +++ b/testdata/dot-ref/ViewContext.dot @@ -5,39 +5,40 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.context.classes.AClient - c424 [label=<
AClient
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.ASubclass - c426 [label=<
ASubclass
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.E - c427 [label=<
E
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.D - c429 [label=<
D
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.B - c432 [label=<
B
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.ABaseClass - c433 [label=<
ABaseClass
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.context.classes.A - c434 [label=<
A
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //gr.spinellis.context.classes.ASubclass extends gr.spinellis.context.classes.A - c434:p -> c426:p [dir=back,arrowtail=empty]; - //gr.spinellis.context.classes.A extends gr.spinellis.context.classes.ABaseClass - c433:p -> c434:p [dir=back,arrowtail=empty]; - // gr.spinellis.context.classes.D NAVASSOC gr.spinellis.context.classes.A - c429:p -> c434:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // gr.spinellis.context.classes.A NAVASSOC gr.spinellis.context.classes.B - c434:p -> c432:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // gr.spinellis.context.classes.A NAVASSOC javax.swing.JComponent - c434:p -> c509:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // gr.spinellis.context.classes.AClient DEPEND gr.spinellis.context.classes.A - c424:p -> c434:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; - // gr.spinellis.context.classes.A DEPEND gr.spinellis.context.classes.E - c434:p -> c427:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; - // javax.swing.JComponent - c509 [label=<
JComponent
>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.context.classes.AClient +c424 [label=<
AClient
>]; +// gr.spinellis.context.classes.ASubclass +c426 [label=<
ASubclass
>]; +// gr.spinellis.context.classes.E +c427 [label=<
E
>]; +// gr.spinellis.context.classes.D +c429 [label=<
D
>]; +// gr.spinellis.context.classes.B +c432 [label=<
B
>]; +// gr.spinellis.context.classes.ABaseClass +c433 [label=<
ABaseClass
>]; +// gr.spinellis.context.classes.A +c434 [label=<
A
>]; +//gr.spinellis.context.classes.ASubclass extends gr.spinellis.context.classes.A +c434:p -> c426:p [arrowtail=empty,dir=back,weight=10]; +//gr.spinellis.context.classes.A extends gr.spinellis.context.classes.ABaseClass +c433:p -> c434:p [arrowtail=empty,dir=back,weight=10]; +// gr.spinellis.context.classes.D navassoc gr.spinellis.context.classes.A +c429:p -> c434:p [arrowhead=open,weight=1]; +// gr.spinellis.context.classes.A navassoc gr.spinellis.context.classes.B +c434:p -> c432:p [arrowhead=open,weight=1]; +// gr.spinellis.context.classes.A navassoc javax.swing.JComponent +c434:p -> c509:p [arrowhead=open,weight=1]; +// gr.spinellis.context.classes.AClient depend gr.spinellis.context.classes.A +c424:p -> c434:p [arrowhead=open,style=dashed,weight=0]; +// gr.spinellis.context.classes.A depend gr.spinellis.context.classes.E +c434:p -> c427:p [arrowhead=open,style=dashed,weight=0]; +// javax.swing.JComponent +c509 [label=<
JComponent
>, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html"]; } diff --git a/testdata/dot-ref/ViewInterfaces.dot b/testdata/dot-ref/ViewInterfaces.dot index f7d2b69..ddfd00d 100644 --- a/testdata/dot-ref/ViewInterfaces.dot +++ b/testdata/dot-ref/ViewInterfaces.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.iface.classes.FarImplementor - c534 [label=<
FarImplementor
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.iface.classes.DirectImplementor - c535 [label=<
DirectImplementor
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.iface.classes.SubSubFace - c537 [label=<
«interface»
SubSubFace
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.iface.classes.SubFace - c538 [label=<
«interface»
SubFace
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.iface.classes.Face - c539 [label=<
«interface»
Face
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //gr.spinellis.iface.classes.FarImplementor implements gr.spinellis.iface.classes.SubSubFace - c537:p -> c534:p [dir=back,arrowtail=empty,style=dashed]; - //gr.spinellis.iface.classes.DirectImplementor implements gr.spinellis.iface.classes.Face - c539:p -> c535:p [dir=back,arrowtail=empty,style=dashed]; - //gr.spinellis.iface.classes.SubSubFace implements gr.spinellis.iface.classes.SubFace - c538:p -> c537:p [dir=back,arrowtail=empty,style=dashed]; - //gr.spinellis.iface.classes.SubFace implements gr.spinellis.iface.classes.Face - c539:p -> c538:p [dir=back,arrowtail=empty,style=dashed]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.iface.classes.FarImplementor +c534 [label=<
FarImplementor
>]; +// gr.spinellis.iface.classes.DirectImplementor +c535 [label=<
DirectImplementor
>]; +// gr.spinellis.iface.classes.SubSubFace +c537 [label=<
«interface»
SubSubFace
>]; +// gr.spinellis.iface.classes.SubFace +c538 [label=<
«interface»
SubFace
>]; +// gr.spinellis.iface.classes.Face +c539 [label=<
«interface»
Face
>]; +//gr.spinellis.iface.classes.FarImplementor implements gr.spinellis.iface.classes.SubSubFace +c537:p -> c534:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//gr.spinellis.iface.classes.DirectImplementor implements gr.spinellis.iface.classes.Face +c539:p -> c535:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//gr.spinellis.iface.classes.SubSubFace implements gr.spinellis.iface.classes.SubFace +c538:p -> c537:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//gr.spinellis.iface.classes.SubFace implements gr.spinellis.iface.classes.Face +c539:p -> c538:p [arrowtail=empty,style=dashed,dir=back,weight=9]; } diff --git a/testdata/dot-ref/ViewProduct.dot b/testdata/dot-ref/ViewProduct.dot index 1c3c1ca..edba8fc 100644 --- a/testdata/dot-ref/ViewProduct.dot +++ b/testdata/dot-ref/ViewProduct.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.basic.product.Product - c129 [label=<
Product
name
stock
price
category
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Category - c130 [label=<
Category
name
products
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.basic.product.Product ASSOC gr.spinellis.basic.product.Category - c129:p -> c130:p [taillabel="*", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.basic.product.Product +c129 [label=<
Product
name
stock
price
category
>]; +// gr.spinellis.basic.product.Category +c130 [label=<
Category
name
products
>]; +// gr.spinellis.basic.product.Product assoc gr.spinellis.basic.product.Category +c129:p -> c130:p [arrowhead=none,weight=2,taillabel="*", headlabel="1"]; } diff --git a/testdata/dot-ref/ViewSubclasses.dot b/testdata/dot-ref/ViewSubclasses.dot index a4034a4..af02fd7 100644 --- a/testdata/dot-ref/ViewSubclasses.dot +++ b/testdata/dot-ref/ViewSubclasses.dot @@ -5,27 +5,28 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // gr.spinellis.subclass.classes.SubOneTwo - c580 [label=<
SubOneTwo
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.subclass.classes.SubOneOne - c581 [label=<
SubOneOne
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.subclass.classes.SubTwo - c582 [label=<
SubTwo
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.subclass.classes.SubOne - c583 [label=<
SubOne
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // gr.spinellis.subclass.classes.Super - c584 [label=<
Super
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //gr.spinellis.subclass.classes.SubOneTwo extends gr.spinellis.subclass.classes.SubOne - c583:p -> c580:p [dir=back,arrowtail=empty]; - //gr.spinellis.subclass.classes.SubOneOne extends gr.spinellis.subclass.classes.SubOne - c583:p -> c581:p [dir=back,arrowtail=empty]; - //gr.spinellis.subclass.classes.SubTwo extends gr.spinellis.subclass.classes.Super - c584:p -> c582:p [dir=back,arrowtail=empty]; - //gr.spinellis.subclass.classes.SubOne extends gr.spinellis.subclass.classes.Super - c584:p -> c583:p [dir=back,arrowtail=empty]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// gr.spinellis.subclass.classes.SubOneTwo +c580 [label=<
SubOneTwo
>]; +// gr.spinellis.subclass.classes.SubOneOne +c581 [label=<
SubOneOne
>]; +// gr.spinellis.subclass.classes.SubTwo +c582 [label=<
SubTwo
>]; +// gr.spinellis.subclass.classes.SubOne +c583 [label=<
SubOne
>]; +// gr.spinellis.subclass.classes.Super +c584 [label=<
Super
>]; +//gr.spinellis.subclass.classes.SubOneTwo extends gr.spinellis.subclass.classes.SubOne +c583:p -> c580:p [arrowtail=empty,dir=back,weight=10]; +//gr.spinellis.subclass.classes.SubOneOne extends gr.spinellis.subclass.classes.SubOne +c583:p -> c581:p [arrowtail=empty,dir=back,weight=10]; +//gr.spinellis.subclass.classes.SubTwo extends gr.spinellis.subclass.classes.Super +c584:p -> c582:p [arrowtail=empty,dir=back,weight=10]; +//gr.spinellis.subclass.classes.SubOne extends gr.spinellis.subclass.classes.Super +c584:p -> c583:p [arrowtail=empty,dir=back,weight=10]; } diff --git a/testdata/dot-ref/active.dot b/testdata/dot-ref/active.dot index ba5a021..3dad458 100644 --- a/testdata/dot-ref/active.dot +++ b/testdata/dot-ref/active.dot @@ -5,11 +5,12 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Active - c32 [label=<
Active
run()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Active +c32 [label=<
Active
run()
>]; } diff --git a/testdata/dot-ref/advrel.dot b/testdata/dot-ref/advrel.dot index 8c94435..7b41185 100644 --- a/testdata/dot-ref/advrel.dot +++ b/testdata/dot-ref/advrel.dot @@ -5,31 +5,32 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Controller - c5 [label=<
Controller
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // EmbeddedAgent - c6 [label=<
EmbeddedAgent
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // PowerManager - c7 [label=<
PowerManager
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // SetTopController - c8 [label=<
SetTopController
authorizationLevel
startUp()
shutDown()
connect()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ChannelIterator - c9 [label=<
ChannelIterator
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // URLStreamHandler - c10 [label=<
«interface»
URLStreamHandler
OpenConnection()
parseURL()
setURL()
toExternalForm()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //SetTopController extends Controller - c5:p -> c8:p [dir=back,arrowtail=empty]; - //SetTopController extends EmbeddedAgent - c6:p -> c8:p [dir=back,arrowtail=empty]; - //SetTopController implements URLStreamHandler - c10:p -> c8:p [dir=back,arrowtail=empty,style=dashed]; - // SetTopController NAVASSOC PowerManager - c8:p -> c7:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; - // ChannelIterator DEPEND SetTopController - c9:p -> c8:p [taillabel="", label="«friend»", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open, style=dashed]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Controller +c5 [label=<
Controller
>]; +// EmbeddedAgent +c6 [label=<
EmbeddedAgent
>]; +// PowerManager +c7 [label=<
PowerManager
>]; +// SetTopController +c8 [label=<
SetTopController
authorizationLevel
startUp()
shutDown()
connect()
>]; +// ChannelIterator +c9 [label=<
ChannelIterator
>]; +// URLStreamHandler +c10 [label=<
«interface»
URLStreamHandler
OpenConnection()
parseURL()
setURL()
toExternalForm()
>]; +//SetTopController extends Controller +c5:p -> c8:p [arrowtail=empty,dir=back,weight=10]; +//SetTopController extends EmbeddedAgent +c6:p -> c8:p [arrowtail=empty,dir=back,weight=10]; +//SetTopController implements URLStreamHandler +c10:p -> c8:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +// SetTopController navassoc PowerManager +c8:p -> c7:p [arrowhead=open,weight=1]; +// ChannelIterator depend SetTopController +c9:p -> c8:p [arrowhead=open,style=dashed,weight=0,label="«friend»"]; } diff --git a/testdata/dot-ref/assoc.dot b/testdata/dot-ref/assoc.dot index df9b3a1..d8c5ca5 100644 --- a/testdata/dot-ref/assoc.dot +++ b/testdata/dot-ref/assoc.dot @@ -5,20 +5,21 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - rankdir=LR; - // UserGroup - c12 [label=<
UserGroup
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // User - c13 [label=<
User
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Password - c14 [label=<
Password
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // UserGroup ASSOC User - c12:p -> c13:p [taillabel="*", label="", headlabel="*\n\n+user ", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // User NAVASSOC Password - c13:p -> c14:p [taillabel="1\n\n+owner\r", label="", headlabel="*\n\n+key", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +rankdir=LR; +// UserGroup +c12 [label=<
UserGroup
>]; +// User +c13 [label=<
User
>]; +// Password +c14 [label=<
Password
>]; +// UserGroup assoc User +c12:p -> c13:p [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "]; +// User navassoc Password +c13:p -> c14:p [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"]; } diff --git a/testdata/dot-ref/car.dot b/testdata/dot-ref/car.dot index 8429912..b152656 100644 --- a/testdata/dot-ref/car.dot +++ b/testdata/dot-ref/car.dot @@ -5,23 +5,24 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Tyre - c15 [label=<
Tyre
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Engine - c16 [label=<
Engine
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Body - c17 [label=<
Body
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Car - c18 [label=<
Car
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Car COMPOSED Tyre - c18:p -> c15:p [taillabel="1", label="", headlabel="4", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // Car COMPOSED Engine - c18:p -> c16:p [taillabel="1", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // Car COMPOSED Body - c18:p -> c17:p [taillabel="1", label="", headlabel="1", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Tyre +c15 [label=<
Tyre
>]; +// Engine +c16 [label=<
Engine
>]; +// Body +c17 [label=<
Body
>]; +// Car +c18 [label=<
Car
>]; +// Car composed Tyre +c18:p -> c15:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="4"]; +// Car composed Engine +c18:p -> c16:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"]; +// Car composed Body +c18:p -> c17:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1", headlabel="1"]; } diff --git a/testdata/dot-ref/catalina.dot b/testdata/dot-ref/catalina.dot index fe45d2d..aabe46c 100644 --- a/testdata/dot-ref/catalina.dot +++ b/testdata/dot-ref/catalina.dot @@ -5,53 +5,54 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // HttpResponseBase - c19 [label=<
HttpResponseBase
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // HttpResponseWrapper - c20 [label=<
HttpResponseWrapper
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // HttpResponseFacade - c21 [label=<
HttpResponseFacade
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ResponseWrapper - c22 [label=<
ResponseWrapper
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // HttpResponse - c23 [label=<
«interface»
HttpResponse
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ResponseBase - c24 [label=<
ResponseBase
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // HttpServletResponse - c25 [label=<
«interface»
HttpServletResponse
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ResponseFacade - c26 [label=<
ResponseFacade
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // ServletResponse - c27 [label=<
«interface»
ServletResponse
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Response - c28 [label=<
«interface»
Response
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //HttpResponseBase extends ResponseBase - c24:p -> c19:p [dir=back,arrowtail=empty]; - //HttpResponseBase implements HttpResponse - c23:p -> c19:p [dir=back,arrowtail=empty,style=dashed]; - //HttpResponseBase implements HttpServletResponse - c25:p -> c19:p [dir=back,arrowtail=empty,style=dashed]; - //HttpResponseWrapper extends ResponseWrapper - c22:p -> c20:p [dir=back,arrowtail=empty]; - //HttpResponseWrapper implements HttpResponse - c23:p -> c20:p [dir=back,arrowtail=empty,style=dashed]; - //HttpResponseFacade extends ResponseFacade - c26:p -> c21:p [dir=back,arrowtail=empty]; - //HttpResponseFacade implements HttpServletResponse - c25:p -> c21:p [dir=back,arrowtail=empty,style=dashed]; - //ResponseWrapper implements Response - c28:p -> c22:p [dir=back,arrowtail=empty,style=dashed]; - //HttpResponse implements Response - c28:p -> c23:p [dir=back,arrowtail=empty,style=dashed]; - //ResponseBase implements Response - c28:p -> c24:p [dir=back,arrowtail=empty,style=dashed]; - //ResponseBase implements ServletResponse - c27:p -> c24:p [dir=back,arrowtail=empty,style=dashed]; - //ResponseFacade implements ServletResponse - c27:p -> c26:p [dir=back,arrowtail=empty,style=dashed]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// HttpResponseBase +c19 [label=<
HttpResponseBase
>]; +// HttpResponseWrapper +c20 [label=<
HttpResponseWrapper
>]; +// HttpResponseFacade +c21 [label=<
HttpResponseFacade
>]; +// ResponseWrapper +c22 [label=<
ResponseWrapper
>]; +// HttpResponse +c23 [label=<
«interface»
HttpResponse
>]; +// ResponseBase +c24 [label=<
ResponseBase
>]; +// HttpServletResponse +c25 [label=<
«interface»
HttpServletResponse
>]; +// ResponseFacade +c26 [label=<
ResponseFacade
>]; +// ServletResponse +c27 [label=<
«interface»
ServletResponse
>]; +// Response +c28 [label=<
«interface»
Response
>]; +//HttpResponseBase extends ResponseBase +c24:p -> c19:p [arrowtail=empty,dir=back,weight=10]; +//HttpResponseBase implements HttpResponse +c23:p -> c19:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//HttpResponseBase implements HttpServletResponse +c25:p -> c19:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//HttpResponseWrapper extends ResponseWrapper +c22:p -> c20:p [arrowtail=empty,dir=back,weight=10]; +//HttpResponseWrapper implements HttpResponse +c23:p -> c20:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//HttpResponseFacade extends ResponseFacade +c26:p -> c21:p [arrowtail=empty,dir=back,weight=10]; +//HttpResponseFacade implements HttpServletResponse +c25:p -> c21:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//ResponseWrapper implements Response +c28:p -> c22:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//HttpResponse implements Response +c28:p -> c23:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//ResponseBase implements Response +c28:p -> c24:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//ResponseBase implements ServletResponse +c27:p -> c24:p [arrowtail=empty,style=dashed,dir=back,weight=9]; +//ResponseFacade implements ServletResponse +c27:p -> c26:p [arrowtail=empty,style=dashed,dir=back,weight=9]; } diff --git a/testdata/dot-ref/class-eg.dot b/testdata/dot-ref/class-eg.dot index 28f9188..e600e83 100644 --- a/testdata/dot-ref/class-eg.dot +++ b/testdata/dot-ref/class-eg.dot @@ -5,19 +5,20 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Person - c30 [label=<
Person
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Employee - c31 [label=<
Employee
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Client - c32 [label=<
Client
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //Employee extends Person - c30:p -> c31:p [dir=back,arrowtail=empty]; - //Client extends Person - c30:p -> c32:p [dir=back,arrowtail=empty]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Person +c30 [label=<
Person
>]; +// Employee +c31 [label=<
Employee
>]; +// Client +c32 [label=<
Client
>]; +//Employee extends Person +c30:p -> c31:p [arrowtail=empty,dir=back,weight=10]; +//Client extends Person +c30:p -> c32:p [arrowtail=empty,dir=back,weight=10]; } diff --git a/testdata/dot-ref/classadd.dot b/testdata/dot-ref/classadd.dot index 966a36c..bdd4995 100644 --- a/testdata/dot-ref/classadd.dot +++ b/testdata/dot-ref/classadd.dot @@ -5,11 +5,12 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // ActionQueue - c35 [label=<
«container»
ActionQueue
{version = 3.2}
add(a : Action)
add(a : Action, n : int)
{version = 1.0}
remove(n : int)
«query»
length() : int
«helper functions»
reorder()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// ActionQueue +c35 [label=<
«container»
ActionQueue
{version = 3.2}
add(a : Action)
add(a : Action, n : int)
{version = 1.0}
remove(n : int)
«query»
length() : int
«helper functions»
reorder()
>]; } diff --git a/testdata/dot-ref/color.dot b/testdata/dot-ref/color.dot index 77937b2..8c1ab49 100644 --- a/testdata/dot-ref/color.dot +++ b/testdata/dot-ref/color.dot @@ -5,25 +5,26 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Serif",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - bgcolor=".7 .9 1"; - - // Pixel - c37 [label=<
Pixel
- x : int
- y : int
>, URL="null", fontname="arial", fontcolor="white", fontsize=14.0]; - // Red - c38 [label=<
Red
>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0]; - // Green - c39 [label=<
Green
>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0]; - // Blue - c40 [label=<
Blue
>, URL="null", fontname="Serif", fontcolor="black", fontsize=14.0]; - // Pixel COMPOSED Red - c37:p -> c38:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both]; - // Pixel COMPOSED Green - c37:p -> c39:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both]; - // Pixel COMPOSED Blue - c37:p -> c40:p [taillabel="", label="", headlabel="", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="yellow", arrowhead=none, arrowtail=diamond, dir=both]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="yellow"]; +node [fontname="Serif",fontcolor="black",fontsize=14,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +bgcolor=".7 .9 1"; + +// Pixel +c37 [label=<
Pixel
- x : int
- y : int
>]; +// Red +c38 [label=<
Red
>]; +// Green +c39 [label=<
Green
>]; +// Blue +c40 [label=<
Blue
>]; +// Pixel composed Red +c37:p -> c38:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6]; +// Pixel composed Green +c37:p -> c39:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6]; +// Pixel composed Blue +c37:p -> c40:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6]; } - + diff --git a/testdata/dot-ref/ctor.dot b/testdata/dot-ref/ctor.dot index 0826c73..f9b0881 100644 --- a/testdata/dot-ref/ctor.dot +++ b/testdata/dot-ref/ctor.dot @@ -5,11 +5,12 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Junk - c43 [label=<
Junk
- value : int
+ Junk(val : int)
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Junk +c43 [label=<
Junk
- value : int
+ Junk(val : int)
>]; } diff --git a/testdata/dot-ref/disable.dot b/testdata/dot-ref/disable.dot index 3759817..0d4d05f 100644 --- a/testdata/dot-ref/disable.dot +++ b/testdata/dot-ref/disable.dot @@ -5,15 +5,16 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Person1 - c45 [label=<
Person1
~ address : String
~ name : String
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Person2 - c46 [label=<
Person2
~ displayName() : String
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Person3 - c47 [label=<
Person3
address : Address
name : String
displayName() : String
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Person1 +c45 [label=<
Person1
~ address : String
~ name : String
>]; +// Person2 +c46 [label=<
Person2
~ displayName() : String
>]; +// Person3 +c47 [label=<
Person3
address : Address
name : String
displayName() : String
>]; } diff --git a/testdata/dot-ref/extends.dot b/testdata/dot-ref/extends.dot index 2829ebb..6ea60c7 100644 --- a/testdata/dot-ref/extends.dot +++ b/testdata/dot-ref/extends.dot @@ -5,13 +5,14 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Base - c48 [label=<
Base
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Test2 - c49 [label=<
Test2<B extends Base>
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Base +c48 [label=<
Base
>]; +// Test2 +c49 [label=<
Test2<B extends Base>
>]; } diff --git a/testdata/dot-ref/foo.dot b/testdata/dot-ref/foo.dot index 7c4e2a2..fcb53fd 100644 --- a/testdata/dot-ref/foo.dot +++ b/testdata/dot-ref/foo.dot @@ -5,21 +5,22 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // a.b.c.UMLOptions - c50 [label=<
UMLOptions
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // a.b.c.UserGroup - c51 [label=<
UserGroup
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // a.b.c.User - c52 [label=<
User
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // a.b.c.Password - c53 [label=<
Password
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // a.b.c.UserGroup ASSOC a.b.c.User - c51:p -> c52:p [taillabel="*", label="", headlabel="*\n\n+user ", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // a.b.c.User NAVASSOC a.b.c.Password - c52:p -> c53:p [taillabel="1\n\n+owner\r", label="", headlabel="*\n\n+key", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=open]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// a.b.c.UMLOptions +c50 [label=<
UMLOptions
>]; +// a.b.c.UserGroup +c51 [label=<
UserGroup
>]; +// a.b.c.User +c52 [label=<
User
>]; +// a.b.c.Password +c53 [label=<
Password
>]; +// a.b.c.UserGroup assoc a.b.c.User +c51:p -> c52:p [arrowhead=none,weight=2,taillabel="*", headlabel="*\n\n+user "]; +// a.b.c.User navassoc a.b.c.Password +c52:p -> c53:p [arrowhead=open,weight=1,taillabel="1\n\n+owner\r", headlabel="*\n\n+key"]; } diff --git a/testdata/dot-ref/general.dot b/testdata/dot-ref/general.dot index 75cdc3f..0427864 100644 --- a/testdata/dot-ref/general.dot +++ b/testdata/dot-ref/general.dot @@ -5,49 +5,50 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Asset - c55 [label=<
Asset
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // InterestBearingItem - c56 [label=<
InterestBearingItem
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // InsurableItem - c57 [label=<
InsurableItem
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // BankAccount - c58 [label=<
BankAccount
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // RealEstate - c59 [label=<
RealEstate
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Security - c60 [label=<
Security
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Stock - c61 [label=<
Stock
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Bond - c62 [label=<
Bond
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // CheckingAccount - c63 [label=<
CheckingAccount
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // SavingsAccount - c64 [label=<
SavingsAccount
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - //BankAccount extends Asset - c55:p -> c58:p [dir=back,arrowtail=empty]; - //BankAccount extends InsurableItem - c57:p -> c58:p [dir=back,arrowtail=empty]; - //BankAccount extends InterestBearingItem - c56:p -> c58:p [dir=back,arrowtail=empty]; - //RealEstate extends Asset - c55:p -> c59:p [dir=back,arrowtail=empty]; - //RealEstate extends InsurableItem - c57:p -> c59:p [dir=back,arrowtail=empty]; - //Security extends Asset - c55:p -> c60:p [dir=back,arrowtail=empty]; - //Stock extends Security - c60:p -> c61:p [dir=back,arrowtail=empty]; - //Bond extends Security - c60:p -> c62:p [dir=back,arrowtail=empty]; - //CheckingAccount extends BankAccount - c58:p -> c63:p [dir=back,arrowtail=empty]; - //SavingsAccount extends BankAccount - c58:p -> c64:p [dir=back,arrowtail=empty]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Asset +c55 [label=<
Asset
>]; +// InterestBearingItem +c56 [label=<
InterestBearingItem
>]; +// InsurableItem +c57 [label=<
InsurableItem
>]; +// BankAccount +c58 [label=<
BankAccount
>]; +// RealEstate +c59 [label=<
RealEstate
>]; +// Security +c60 [label=<
Security
>]; +// Stock +c61 [label=<
Stock
>]; +// Bond +c62 [label=<
Bond
>]; +// CheckingAccount +c63 [label=<
CheckingAccount
>]; +// SavingsAccount +c64 [label=<
SavingsAccount
>]; +//BankAccount extends Asset +c55:p -> c58:p [arrowtail=empty,dir=back,weight=10]; +//BankAccount extends InsurableItem +c57:p -> c58:p [arrowtail=empty,dir=back,weight=10]; +//BankAccount extends InterestBearingItem +c56:p -> c58:p [arrowtail=empty,dir=back,weight=10]; +//RealEstate extends Asset +c55:p -> c59:p [arrowtail=empty,dir=back,weight=10]; +//RealEstate extends InsurableItem +c57:p -> c59:p [arrowtail=empty,dir=back,weight=10]; +//Security extends Asset +c55:p -> c60:p [arrowtail=empty,dir=back,weight=10]; +//Stock extends Security +c60:p -> c61:p [arrowtail=empty,dir=back,weight=10]; +//Bond extends Security +c60:p -> c62:p [arrowtail=empty,dir=back,weight=10]; +//CheckingAccount extends BankAccount +c58:p -> c63:p [arrowtail=empty,dir=back,weight=10]; +//SavingsAccount extends BankAccount +c58:p -> c64:p [arrowtail=empty,dir=back,weight=10]; } diff --git a/testdata/dot-ref/java5.dot b/testdata/dot-ref/java5.dot index 3364bc4..4467209 100644 --- a/testdata/dot-ref/java5.dot +++ b/testdata/dot-ref/java5.dot @@ -5,13 +5,14 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Java5 - c78 [label=<
Java5
~ state : Java5.States
- specifiedPackages : Set<String>
+ printAll(args : String[])
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Java5.States - c79 [label=<
«enumeration»
States
start
dash
colon
space
open
w
close
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Java5 +c78 [label=<
Java5
~ state : Java5.States
- specifiedPackages : Set<String>
+ printAll(args : String[])
>]; +// Java5.States +c79 [label=<
«enumeration»
States
start
dash
colon
space
open
w
close
>]; } diff --git a/testdata/dot-ref/schema.dot b/testdata/dot-ref/schema.dot index a723eab..51a315f 100644 --- a/testdata/dot-ref/schema.dot +++ b/testdata/dot-ref/schema.dot @@ -5,33 +5,34 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // School - c103 [label=<
School
name : Name
address : String
phone : Number
addStudent()
removeStudent()
getStudent()
getAllStudents()
addDepartment()
removeDepartment()
getDepartment()
getAllDepartments()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Department - c104 [label=<
Department
name : Name
addInstructor()
removeInstructor()
getInstructor()
getAllInstructors()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Student - c105 [label=<
Student
name : Name
studentID : Number
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Course - c106 [label=<
Course
name : Name
courseID : Number
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Instructor - c107 [label=<
Instructor
name : Name
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // School HAS Student - c103:p -> c105:p [taillabel="1..*", label="Member", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both]; - // School COMPOSED Department - c103:p -> c104:p [taillabel="1..*", label="Has", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=diamond, dir=both]; - // Department ASSOC Course - c104:p -> c106:p [taillabel="1..*", label="", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Department ASSOC Instructor - c104:p -> c107:p [taillabel="0..*", label="", headlabel="0..1 chairperson", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Department HAS Instructor - c104:p -> c107:p [taillabel="1..*", label="AssignedTo", headlabel="1..*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none, arrowtail=ediamond, dir=both]; - // Student ASSOC Course - c105:p -> c106:p [taillabel="*", label="Attends", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; - // Instructor ASSOC Course - c107:p -> c106:p [taillabel="1..*", label="Teaches", headlabel="*", fontname="Helvetica", fontcolor="black", fontsize=10.0, color="black", arrowhead=none]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// School +c103 [label=<
School
name : Name
address : String
phone : Number
addStudent()
removeStudent()
getStudent()
getAllStudents()
addDepartment()
removeDepartment()
getDepartment()
getAllDepartments()
>]; +// Department +c104 [label=<
Department
name : Name
addInstructor()
removeInstructor()
getInstructor()
getAllInstructors()
>]; +// Student +c105 [label=<
Student
name : Name
studentID : Number
>]; +// Course +c106 [label=<
Course
name : Name
courseID : Number
>]; +// Instructor +c107 [label=<
Instructor
name : Name
>]; +// School has Student +c103:p -> c105:p [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="Member", headlabel="*"]; +// School composed Department +c103:p -> c104:p [arrowhead=none,arrowtail=diamond,dir=back,weight=6,taillabel="1..*", label="Has", headlabel="1..*"]; +// Department assoc Course +c104:p -> c106:p [arrowhead=none,weight=2,taillabel="1..*", headlabel="1..*"]; +// Department assoc Instructor +c104:p -> c107:p [arrowhead=none,weight=2,taillabel="0..*", headlabel="0..1 chairperson"]; +// Department has Instructor +c104:p -> c107:p [arrowhead=none,arrowtail=ediamond,dir=back,weight=4,taillabel="1..*", label="AssignedTo", headlabel="1..*"]; +// Student assoc Course +c105:p -> c106:p [arrowhead=none,weight=2,taillabel="*", label="Attends", headlabel="*"]; +// Instructor assoc Course +c107:p -> c106:p [arrowhead=none,weight=2,taillabel="1..*", label="Teaches", headlabel="*"]; } diff --git a/testdata/dot-ref/strip.dot b/testdata/dot-ref/strip.dot index 6c7ca58..82b17d5 100644 --- a/testdata/dot-ref/strip.dot +++ b/testdata/dot-ref/strip.dot @@ -5,13 +5,14 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Java5 - c109 [label=<
Java5
~ state : Java5.States
+ specifiedPackages : Set<String>
+ printAll(args : String[])
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; - // Java5.States - c110 [label=<
«enumeration»
States
start
dash
colon
space
open
w
close
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Java5 +c109 [label=<
Java5
~ state : Java5.States
+ specifiedPackages : Set<String>
+ printAll(args : String[])
>]; +// Java5.States +c110 [label=<
«enumeration»
States
start
dash
colon
space
open
w
close
>]; } diff --git a/testdata/dot-ref/vis.dot b/testdata/dot-ref/vis.dot index b44fd58..88f4e89 100644 --- a/testdata/dot-ref/vis.dot +++ b/testdata/dot-ref/vis.dot @@ -5,11 +5,12 @@ # digraph G { - edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10]; - node [fontname="Helvetica",fontsize=10,shape=plaintext]; - nodesep=0.25; - ranksep=0.5; - // Toolbar - c120 [label=<
Toolbar
# currentSelection : Tool
# toolCount : Integer
+ pickItem(i : Integer)
+ addTool(t : Tool)
+ removeTool(i : Integer)
+ getTool() : Tool
# checkOrphans()
- compact()
>, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; +graph [fontnames="svg"] +edge [fontname="Helvetica",fontsize=10,labelfontname="Helvetica",labelfontsize=10,color="black"]; +node [fontname="Helvetica",fontcolor="black",fontsize=10,shape=plaintext]; +nodesep=0.25; +ranksep=0.5; +// Toolbar +c120 [label=<
Toolbar
# currentSelection : Tool
# toolCount : Integer
+ pickItem(i : Integer)
+ addTool(t : Tool)
+ removeTool(i : Integer)
+ getTool() : Tool
# checkOrphans()
- compact()
>]; }