package com.intellij.compilerOutputIndex.impl; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.intellij.compilerOutputIndex.api.indexer.CompilerOutputBaseIndex; import com.intellij.util.indexing.StorageException; import com.intellij.util.indexing.ValueContainer; import com.intellij.util.io.KeyDescriptor; import java.util.TreeSet; /** * @author Dmitry Batkovich */ public abstract class CompilerOutputBaseGramsIndex extends CompilerOutputBaseIndex> { protected CompilerOutputBaseGramsIndex(final KeyDescriptor keyDescriptor) { super(keyDescriptor, new GuavaHashMultiSetExternalizer(MethodIncompleteSignature.createKeyDescriptor())); } public TreeSet getValues(final K key) { try { final ValueContainer> valueContainer = myIndex.getData(key); final Multiset rawValues = HashMultiset.create(); valueContainer.forEach(new ValueContainer.ContainerAction>() { @Override public boolean perform(final int id, final Multiset values) { for (final Multiset.Entry entry : values.entrySet()) { rawValues.add(entry.getElement(), entry.getCount()); } return true; } }); return rawValuesToValues(rawValues); } catch (StorageException e) { throw new RuntimeException(); } } private static TreeSet rawValuesToValues(final Multiset rawValues) { final TreeSet values = new TreeSet(); for (final Multiset.Entry entry : rawValues.entrySet()) { values.add(new UsageIndexValue(entry.getElement(), entry.getCount())); } return values; } }