diff --git a/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java b/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java index 57db60a83b06..1b5ea6483a35 100644 --- a/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java +++ b/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java @@ -19,6 +19,7 @@ */ package com.intellij.psi.stubs; +import gnu.trove.THashMap; import gnu.trove.TIntArrayList; import org.jetbrains.annotations.NotNull; @@ -57,30 +58,40 @@ public class StubTree { public Map> indexStubTree() { final Map> result = new HashMap>(); + SerializationManager serializationManager = SerializationManager.getInstance(); + StubIndexSink sink = new StubIndexSink(result); + for (int i = 0, plainListSize = myPlainList.size(); i < plainListSize; i++) { final StubElement stub = myPlainList.get(i); - final StubSerializer serializer = SerializationManager.getInstance().getSerializer(stub); - final int stubIdx = i; - //noinspection unchecked - serializer.indexStub(stub, new IndexSink() { - @Override - public void occurrence(@NotNull final StubIndexKey indexKey, @NotNull final Object value) { - Map map = result.get(indexKey); - if (map == null) { - map = new HashMap(); - result.put(indexKey, map); - } - - TIntArrayList list = map.get(value); - if (list == null) { - list = new TIntArrayList(); - map.put(value, list); - } - list.add(stubIdx); - } - }); + sink.myStubIdx = i; + serializationManager.getSerializer(stub).indexStub(stub, sink); } return result; } + + private static class StubIndexSink implements IndexSink { + private final Map> myResult; + private int myStubIdx; + + public StubIndexSink(Map> result) { + myResult = result; + } + + @Override + public void occurrence(@NotNull final StubIndexKey indexKey, @NotNull final Object value) { + Map map = myResult.get(indexKey); + if (map == null) { + map = new THashMap(); + myResult.put(indexKey, map); + } + + TIntArrayList list = map.get(value); + if (list == null) { + list = new TIntArrayList(); + map.put(value, list); + } + list.add(myStubIdx); + } + } }