X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;h=2b775cb2714f4a803ef9129a93bf2d5fd832fca1;hb=94b2a818903a8ec1579dce828b47076c53f435ab;hp=e1e45af91d0f2fc65d70180a417fd49f981d8f52;hpb=ff4200b065c2eb7c8448fa060e7610ab57f6aec1;p=javainspect.git diff --git a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java old mode 100644 new mode 100755 index e1e45af..2b775cb --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java @@ -1,10 +1,10 @@ /* * JavaInspect - Utility to visualize java software - * Copyright (C) 2013, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * + * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public License - * as published by the Free Software Foundation. + * modify it under the terms of version 3 of the GNU Lesser General Public License + * or later as published by the Free Software Foundation. */ package eu.svjatoslav.inspector.java.structure; @@ -25,11 +25,11 @@ public class ClassDescriptor implements GraphElement { private static final int MAX_REFERECNES_COUNT = 10; - public final String fullyQualifiedName; + public String classFullyQualifiedName; - Map nameToFieldMap = new TreeMap(); + private final Map nameToFieldMap = new TreeMap(); - public SortedSet methods = new TreeSet(); + private final SortedSet methods = new TreeSet(); /** * Incoming arrows will have this color. @@ -65,18 +65,22 @@ public class ClassDescriptor implements GraphElement { // counts amount of times this class is extended private int extensionsCount = 0; - public ClassDescriptor(final Class clazz, - final ClassGraph dump) { - classGraph = dump; + private ClassDescriptor arrayComponent; - fullyQualifiedName = clazz.getName(); - dump.nameToClassMap.put(fullyQualifiedName, this); + public ClassDescriptor(final ClassGraph classGraph) { + this.classGraph = classGraph; + } + + public void analyzeClass(final Class clazz) { + + classFullyQualifiedName = clazz.getName(); isArray = clazz.isArray(); if (isArray) { final Class componentType = clazz.getComponentType(); - dump.addClass(componentType); + arrayComponent = getClassGraph().getOrCreateClassDescriptor( + componentType); } // System.out.println("class: " + fullyQualifiedName); @@ -94,17 +98,18 @@ public class ClassDescriptor implements GraphElement { indexMethods(clazz); for (final Class interfaceClass : clazz.getInterfaces()) { - final ClassDescriptor classDescriptor = dump - .addClass(interfaceClass); - classDescriptor.registerImplementation(); - interfaces.add(classDescriptor); + final ClassDescriptor interfaceClassDescriptor = getClassGraph() + .getOrCreateClassDescriptor(interfaceClass); + interfaceClassDescriptor.registerImplementation(); + interfaces.add(interfaceClassDescriptor); } - superClass = dump.addClass(clazz.getSuperclass()); + superClass = getClassGraph().getOrCreateClassDescriptor( + clazz.getSuperclass()); if (superClass != null) superClass.registerExtension(); - } + }; public boolean areReferencesShown() { return referencesCount <= MAX_REFERECNES_COUNT; @@ -140,16 +145,19 @@ public class ClassDescriptor implements GraphElement { result.append("\n"); result.append(" // interfaces implemented by class: " - + fullyQualifiedName + "\n"); + + classFullyQualifiedName + "\n"); for (final ClassDescriptor interfaceDescriptor : interfaces) { if (!interfaceDescriptor.isVisible()) continue; + if (!interfaceDescriptor.areReferencesShown()) + continue; + result.append(" " + interfaceDescriptor.getGraphId() + " -> " - + getGraphId() + "[style=\"dotted, tapered\", color=\"" + + getGraphId() + "[style=\"dotted\", color=\"" + interfaceDescriptor.getInterfaceColor() - + "\", penwidth=20, dir=\"forward\"];\n"); + + "\", penwidth=10, dir=\"forward\"];\n"); } } @@ -182,18 +190,21 @@ public class ClassDescriptor implements GraphElement { if (!superClass.isVisible()) return; + if (!superClass.areReferencesShown()) + return; + result.append("\n"); - result.append(" // super class for: " + fullyQualifiedName + "\n"); + result.append(" // super class for: " + classFullyQualifiedName + + "\n"); result.append(" " + superClass.getGraphId() + " -> " + getGraphId() - + "[style=\"tapered\", color=\"" - + superClass.getSuperClassColor() + + "[ color=\"" + superClass.getSuperClassColor() + "\", penwidth=10, dir=\"forward\"];\n"); } public void generateDotHeader(final StringBuffer result) { result.append("\n"); - result.append("// Class: " + fullyQualifiedName + "\n"); + result.append("// Class: " + classFullyQualifiedName + "\n"); result.append(" " + getGraphId() + "[label=< clazz) { - final Method[] methods = clazz.getMethods(); + for (final Method method : clazz.getMethods()) { + final MethodDescriptor methodDescriptor = new MethodDescriptor( + this, method.getName()); - for (final Method method : methods) - new MethodDescriptor(method, this, classGraph); + methods.add(methodDescriptor); + + methodDescriptor.analyze(method); + } } @Override public boolean isVisible() { - if (Utils.isSystemDataType(fullyQualifiedName)) + if (Utils.isSystemDataType(classFullyQualifiedName)) return false; - if (Utils.isSystemPackage(fullyQualifiedName)) + if (Utils.isSystemPackage(classFullyQualifiedName)) return false; - if (!classGraph.getFilter().isClassShown(fullyQualifiedName)) + if (!getClassGraph().getFilter().isClassShown(classFullyQualifiedName)) return false; + if (isArray) + if (arrayComponent != null) + if (Utils + .isSystemDataType(arrayComponent.classFullyQualifiedName)) + // Do not show references to primitive data types in arrays. + // That is: there is no point to show reference to byte when + // we have class with byte array field. + return false; + return isShown; }