X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FMethodDescriptor.java;h=173ddc33d30e1adc5dbe6c67b09058a76872f2d6;hb=ffba53aac03e4d107545116ddcfff0c965bd5970;hp=5e03b6b1b82e7cbaabe179e9b06a4c35dfcabf81;hpb=16ba5341215d24fdcfa07072d52cf87e5a4375ed;p=javainspect.git diff --git a/src/main/java/eu/svjatoslav/inspector/java/structure/MethodDescriptor.java b/src/main/java/eu/svjatoslav/inspector/java/structure/MethodDescriptor.java old mode 100644 new mode 100755 index 5e03b6b..173ddc3 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/MethodDescriptor.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/MethodDescriptor.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; @@ -15,34 +15,32 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +/** + * This class corresponds to single method within a java class. + */ public class MethodDescriptor implements GraphElement, -Comparable { - - /** - * This class corresponds to single method within a java class. - */ - - public String name; - public ClassDescriptor returnType; - private final ClassDescriptor parent; - - List typeArguments = new ArrayList(); - - public MethodDescriptor(final Method method, final ClassDescriptor parent, - final ClassGraph dump) { - - this.parent = parent; + Comparable { + + private final String methodName; + private ClassDescriptor returnType; + private final ClassDescriptor parentClass; + private final List argumentTypes = new ArrayList(); + private boolean isInherited; + + public MethodDescriptor(final ClassDescriptor parent, + final String methodName) { + parentClass = parent; + this.methodName = methodName; + } - name = method.getName(); + public void analyze(final Method method) { if (!method.getDeclaringClass().getName() - .equals(parent.fullyQualifiedName)) - // do not index inherited methods - return; + .equals(parentClass.getFullyQualifiedName())) + isInherited = true; - parent.methods.add(this); - - returnType = dump.addClass(method.getReturnType()); + returnType = parentClass.getClassGraph().getOrCreateClassDescriptor( + method.getReturnType()); returnType.registerReference(); final Type genericType = method.getGenericReturnType(); @@ -51,14 +49,25 @@ Comparable { for (final Type t : pt.getActualTypeArguments()) if (t instanceof Class) { final Class cl = (Class) t; - final ClassDescriptor classDescriptor = dump.addClass(cl); + final ClassDescriptor classDescriptor = parentClass + .getClassGraph().getOrCreateClassDescriptor(cl); classDescriptor.registerReference(); - typeArguments.add(classDescriptor); + argumentTypes.add(classDescriptor); } } } + @Override + public int compareTo(final MethodDescriptor o) { + + final int nameComparisonResult = methodName.compareTo(o.methodName); + if (nameComparisonResult != 0) + return nameComparisonResult; + + return toString().compareTo(o.toString()); + } + @Override public String getDot() { @@ -68,12 +77,13 @@ Comparable { final StringBuffer result = new StringBuffer(); // describe associated types - for (final ClassDescriptor classDescriptor : typeArguments) + for (final ClassDescriptor classDescriptor : argumentTypes) if (classDescriptor.isVisible()) if (classDescriptor.areReferencesShown()) result.append(" " + getGraphId() + " -> " - + classDescriptor.getGraphId() + "[label=\"" + name - + "\", color=\"" + classDescriptor.getColor() + + classDescriptor.getGraphId() + "[label=\"" + + methodName + "\", color=\"" + + classDescriptor.getColor() + "\", style=\"dotted, bold\"];\n"); if (!returnType.isVisible()) @@ -82,8 +92,8 @@ Comparable { // main type if (returnType.areReferencesShown()) result.append(" " + getGraphId() + " -> " - + returnType.getGraphId() + "[label=\"" + name + "\"," - + " color=\"" + returnType.getColor() + + returnType.getGraphId() + "[label=\"" + methodName + + "\"," + " color=\"" + returnType.getColor() + "\", style=\"dotted, bold\"];\n"); return result.toString(); @@ -96,7 +106,7 @@ Comparable { final StringBuffer result = new StringBuffer(); - result.append(" // " + name + "\n"); + result.append(" // " + methodName + "\n"); result.append(" " + "" + returnType.getClassName(true) @@ -109,20 +119,20 @@ Comparable { @Override public String getGraphId() { - return parent.getGraphId() + ":" + name; + return parentClass.getGraphId() + ":" + methodName; } - public String getMethodLabel() { - return name; + private String getMethodLabel() { + return methodName; } - public int getOutsideVisibleReferencesCount() { + protected int getOutsideVisibleReferencesCount() { int result = 0; if (returnType.isVisible()) result++; - for (final ClassDescriptor classDescriptor : typeArguments) + for (final ClassDescriptor classDescriptor : argumentTypes) if (classDescriptor.isVisible()) result++; @@ -132,36 +142,34 @@ Comparable { @Override public boolean isVisible() { - if (Utils.isSystemMethod(name)) + // hide inherited methods + if (isInherited) return false; - if (parent.isEnum && Utils.isEnumMethod(name)) + // hide common object methods + if (Utils.isCommonObjectMethod(methodName)) return false; - if (!(name.startsWith("get") || name.startsWith("set"))) - return true; - - final String upprCaseName = name.substring(3).toUpperCase(); - - for (String parentField : parent.nameToFieldMap.keySet()) { - parentField = parentField.toUpperCase(); + // hide common Enumeration methods + if (parentClass.isEnum && Utils.isEnumMethod(methodName)) + return false; - if (upprCaseName.equals(parentField)) + // hide get/set methods for the field of the same name + if (methodName.startsWith("get") || methodName.startsWith("set")) + if (parentClass.hasFieldIgnoreCase(methodName.substring(3))) return false; + // hide is methods for the boolean field of the same name + if (methodName.startsWith("is")) { + final FieldDescriptor field = parentClass + .getFieldIgnoreCase(methodName.substring(2)); + if (field != null) + if ("boolean".equals(field.getType().getFullyQualifiedName())) + return false; } return true; - } - @Override - public int compareTo(MethodDescriptor o) { - - int nameComparisonResult = name.compareTo(o.name); - if (nameComparisonResult != 0) - return nameComparisonResult; - - return toString().compareTo(o.toString()); } }