index: allow to specify index storage by property; use selected index storage

GitOrigin-RevId: e5450184cfe4d4d096f24e8d4b46a2538a9cc9db
This commit is contained in:
Dmitry Batkovich
2021-01-21 11:20:40 +00:00
committed by intellij-monorepo-bot
parent 223ed8e56e
commit 619b747f0a
2 changed files with 21 additions and 3 deletions
@@ -1,11 +1,9 @@
// Copyright 2000-2021 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.util.indexing.impl.storage
import com.intellij.util.SystemProperties
import com.intellij.util.indexing.*
import com.intellij.util.indexing.impl.IndexStorage
import com.intellij.util.indexing.impl.forward.*
import com.intellij.util.indexing.impl.storage.mvstore.MVStoreForwardIndexStorageLayoutProvider
import com.intellij.util.indexing.memory.InMemoryForwardIndex
import com.intellij.util.indexing.memory.InMemoryIndexStorage
import com.intellij.util.indexing.snapshot.SnapshotInputMappings
@@ -14,11 +12,16 @@ import org.jetbrains.annotations.ApiStatus
import java.io.IOException
object DefaultIndexStorageLayout {
val forcedLayout: String? = System.getProperty("idea.index.storage.forced.layout")
@JvmStatic
@Throws(IOException::class)
fun <Key, Value> getLayout(indexExtension: FileBasedIndexExtension<Key, Value>,
contentHashEnumeratorReopen: Boolean): VfsAwareIndexStorageLayout<Key, Value> {
val layoutEP = getForcedLayoutEP() ?: FileBasedIndexLayoutSettings.getUsedLayout()
if (layoutEP != null) {
return layoutEP.layoutProvider.getLayout(indexExtension)
}
if (FileBasedIndex.USE_IN_MEMORY_INDEX) {
return InMemoryStorageLayout(indexExtension)
}
@@ -31,6 +34,12 @@ object DefaultIndexStorageLayout {
else DefaultStorageLayout(indexExtension)
}
private fun getForcedLayoutEP(): FileBasedIndexLayoutProviderBean? {
val layout = forcedLayout ?: return null
return FileBasedIndexLayoutProvider.STORAGE_LAYOUT_EP_NAME.extensions.find { it.id == layout }
?: throw IllegalStateException("Can't find index storage layout for id = $layout")
}
@ApiStatus.Internal
private fun <Key, Value> getForwardIndexAccessor(indexExtension: IndexExtension<Key, Value, *>): AbstractMapForwardIndexAccessor<Key, Value, *> {
return if (indexExtension !is SingleEntryFileBasedIndexExtension<*> || FileBasedIndex.USE_IN_MEMORY_INDEX) {
@@ -3,6 +3,7 @@ package com.intellij.util.indexing.impl.storage;
import com.intellij.AbstractBundle;
import com.intellij.DynamicBundle;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.PluginAware;
import com.intellij.openapi.extensions.PluginDescriptor;
@@ -57,7 +58,15 @@ public final class FileBasedIndexLayoutProviderBean implements PluginAware {
return AbstractBundle.message(resourceBundle, presentableNameKey);
}
private PluginDescriptor myPluginDescriptor;
private FileBasedIndexLayoutProvider myLayoutProvider;
@NotNull synchronized FileBasedIndexLayoutProvider getLayoutProvider() {
if (myLayoutProvider == null) {
myLayoutProvider = ApplicationManager.getApplication().instantiateClass(providerClass, myPluginDescriptor);
}
return myLayoutProvider;
}
private volatile PluginDescriptor myPluginDescriptor;
@Override
public void setPluginDescriptor(@NotNull PluginDescriptor pluginDescriptor) {
myPluginDescriptor = pluginDescriptor;