From 2f279484757bba3ea16d0c0173680162d8e748f6 Mon Sep 17 00:00:00 2001 From: Erich Schubert Date: Sun, 21 Oct 2018 16:46:41 +0200 Subject: [PATCH] Refactor font handling. --- TODO | 2 - doc/ver.xml | 3 + .../java/org/umlgraph/doclet/ClassGraph.java | 99 ++++------------- src/main/java/org/umlgraph/doclet/Font.java | 101 ++++++++++++++++++ .../java/org/umlgraph/doclet/Options.java | 51 +++------ testdata/dot-ref/Abstr.dot | 2 +- testdata/dot-ref/Inference.dot | 2 +- testdata/dot-ref/MyVector.dot | 2 +- testdata/dot-ref/Root.dot | 2 +- testdata/dot-ref/Style.dot | 2 +- testdata/dot-ref/ViewContext.dot | 2 +- testdata/dot-ref/advrel.dot | 2 +- testdata/dot-ref/catalina.dot | 6 +- 13 files changed, 150 insertions(+), 126 deletions(-) create mode 100644 src/main/java/org/umlgraph/doclet/Font.java diff --git a/TODO b/TODO index 42d1f54..7b8d92a 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,3 @@ -When UMLGraph 2.29 comes out use for italic fonts? - http://stackoverflow.com/questions/8609546/umlgraph-not-automatic-integrated-in-javadoc Support for all UML diagrams: state, use-case, etc. diff --git a/doc/ver.xml b/doc/ver.xml index f89f6eb..076bc35 100644 --- a/doc/ver.xml +++ b/doc/ver.xml @@ -13,6 +13,9 @@ this works well with -qualify -postfixpackage (and -!qualifyG To get the old -qualify behavior, you need to add -qualifyGenerics, the default is off, and it will not inherit from -qualify.
  • Better handling of complex names with generics and inner classes such as pkg.Outer<T>.Inner.
  • +
  • Use <i> tags for italic, because the old font naming approach does not work with SVG anymore. +Replace -nodefontabstractname and -nodefontclassabstractname +with a simple flag -nodefontabstractitalic instead.
  • diff --git a/src/main/java/org/umlgraph/doclet/ClassGraph.java b/src/main/java/org/umlgraph/doclet/ClassGraph.java index 208842a..d937052 100644 --- a/src/main/java/org/umlgraph/doclet/ClassGraph.java +++ b/src/main/java/org/umlgraph/doclet/ClassGraph.java @@ -68,9 +68,7 @@ import com.sun.javadoc.WildcardType; */ class ClassGraph { protected static final char FILE_SEPARATOR = '/'; - enum Font { - NORMAL, ABSTRACT, CLASS, CLASS_ABSTRACT, TAG, PACKAGE - } + enum Align { LEFT, CENTER, RIGHT; @@ -183,7 +181,7 @@ class ClassGraph { /** Print a a basic type t */ private String type(Options opt, Type t, boolean generics) { - return ((generics ? opt.showQualifiedGenerics : opt.showQualified) ?// + return ((generics ? opt.showQualifiedGenerics : opt.showQualified) ? // t.qualifiedTypeName() : t.typeName()) // + typeParameters(opt, t.asParameterizedType()); } @@ -236,15 +234,11 @@ class ClassGraph { if (hidden(cd)) continue; stereotype(opt, cd, Align.LEFT); - String cs = visibility(opt, cd) + cd.name(); - if (opt.showType) { - cs += "(" + parameter(opt, cd.parameters()) + ")"; - } else { - cs += "()"; - } + String cs = visibility(opt, cd) + cd.name() // + + (opt.showType ? "(" + parameter(opt, cd.parameters()) + ")" : "()"); tableLine(Align.LEFT, cs); - printed = true; tagvalue(opt, cd); + printed = true; } return printed; } @@ -259,14 +253,10 @@ class ClassGraph { if (md.name().equals("") && md.isStatic() && md.isPackagePrivate()) continue; stereotype(opt, md, Align.LEFT); - String op = visibility(opt, md) + md.name(); - if (opt.showType) { - op += "(" + parameter(opt, md.parameters()) + ")" - + typeAnnotation(opt, md.returnType()); - } else { - op += "()"; - } - tableLine(Align.LEFT, op, opt, md.isAbstract() ? Font.ABSTRACT : Font.NORMAL); + String op = visibility(opt, md) + md.name() + // + (opt.showType ? "(" + parameter(opt, md.parameters()) + ")" + typeAnnotation(opt, md.returnType()) + : "()"); + tableLine(Align.LEFT, (md.isAbstract() ? Font.ABSTRACT : Font.NORMAL).wrap(opt, op)); printed = true; tagvalue(opt, md); @@ -279,7 +269,7 @@ class ClassGraph { w.print(", fontname=\"" + opt.nodeFontName + "\""); w.print(", fontcolor=\"" + opt.nodeFontColor + "\""); w.print(", fontsize=" + opt.nodeFontSize); - w.print(opt.shape.graphvizAttribute()); + w.print(opt.shape.style); w.println("];"); } @@ -301,7 +291,7 @@ class ClassGraph { System.err.println("@tagvalue expects two fields: " + tag.text()); continue; } - tableLine(Align.RIGHT, "{" + t[0] + " = " + t[1] + "}", opt, Font.TAG); + tableLine(Align.RIGHT, Font.TAG.wrap(opt, "{" + t[0] + " = " + t[1] + "}")); } } @@ -399,14 +389,14 @@ class ClassGraph { int startTemplate = qualifiedName.indexOf('<'); int idx = qualifiedName.lastIndexOf('.', startTemplate < 0 ? qualifiedName.length() - 1 : startTemplate); if (opt.showComment) - tableLine(Align.LEFT, htmlNewline(escape(c.commentText())), opt, Font.CLASS); - else if(opt.postfixPackage && idx > 0 && idx < (qualifiedName.length() - 1)) { + tableLine(Align.LEFT, Font.CLASS.wrap(opt, htmlNewline(escape(c.commentText())))); + else if (opt.postfixPackage && idx > 0 && idx < (qualifiedName.length() - 1)) { String packageName = qualifiedName.substring(0, idx); String cn = qualifiedName.substring(idx + 1); - tableLine(Align.CENTER, escape(cn), opt, font); - tableLine(Align.CENTER, packageName, opt, Font.PACKAGE); + tableLine(Align.CENTER, font.wrap(opt, escape(cn))); + tableLine(Align.CENTER, Font.PACKAGE.wrap(opt, packageName)); } else { - tableLine(Align.CENTER, escape(qualifiedName), opt, font); + tableLine(Align.CENTER, font.wrap(opt, escape(qualifiedName))); } tagvalue(opt, c); firstInnerTableEnd(opt); @@ -469,7 +459,7 @@ class ClassGraph { w.print("\t" + noteName + " [label="); externalTableStart(UmlGraph.getCommentOptions(), c.qualifiedName(), classToUrl(c, rootClass)); innerTableStart(); - tableLine(Align.LEFT, htmlNewline(escape(t.text())), UmlGraph.getCommentOptions(), Font.CLASS); + tableLine(Align.LEFT, Font.CLASS.wrap(UmlGraph.getCommentOptions(), htmlNewline(escape(t.text())))); innerTableEnd(); externalTableEnd(); nodeProperties(UmlGraph.getCommentOptions()); @@ -661,10 +651,10 @@ class ClassGraph { if(opt.postfixPackage && idx > 0 && idx < (qualifiedName.length() - 1)) { String packageName = qualifiedName.substring(0, idx); String cn = qualifiedName.substring(idx + 1); - tableLine(Align.CENTER, escape(cn), opt, Font.CLASS); - tableLine(Align.CENTER, packageName, opt, Font.PACKAGE); + tableLine(Align.CENTER, Font.CLASS.wrap(opt, escape(cn))); + tableLine(Align.CENTER, Font.PACKAGE.wrap(opt, packageName)); } else { - tableLine(Align.CENTER, escape(qualifiedName), opt, Font.CLASS); + tableLine(Align.CENTER, Font.CLASS.wrap(opt, escape(qualifiedName))); } innerTableEnd(); externalTableEnd(); @@ -1041,58 +1031,11 @@ class ClassGraph { } private void tableLine(Align align, String text) { - tableLine(align, text, null, Font.NORMAL); - } - - private void tableLine(Align align, String text, Options opt, Font font) { w.print("" // - + fontWrap(" " + text + " ", opt, font) // + + text // MAY contain markup! + "" + linePostfix); } - /** - * Wraps the text with the appropriate font according to the specified font type - * @param opt - * @param text - * @param font - * @return - */ - private String fontWrap(String text, Options opt, Font font) { - if(font == Font.ABSTRACT) { - return fontWrap(text, opt.nodeFontAbstractName, opt.nodeFontSize); - } else if(font == Font.CLASS) { - return fontWrap(text, opt.nodeFontClassName, opt.nodeFontClassSize); - } else if(font == Font.CLASS_ABSTRACT) { - return fontWrap(text, - opt.nodeFontClassAbstractName == null ? opt.nodeFontAbstractName : opt.nodeFontClassAbstractName, - opt.nodeFontClassSize); - } else if(font == Font.PACKAGE) { - return fontWrap(text, opt.nodeFontPackageName, opt.nodeFontPackageSize); - } else if(font == Font.TAG) { - return fontWrap(text, opt.nodeFontTagName, opt.nodeFontTagSize); - } else { - return text; - } - } - - /** - * Wraps the text with the appropriate font tags when the font name - * and size are not void - * @param text the text to be wrapped - * @param fontName considered void when it's null - * @param fontSize considered void when it's <= 0 - */ - private String fontWrap(String text, String fontName, double fontSize) { - if(fontName == null && fontSize == -1) - return text; - else if(fontName == null) - return "" + text + ""; - else if(fontSize <= 0) - return "" + text + ""; - else - return "" + text + ""; - } - private static class FieldRelationInfo { ClassDoc cd; boolean multiple; diff --git a/src/main/java/org/umlgraph/doclet/Font.java b/src/main/java/org/umlgraph/doclet/Font.java new file mode 100644 index 0000000..09355ea --- /dev/null +++ b/src/main/java/org/umlgraph/doclet/Font.java @@ -0,0 +1,101 @@ +package org.umlgraph.doclet; + +/** + * Class to represent a font for graphviz. + *

    + * This is a fairly complicated model, because it is rather an API into graphviz + * formatting strings rather than a standalone thing.

    } tags, and these can be omitted if not + * set. Inheritance of properties then happens in graphviz. + * + * @author Erich Schubert + */ +public enum Font { + /** Edge label font */ + EDGE, // + /** Node basic */ + NODE, // + /** Normal operation font */ + NORMAL, // + /** Abstract operation font */ + ABSTRACT, // + /** Class name. Inherits from null. */ + CLASS, // + /** Class name of abstract classes (usually italic) */ + CLASS_ABSTRACT, // + /** Package names Inherits from null. */ + PACKAGE, // + /** Tags Inherits from null. */ + TAG; + + public static final String DEFAULT_FONT; + + // Static initialization of further values. + static { + // use an appropriate font depending on the current operating system + if (System.getProperty("os.name").toLowerCase().contains("windows")) { + DEFAULT_FONT = "Arial"; + } else { + DEFAULT_FONT = "Helvetica"; // TODO: can we use just "sans"? + } + } + + /** + * Wraps the text with the appropriate font according to the specified font type + * + * @param opt Options + * @param text Text to wrap + * @return Wrapped text + */ + public String wrap(Options opt, String text) { + if (text.isEmpty() || this == NORMAL) + return text; + String face = null; + double size = -1; + boolean italic = false; + switch (this) { + case EDGE: + case NODE: + // Not used with the wrap function. + throw new UnsupportedOperationException(); + case ABSTRACT: + italic = opt.nodeFontAbstractItalic; + case NORMAL: + break; + case CLASS_ABSTRACT: + italic = opt.nodeFontAbstractItalic; + case CLASS: + face = opt.nodeFontClassName; + size = opt.nodeFontClassSize; + break; + case PACKAGE: + face = opt.nodeFontPackageName; + size = opt.nodeFontPackageSize; + break; + case TAG: + face = opt.nodeFontTagName; + size = opt.nodeFontTagSize; + break; + } + if (face == null && size < 0 && !italic) + return text; + StringBuilder buf = new StringBuilder(text.length() + 100); + if (face != null || size > 0) { + buf.append(" 0) + buf.append(" point-size=\"").append(size).append('"'); + buf.append('>'); + } + if (italic) + buf.append(""); + buf.append(text); + if (italic) + buf.append(""); + if (face != null || size > 0) + buf.append(""); + return buf.toString(); + } +} diff --git a/src/main/java/org/umlgraph/doclet/Options.java b/src/main/java/org/umlgraph/doclet/Options.java index 2aa0f4b..1747197 100644 --- a/src/main/java/org/umlgraph/doclet/Options.java +++ b/src/main/java/org/umlgraph/doclet/Options.java @@ -48,25 +48,10 @@ import com.sun.javadoc.Tag; * @author Diomidis Spinellis */ public class Options implements Cloneable, OptionProvider { - // dot's font platform dependence workaround - private static String defaultFont; - private static String defaultItalicFont; // reused often, especially in UmlGraphDoc, worth creating just once and reusing private static final Pattern allPattern = Pattern.compile(".*"); protected static final String DEFAULT_EXTERNAL_APIDOC = "http://docs.oracle.com/javase/7/docs/api/"; - static { - // use an appropriate font depending on the current operating system - // (on windows graphviz is unable to locate "Helvetica-Oblique" - if(System.getProperty("os.name").toLowerCase().contains("windows")) { - defaultFont = "arial"; - defaultItalicFont = "arial italic"; - } else { - defaultFont = "Helvetica"; - defaultItalicFont = "Helvetica-Oblique"; - } - } - // instance fields List hidePatterns = new ArrayList(); List includePatterns = new ArrayList(); @@ -82,18 +67,17 @@ public class Options implements Cloneable, OptionProvider { boolean showType = false; boolean showComment = false; boolean autoSize = true; - String edgeFontName = defaultFont; + String edgeFontName = Font.DEFAULT_FONT; String edgeFontColor = "black"; String edgeColor = "black"; double edgeFontSize = 10; - String nodeFontName = defaultFont; - String nodeFontAbstractName = defaultItalicFont; + String nodeFontName = Font.DEFAULT_FONT; + boolean nodeFontAbstractItalic = true; String nodeFontColor = "black"; double nodeFontSize = 10; String nodeFillColor = null; double nodeFontClassSize = -1; String nodeFontClassName = null; - String nodeFontClassAbstractName = null; double nodeFontTagSize = -1; String nodeFontTagName = null; double nodeFontPackageSize = -1; @@ -188,6 +172,7 @@ public class Options implements Cloneable, OptionProvider { option.equals("-types") || option.equals("-!types") || option.equals("-autosize") || option.equals("-!autosize") || option.equals("-commentname") || option.equals("-!commentname") || + option.equals("-nodefontabstractitalic") || option.equals("-!nodefontabstractitalic") || option.equals("-all") || option.equals("-postfixpackage") || option.equals("-noguillemot") || @@ -204,10 +189,8 @@ public class Options implements Cloneable, OptionProvider { option.equals("-nodefontcolor") || option.equals("-nodefontsize") || option.equals("-nodefontname") || - option.equals("-nodefontabstractname") || option.equals("-nodefontclasssize") || option.equals("-nodefontclassname") || - option.equals("-nodefontclassabstractname") || option.equals("-nodefonttagsize") || option.equals("-nodefonttagname") || option.equals("-nodefontpackagesize") || @@ -313,9 +296,9 @@ public class Options implements Cloneable, OptionProvider { } else if(opt[0].equals("-edgefontname")) { edgeFontName = opt[1]; } else if (opt[0].equals("-!edgefontname")) { - edgeFontName = defaultFont; + edgeFontName = Font.DEFAULT_FONT; } else if(opt[0].equals("-edgefontsize")) { - edgeFontSize = Integer.parseInt(opt[1]); + edgeFontSize = Double.parseDouble(opt[1]); } else if (opt[0].equals("-!edgefontsize")) { edgeFontSize = 10; } else if(opt[0].equals("-nodefontcolor")) { @@ -325,25 +308,21 @@ public class Options implements Cloneable, OptionProvider { } else if(opt[0].equals("-nodefontname")) { nodeFontName = opt[1]; } else if (opt[0].equals("-!nodefontname")) { - nodeFontName = defaultFont; - } else if(opt[0].equals("-nodefontabstractname")) { - nodeFontAbstractName = opt[1]; - } else if (opt[0].equals("-!nodefontabstractname")) { - nodeFontAbstractName = defaultItalicFont; + nodeFontName = Font.DEFAULT_FONT; + } else if(opt[0].equals("-nodefontabstractitalic")) { + nodeFontAbstractItalic = true; + } else if (opt[0].equals("-!nodefontabstractitalic")) { + nodeFontAbstractItalic = false; } else if(opt[0].equals("-nodefontsize")) { - nodeFontSize = Integer.parseInt(opt[1]); + nodeFontSize = Double.parseDouble(opt[1]); } else if (opt[0].equals("-!nodefontsize")) { nodeFontSize = 10; } else if(opt[0].equals("-nodefontclassname")) { nodeFontClassName = opt[1]; } else if (opt[0].equals("-!nodefontclassname")) { nodeFontClassName = null; - } else if(opt[0].equals("-nodefontclassabstractname")) { - nodeFontClassAbstractName = opt[1]; - } else if (opt[0].equals("-!nodefontclassabstractname")) { - nodeFontClassAbstractName = null; } else if(opt[0].equals("-nodefontclasssize")) { - nodeFontClassSize = Integer.parseInt(opt[1]); + nodeFontClassSize = Double.parseDouble(opt[1]); } else if (opt[0].equals("-!nodefontclasssize")) { nodeFontClassSize = -1; } else if(opt[0].equals("-nodefonttagname")) { @@ -351,7 +330,7 @@ public class Options implements Cloneable, OptionProvider { } else if (opt[0].equals("-!nodefonttagname")) { nodeFontTagName = null; } else if(opt[0].equals("-nodefonttagsize")) { - nodeFontTagSize = Integer.parseInt(opt[1]); + nodeFontTagSize = Double.parseDouble(opt[1]); } else if (opt[0].equals("-!nodefonttagsize")) { nodeFontTagSize = -1; } else if(opt[0].equals("-nodefontpackagename")) { @@ -359,7 +338,7 @@ public class Options implements Cloneable, OptionProvider { } else if (opt[0].equals("-!nodefontpackagename")) { nodeFontPackageName = null; } else if(opt[0].equals("-nodefontpackagesize")) { - nodeFontPackageSize = Integer.parseInt(opt[1]); + nodeFontPackageSize = Double.parseDouble(opt[1]); } else if (opt[0].equals("-!nodefontpackagesize")) { nodeFontPackageSize = -1; } else if(opt[0].equals("-nodefillcolor")) { diff --git a/testdata/dot-ref/Abstr.dot b/testdata/dot-ref/Abstr.dot index 708dba4..d2df0bf 100644 --- a/testdata/dot-ref/Abstr.dot +++ b/testdata/dot-ref/Abstr.dot @@ -10,7 +10,7 @@ digraph G { nodesep=0.25; ranksep=0.5; // test.AbstractNode - c1 [label=<
    AbstractNode
    abstractMethod()
    concreteMethod()
    >, URL="null", fontname="Helvetica", fontcolor="black", fontsize=10.0]; + 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 diff --git a/testdata/dot-ref/Inference.dot b/testdata/dot-ref/Inference.dot index 4158b30..708e239 100644 --- a/testdata/dot-ref/Inference.dot +++ b/testdata/dot-ref/Inference.dot @@ -42,7 +42,7 @@ digraph G { // 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]; + 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]; } diff --git a/testdata/dot-ref/MyVector.dot b/testdata/dot-ref/MyVector.dot index ce2b411..734024d 100644 --- a/testdata/dot-ref/MyVector.dot +++ b/testdata/dot-ref/MyVector.dot @@ -22,7 +22,7 @@ digraph G { // 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]; + 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 diff --git a/testdata/dot-ref/Root.dot b/testdata/dot-ref/Root.dot index 4f92d1c..f912672 100644 --- a/testdata/dot-ref/Root.dot +++ b/testdata/dot-ref/Root.dot @@ -14,7 +14,7 @@ digraph G { // 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]; + 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 diff --git a/testdata/dot-ref/Style.dot b/testdata/dot-ref/Style.dot index 320d5cc..6d2a255 100644 --- a/testdata/dot-ref/Style.dot +++ b/testdata/dot-ref/Style.dot @@ -10,7 +10,7 @@ digraph G { 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]; + 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 diff --git a/testdata/dot-ref/ViewContext.dot b/testdata/dot-ref/ViewContext.dot index 45ee6f6..b5bab9b 100644 --- a/testdata/dot-ref/ViewContext.dot +++ b/testdata/dot-ref/ViewContext.dot @@ -38,6 +38,6 @@ digraph G { // 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]; + c509 [label=<
    JComponent
    >, URL="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html", fontname="Helvetica", fontcolor="black", fontsize=10.0]; } diff --git a/testdata/dot-ref/advrel.dot b/testdata/dot-ref/advrel.dot index 92e9a8e..8c94435 100644 --- a/testdata/dot-ref/advrel.dot +++ b/testdata/dot-ref/advrel.dot @@ -20,7 +20,7 @@ digraph G { // 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]; + 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 diff --git a/testdata/dot-ref/catalina.dot b/testdata/dot-ref/catalina.dot index 8fea9a5..fe45d2d 100644 --- a/testdata/dot-ref/catalina.dot +++ b/testdata/dot-ref/catalina.dot @@ -12,15 +12,15 @@ digraph G { // 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]; + 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]; + 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]; + 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