From 9c21a049946f2003f8545fb10e79ca121d67a6c9 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Sun, 24 Jun 2012 20:31:20 +0400 Subject: [PATCH] Better storage dumper for better testing (compile server). --- .../jetbrains/ether/IncrementalTestCase.java | 25 +++++++-- .../ether/dependencyView/IntIntMaplet.java | 25 +++++++-- .../dependencyView/IntIntMultiMaplet.java | 54 +++++++++++-------- .../dependencyView/IntObjectMultiMaplet.java | 53 ++++++++++-------- .../ether/dependencyView/Mappings.java | 36 +++++++------ .../ether/dependencyView/OrderProvider.java | 54 +++++++++++++++++++ 6 files changed, 180 insertions(+), 67 deletions(-) create mode 100644 jps/model/src/org/jetbrains/ether/dependencyView/OrderProvider.java diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index 6c8040a80311..148bb4f71500 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -221,13 +221,32 @@ public abstract class IncrementalTestCase extends TestCase { new IncProjectBuilder( projectDescriptor, BuilderRegistry.getInstance(), projectDescriptor.timestamps.getStorage(), Collections.emptyMap(), CanceledStatus.NULL, - null).build( - new AllProjectScope(project, Collections.emptySet(), false), true, false, false - ); + null).build(new AllProjectScope(project, Collections.emptySet(), false), true, false, false); + + final ByteArrayOutputStream makeDump = new ByteArrayOutputStream(); + + projectDescriptor.dataManager.getMappings().toStream(new PrintStream(makeDump)); + + makeDump.close(); final String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(getBaseDir() + ".log"))); final String actual = javaBuilderLogger.myLog.toString(); + assertEquals(expected, actual); + + new IncProjectBuilder( + projectDescriptor, BuilderRegistry.getInstance(), projectDescriptor.timestamps.getStorage(), Collections.emptyMap(), CanceledStatus.NULL, + null).build( + new AllProjectScope(project, Collections.emptySet(), true), false, true, false + ); + + final ByteArrayOutputStream rebuildDump = new ByteArrayOutputStream(); + + projectDescriptor.dataManager.getMappings().toStream(new PrintStream(rebuildDump)); + + rebuildDump.close(); + + //assertEquals(rebuildDump.toString(), makeDump.toString()); } finally { projectDescriptor.release(); diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMaplet.java index c742aac74e9a..5f41a26c090d 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMaplet.java @@ -28,24 +28,41 @@ import java.io.PrintStream; */ abstract class IntIntMaplet implements Streamable { abstract boolean containsKey(final int key); + abstract int get(final int key); + abstract void put(final int key, final int value); + abstract void putAll(IntIntMaplet m); + abstract void remove(final int key); + abstract void close(); + abstract void forEachEntry(TIntIntProcedure proc); + abstract void flush(boolean memoryCachesOnly); public void toStream(final DependencyContext context, final PrintStream stream) { + final OrderProvider op = new OrderProvider(context); + forEachEntry(new TIntIntProcedure() { @Override public boolean execute(final int a, final int b) { - stream.print(" "); - stream.print(context.getValue(a)); - stream.print(" -> "); - stream.println(context.getValue(b)); + op.register(a); return true; } }); + + final int[] keys = op.get(); + + for (final int a : keys) { + final int b = get(a); + + stream.print(" "); + stream.print(context.getValue(a)); + stream.print(" -> "); + stream.println(context.getValue(b)); + } } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMultiMaplet.java index 92e4b38e0fa6..dfa667017125 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntIntMultiMaplet.java @@ -59,33 +59,43 @@ abstract class IntIntMultiMaplet implements Streamable { abstract void flush(boolean memoryCachesOnly); public void toStream(final DependencyContext context, final PrintStream stream) { + final OrderProvider op = new OrderProvider(context); + forEachEntry(new TIntObjectProcedure() { @Override public boolean execute(final int a, final TIntHashSet b) { - stream.print(" Key: "); - stream.println(context.getValue(a)); - stream.println(" Values:"); - - final List list = new LinkedList(); - - b.forEach(new TIntProcedure() { - @Override - public boolean execute(final int value) { - list.add(context.getValue(value)); - return true; - } - }); - - Collections.sort(list); - - for (final String l : list) { - stream.print(" "); - stream.println(l); - } - - stream.println(" End Of Values"); + op.register(a); return true; } }); + + final int[] keys = op.get(); + + for (final int a : keys) { + final TIntHashSet b = get(a); + + stream.print(" Key: "); + stream.println(context.getValue(a)); + stream.println(" Values:"); + + final List list = new LinkedList(); + + b.forEach(new TIntProcedure() { + @Override + public boolean execute(final int value) { + list.add(context.getValue(value)); + return true; + } + }); + + Collections.sort(list); + + for (final String l : list) { + stream.print(" "); + stream.println(l); + } + + stream.println(" End Of Values"); + } } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java index 1f2ad2b02dfa..cd4fcd809e56 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/IntObjectMultiMaplet.java @@ -59,33 +59,42 @@ abstract class IntObjectMultiMaplet implements Streamable abstract void flush(boolean memoryCachesOnly); public void toStream(final DependencyContext context, final PrintStream stream) { + final OrderProvider op = new OrderProvider(context); + forEachEntry(new TIntObjectProcedure>() { @Override public boolean execute(final int a, final Collection b) { - stream.print(" Key: "); - stream.println(context.getValue(a)); - stream.println(" Values:"); - - final List list = new LinkedList (); - - for (final V value : b) { - final ByteArrayOutputStream baos = new ByteArrayOutputStream(); - final PrintStream s = new PrintStream(baos); - - value.toStream(context, s); - - list.add(baos.toString()); - } - - Collections.sort(list); - - for (final String l : list) { - stream.print(l); - } - - stream.println(" End Of Values"); + op.register(a); return true; } }); + + final int[] keys = op.get(); + + for (final int a : keys) { + final Collection b = get(a); + stream.print(" Key: "); + stream.println(context.getValue(a)); + stream.println(" Values:"); + + final List list = new LinkedList(); + + for (final V value : b) { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final PrintStream s = new PrintStream(baos); + + value.toStream(context, s); + + list.add(baos.toString()); + } + + Collections.sort(list); + + for (final String l : list) { + stream.print(l); + } + + stream.println(" End Of Values"); + } } } diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 86dd31341bc9..46dbf69fcb4d 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -1934,14 +1934,18 @@ public class Mappings { } } - private void cleanupRemovedClass(@NotNull ClassRepr cr, - Collection clusters, - IntIntMultiMaplet subclassesTrashBin, - IntIntMultiMaplet dependenciesTrashBin) { + private void cleanupRemovedClass(final Mappings delta, + @NotNull final ClassRepr cr, + final Collection clusters, + final IntIntMultiMaplet dependenciesTrashBin) { final int className = cr.name; + //for (final int superSomething : cr.getSupers()) { + // subclassesTrashBin.put(superSomething, className); + //} + for (final int superSomething : cr.getSupers()) { - subclassesTrashBin.put(superSomething, className); + delta.registerRemovedSuperClass(className, superSomething); } cleanupBackDependency(className, clusters, dependenciesTrashBin); @@ -1961,7 +1965,7 @@ public class Mappings { delta.runPostPasses(); final IntIntMultiMaplet dependenciesTrashBin = new IntIntTransientMultiMaplet(); - final IntIntMultiMaplet subclassesTrashBin = new IntIntTransientMultiMaplet(); + //final IntIntMultiMaplet subclassesTrashBin = new IntIntTransientMultiMaplet(); if (removed != null) { for (final String file : removed) { @@ -1971,7 +1975,7 @@ public class Mappings { if (fileClasses != null) { for (final ClassRepr aClass : fileClasses) { - cleanupRemovedClass(aClass, fileUsages, subclassesTrashBin, dependenciesTrashBin); + cleanupRemovedClass(delta, aClass, fileUsages, dependenciesTrashBin); } } @@ -1993,17 +1997,17 @@ public class Mappings { }); for (ClassRepr repr : delta.getDeletedClasses()) { - cleanupRemovedClass(repr, null, subclassesTrashBin, dependenciesTrashBin); + cleanupRemovedClass(delta, repr, null, dependenciesTrashBin); } - subclassesTrashBin.forEachEntry(new TIntObjectProcedure() { - @Override - public boolean execute(int aClass, TIntHashSet deps) { - myClassToSubclasses.removeAll(aClass, deps); - return true; - } - }); - subclassesTrashBin.close(); + //subclassesTrashBin.forEachEntry(new TIntObjectProcedure() { + // @Override + // public boolean execute(int aClass, TIntHashSet deps) { + // myClassToSubclasses.removeAll(aClass, deps); + // return true; + // } + //}); + //subclassesTrashBin.close(); delta.getChangedClasses().forEach(new TIntProcedure() { @Override diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/OrderProvider.java b/jps/model/src/org/jetbrains/ether/dependencyView/OrderProvider.java new file mode 100644 index 000000000000..76a01f35b693 --- /dev/null +++ b/jps/model/src/org/jetbrains/ether/dependencyView/OrderProvider.java @@ -0,0 +1,54 @@ +package org.jetbrains.ether.dependencyView; + +import org.intellij.lang.annotations.JdkConstants; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * Created with IntelliJ IDEA. + * User: db + * Date: 24.06.12 + * Time: 19:08 + * To change this template use File | Settings | File Templates. + */ +class OrderProvider { + private class Entry implements Comparable { + final String myString; + final int myInt; + + private Entry(int anInt) { + myInt = anInt; + myString = myContext.getValue(anInt); + } + + @Override + public int compareTo(final Entry o) { + return o.myString.compareTo(myString); + } + } + private final DependencyContext myContext; + private final List myList = new LinkedList(); + + OrderProvider(final DependencyContext context) { + myContext = context; + } + + void register (final int key) { + myList.add(new Entry(key)); + } + + int[] get() { + Collections.sort(myList); + + final int[] result = new int[myList.size()]; + int i = 0; + + for (final Entry e : myList) { + result[i++] = e.myInt; + } + + return result; + } +}