From 0ee8d21de5274e057a9301447aebcf02b1eca1c0 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Mon, 25 Nov 2019 11:24:59 +0300 Subject: [PATCH] extract class GitOrigin-RevId: c1be96c9cad666b6f13669ca485f77e0cc18a775 --- .../impl/id/IdIndexEntriesExternalizer.java | 48 +++++++++++++++++++ .../psi/impl/cache/impl/id/IdIndexImpl.java | 40 +--------------- 2 files changed, 49 insertions(+), 39 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntriesExternalizer.java diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntriesExternalizer.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntriesExternalizer.java new file mode 100644 index 000000000000..fa0bb0cbb3e1 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexEntriesExternalizer.java @@ -0,0 +1,48 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.psi.impl.cache.impl.id; + +import com.intellij.openapi.util.ThreadLocalCachedIntArray; +import com.intellij.util.io.DataExternalizer; +import com.intellij.util.io.DataInputOutputUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +class IdIndexEntriesExternalizer implements DataExternalizer> { + private static final ThreadLocalCachedIntArray spareBufferLocal = new ThreadLocalCachedIntArray(); + + @Override + public void save(@NotNull DataOutput out, @NotNull Collection value) throws IOException { + int size = value.size(); + final int[] values = spareBufferLocal.getBuffer(size); + int ptr = 0; + for(IdIndexEntry ie:value) { + values[ptr++] = ie.getWordHashCode(); + } + Arrays.sort(values, 0, size); + DataInputOutputUtil.writeINT(out, size); + int prev = 0; + for(int i = 0; i < size; ++i) { + DataInputOutputUtil.writeLONG(out, (long)values[i] - prev); + prev = values[i]; + } + } + + @Override + public Collection read(@NotNull DataInput in) throws IOException { + int length = DataInputOutputUtil.readINT(in); + ArrayList entries = new ArrayList<>(length); + int prev = 0; + while(length-- > 0) { + final int l = (int)(DataInputOutputUtil.readLONG(in) + prev); + entries.add(new IdIndexEntry(l)); + prev = l; + } + return entries; + } +} diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java index 035c90593b26..e8981bee1d29 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/IdIndexImpl.java @@ -4,22 +4,14 @@ package com.intellij.psi.impl.cache.impl.id; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.FileTypeRegistry; import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.ThreadLocalCachedIntArray; import com.intellij.util.indexing.CustomInputsIndexFileBasedIndexExtension; import com.intellij.util.io.DataExternalizer; -import com.intellij.util.io.DataInputOutputUtil; import org.jetbrains.annotations.NotNull; -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class IdIndexImpl extends IdIndex implements CustomInputsIndexFileBasedIndexExtension { - private static final ThreadLocalCachedIntArray spareBufferLocal = new ThreadLocalCachedIntArray(); - @Override public int getVersion() { FileType[] types = FileTypeRegistry.getInstance().getRegisteredFileTypes(); @@ -38,36 +30,6 @@ public class IdIndexImpl extends IdIndex implements CustomInputsIndexFileBasedIn @NotNull @Override public DataExternalizer> createExternalizer() { - return new DataExternalizer>() { - @Override - public void save(@NotNull DataOutput out, @NotNull Collection value) throws IOException { - int size = value.size(); - final int[] values = spareBufferLocal.getBuffer(size); - int ptr = 0; - for(IdIndexEntry ie:value) { - values[ptr++] = ie.getWordHashCode(); - } - Arrays.sort(values, 0, size); - DataInputOutputUtil.writeINT(out, size); - int prev = 0; - for(int i = 0; i < size; ++i) { - DataInputOutputUtil.writeLONG(out, (long)values[i] - prev); - prev = values[i]; - } - } - - @Override - public Collection read(@NotNull DataInput in) throws IOException { - int length = DataInputOutputUtil.readINT(in); - ArrayList entries = new ArrayList<>(length); - int prev = 0; - while(length-- > 0) { - final int l = (int)(DataInputOutputUtil.readLONG(in) + prev); - entries.add(new IdIndexEntry(l)); - prev = l; - } - return entries; - } - }; + return new IdIndexEntriesExternalizer(); } }