mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
index: allow to specify index storage by property; use selected index storage
GitOrigin-RevId: e5450184cfe4d4d096f24e8d4b46a2538a9cc9db
This commit is contained in:
committed by
intellij-monorepo-bot
parent
223ed8e56e
commit
619b747f0a
+11
-2
@@ -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) {
|
||||
|
||||
+10
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user