diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/ClassRepr.java b/jps/model/src/org/jetbrains/ether/dependencyView/ClassRepr.java index d1ec114d67e8..fcf90cca9ac8 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/ClassRepr.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/ClassRepr.java @@ -273,7 +273,6 @@ public class ClassRepr extends Proto { public String getPackageName(final int s) { return getPackageName(context.getValue(s)); - } public static String getPackageName(final String raw) { @@ -296,8 +295,8 @@ public class ClassRepr extends Proto { return null; } - public Collection findMethods (final MethodRepr.Predicate p) { - final Collection result = new LinkedList (); + public Collection findMethods(final MethodRepr.Predicate p) { + final Collection result = new LinkedList(); for (MethodRepr mm : methods) { if (p.satisfy(mm)) { @@ -321,4 +320,113 @@ public class ClassRepr extends Proto { } }; } + + @Override + public void toBuffer(final DependencyContext context, final StringBuffer buf) { + super.toBuffer(context, buf); + + buf.append(" Filename : "); + buf.append(context.getValue(fileName)); + buf.append("\n"); + + buf.append(" Superclass : "); + buf.append(superClass == null ? "" : superClass.getDescr(context)); + buf.append("\n"); + + buf.append(" Interfaces : "); + final TypeRepr.AbstractType[] is = interfaces.toArray(new TypeRepr.AbstractType[interfaces.size()]); + Arrays.sort(is, new Comparator() { + @Override + public int compare(final TypeRepr.AbstractType o1, final TypeRepr.AbstractType o2) { + return o1.getDescr(context).compareTo(o2.getDescr(context)); + } + }); + for (final TypeRepr.AbstractType t : is) { + buf.append(t.getDescr(context)); + buf.append("; "); + } + buf.append("\n"); + + buf.append(" Targets : "); + final ElemType[] es = targets.toArray(new ElemType[targets.size()]); + Arrays.sort(es); + for (final ElemType e : es) { + buf.append(e); + buf.append("; "); + } + buf.append("\n"); + + buf.append(" Policy : "); + buf.append(policy); + buf.append("\n"); + + buf.append(" Outer class: "); + buf.append(context.getValue(outerClassName)); + buf.append("\n"); + + buf.append(" Local class: "); + buf.append(isLocal); + buf.append("\n"); + + buf.append(" Fields:\n"); + final FieldRepr[] fs = fields.toArray(new FieldRepr[fields.size()]); + Arrays.sort(fs, new Comparator() { + @Override + public int compare(final FieldRepr o1, final FieldRepr o2) { + if (o1.name == o2.name) { + return o1.type.getDescr(context).compareTo(o2.type.getDescr(context)); + } + + return o1.name - o2.name; + } + }); + for (final FieldRepr f : fs) { + f.toBuffer(context, buf); + } + buf.append(" End Of Fields\n"); + + buf.append(" Methods:\n"); + final MethodRepr[] ms = methods.toArray(new MethodRepr[methods.size()]); + Arrays.sort(ms, new Comparator() { + @Override + public int compare(final MethodRepr o1, final MethodRepr o2) { + if (o1.name == o2.name) { + final String d1 = o1.type.getDescr(context); + final String d2 = o2.type.getDescr(context); + + final int c = d1.compareTo(d2); + + if (c == 0) { + final int l1 = o1.argumentTypes.length; + final int l2 = o2.argumentTypes.length; + + if (l1 == l2) { + for (int i = 0; i() { @Override public boolean execute(final int a, final TIntHashSet b) { diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java index dc76abcdb5ea..9842874f0a03 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java @@ -26,19 +26,48 @@ import java.util.Collection; * Time: 21:01 * To change this template use File | Settings | File Templates. */ -interface IntObjectMultiMaplet { - boolean containsKey(final int key); - Collection get(final int key); - void put(final int key, final V value); - void put(final int key, final Collection value); - void replace(final int key, final Collection value); - void putAll(IntObjectMultiMaplet m); - void replaceAll(IntObjectMultiMaplet m); - void remove(final int key); - void removeFrom(final int key, final V value); - void removeAll(final int key, final Collection value); - void close(); +abstract class IntObjectMultiMaplet implements StringBufferizable { + abstract boolean containsKey(final int key); - void forEachEntry(TIntObjectProcedure> procedure); - void flush(boolean memoryCachesOnly); + abstract Collection get(final int key); + + abstract void put(final int key, final V value); + + abstract void put(final int key, final Collection value); + + abstract void replace(final int key, final Collection value); + + abstract void putAll(IntObjectMultiMaplet m); + + abstract void replaceAll(IntObjectMultiMaplet m); + + abstract void remove(final int key); + + abstract void removeFrom(final int key, final V value); + + abstract void removeAll(final int key, final Collection value); + + abstract void close(); + + abstract void forEachEntry(TIntObjectProcedure> procedure); + + abstract void flush(boolean memoryCachesOnly); + + public void toBuffer(final DependencyContext context, final StringBuffer buf) { + forEachEntry(new TIntObjectProcedure>() { + @Override + public boolean execute(final int a, final Collection b) { + buf.append(" Key: "); + buf.append(context.getValue(a)); + buf.append("\n Values:\n"); + + for (final V value : b) { + value.toBuffer(context, buf); + } + + buf.append(" End Of Values\n"); + return true; + } + }); + } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectPersistentMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectPersistentMultiMaplet.java index 31bab1fb6222..a2d57732fbbb 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectPersistentMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectPersistentMultiMaplet.java @@ -34,7 +34,7 @@ import java.util.Collections; * Time: 15:38 * To change this template use File | Settings | File Templates. */ -class IntObjectPersistentMultiMaplet implements IntObjectMultiMaplet { +class IntObjectPersistentMultiMaplet extends IntObjectMultiMaplet { private static final Collection NULL_COLLECTION = Collections.emptySet(); private static final int CACHE_SIZE = 128; private final PersistentHashMap> myMap; diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectTransientMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectTransientMultiMaplet.java index a7de866bb1e5..b0f10b96313b 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectTransientMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectTransientMultiMaplet.java @@ -12,7 +12,7 @@ import java.util.Collection; * Time: 15:38 * To change this template use File | Settings | File Templates. */ -class IntObjectTransientMultiMaplet implements IntObjectMultiMaplet { +class IntObjectTransientMultiMaplet extends IntObjectMultiMaplet { private final TIntObjectHashMap> myMap = new TIntObjectHashMap>(); private final CollectionFactory myCollectionFactory; diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 2b0ad81be653..0f24d20ae18f 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -2049,4 +2049,36 @@ public class Mappings { private void debug(final String comment, final boolean s) { myDebugS.debug(comment, s); } + + public void toBuffer(final StringBuffer buf) { + final StringBufferizable[] data = { + myClassToSubclasses, + myClassToClassDependency, + mySourceFileToClasses, + mySourceFileToAnnotationUsages, + mySourceFileToUsages, + myClassToSourceFile + }; + + final String[] info = { + "ClassToSubclasses", + "ClassToClassDependency", + "SourceFileToClasses", + "SourceFileToAnnotationUsages", + "SourceFileToUsages", + "ClassToSourceFile" + }; + + for (int i = 0; i)TypeRepr.createClassType(context, e, new HashSet()); argumentTypes = TypeRepr.getType(context, Type.getArgumentTypes(d)); @@ -194,4 +200,29 @@ class MethodRepr extends ProtoMember { public UsageRepr.Usage createMetaUsage(final DependencyContext context, final int owner) { return UsageRepr.createMetaMethodUsage(context, name, owner, getDescr(context)); } + + @Override + public void toBuffer(final DependencyContext context, final StringBuffer buf) { + super.toBuffer(context, buf); + buf.append(" Arguments : "); + for (TypeRepr.AbstractType t : argumentTypes) { + buf.append(t.getDescr(context)); + buf.append("; "); + } + buf.append("\n"); + + final TypeRepr.AbstractType[] es = exceptions.toArray(new TypeRepr.AbstractType[exceptions.size()]); + Arrays.sort(es, new Comparator() { + @Override + public int compare(final TypeRepr.AbstractType o1, final TypeRepr.AbstractType o2) { + return o1.getDescr(context).compareTo(o2.getDescr(context)); + } + }); + buf.append(" Exceptions: "); + for (final TypeRepr.AbstractType e : es) { + buf.append(e.getDescr(context)); + buf.append("; "); + } + buf.append("\n"); + } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Proto.java b/jps/model/src/org/jetbrains/ether/dependencyView/Proto.java index 39aaf0b36ed2..5f9d2f704ebb 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Proto.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Proto.java @@ -14,7 +14,7 @@ import java.io.IOException; * Time: 17:57 * To change this template use File | Settings | File Templates. */ -class Proto implements RW.Savable { +class Proto implements RW.Savable, StringBufferizable { public final int access; public final int signature; public final int name; @@ -101,4 +101,18 @@ class Proto implements RW.Savable { } }; } + + public void toBuffer (final DependencyContext context, final StringBuffer buf) { + buf.append(" Access : "); + buf.append(access); + buf.append("\n"); + + buf.append(" Signature: "); + buf.append(context.getValue(signature)); + buf.append("\n"); + + buf.append(" Name : "); + buf.append(context.getValue(name)); + buf.append("\n"); + } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/ProtoMember.java b/jps/model/src/org/jetbrains/ether/dependencyView/ProtoMember.java index ed1e350a2ec4..09baab37afdc 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/ProtoMember.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/ProtoMember.java @@ -179,4 +179,15 @@ abstract class ProtoMember extends Proto { } }; } + + public void toBuffer (final DependencyContext context, final StringBuffer buf) { + super.toBuffer(context, buf); + buf.append(" Type : "); + buf.append(type.getDescr(context)); + buf.append("\n"); + + buf.append(" Value : "); + buf.append(value == null ? "" : value.toString()); + buf.append("\n"); + } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/StringBufferizable.java b/jps/model/src/org/jetbrains/ether/dependencyView/StringBufferizable.java new file mode 100644 index 000000000000..7a908827b8dc --- /dev/null +++ b/jps/model/src/org/jetbrains/ether/dependencyView/StringBufferizable.java @@ -0,0 +1,13 @@ +package org.jetbrains.ether.dependencyView; + +/** + * Created with IntelliJ IDEA. + * User: db + * Date: 24.04.12 + * Time: 0:44 + * To change this template use File | Settings | File Templates. + */ + +interface StringBufferizable { + void toBuffer(DependencyContext context, StringBuffer buf); +} diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/UsageRepr.java b/jps/model/src/org/jetbrains/ether/dependencyView/UsageRepr.java index c59f075bcd53..9fa0db3086c5 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/UsageRepr.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/UsageRepr.java @@ -35,7 +35,7 @@ class UsageRepr { } - public static class Cluster implements RW.Savable { + public static class Cluster implements RW.Savable, StringBufferizable { private final Map myUsageToDependenciesMap = new HashMap(DEFAULT_SET_CAPACITY, DEFAULT_SET_LOAD_FACTOR); public Cluster() { @@ -126,10 +126,20 @@ class UsageRepr { public int hashCode() { return myUsageToDependenciesMap.hashCode(); } + + @Override + public void toBuffer(DependencyContext context, StringBuffer buf) { + //To change body of implemented methods use File | Settings | File Templates. + } } - public static abstract class Usage implements RW.Savable { + public static abstract class Usage implements RW.Savable, StringBufferizable { public abstract int getOwner(); + + @Override + public void toBuffer(DependencyContext context, StringBuffer buf) { + //To change body of implemented methods use File | Settings | File Templates. + } } public static abstract class FMUsage extends Usage {