mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
[kotlin] Do not index kotlin files outside of source roots
#KTIJ-21664 GitOrigin-RevId: 425f2385c6ce332c40dbbc1e171f8997acdf4594
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d05e4706f3
commit
360a5e7f69
+31
@@ -0,0 +1,31 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.stubindex
|
||||
|
||||
import com.intellij.find.ngrams.TrigramIndex
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.ProjectFileIndex
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.FilenameIndex
|
||||
import com.intellij.util.indexing.GlobalIndexFilter
|
||||
import com.intellij.util.indexing.IndexId
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
|
||||
class KotlinNonSourceRootIndexFilter: GlobalIndexFilter {
|
||||
private val enabled = !Registry.`is`("kotlin.index.non.source.roots")
|
||||
|
||||
override fun isExcludedFromIndex(virtualFile: VirtualFile, indexId: IndexId<*, *>): Boolean = false
|
||||
|
||||
override fun isExcludedFromIndex(virtualFile: VirtualFile, indexId: IndexId<*, *>, project: Project?): Boolean =
|
||||
project != null &&
|
||||
affectsIndex(indexId) &&
|
||||
virtualFile.extension == KotlinFileType.EXTENSION &&
|
||||
ProjectRootManager.getInstance(project).fileIndex.getOrderEntriesForFile(virtualFile).isEmpty() &&
|
||||
!ProjectFileIndex.getInstance(project).isInLibrary(virtualFile)
|
||||
|
||||
override fun getVersion(): Int = 0
|
||||
|
||||
override fun affectsIndex(indexId: IndexId<*, *>): Boolean =
|
||||
enabled && (indexId !== TrigramIndex.INDEX_ID && indexId !== FilenameIndex.NAME)
|
||||
}
|
||||
+3
@@ -10,6 +10,7 @@ import com.intellij.testFramework.runInEdtAndWait
|
||||
import com.intellij.util.io.readText
|
||||
import org.jetbrains.kotlin.idea.core.util.toPsiFile
|
||||
import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils
|
||||
import org.jetbrains.kotlin.idea.test.waitIndexingComplete
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
@@ -75,6 +76,8 @@ abstract class AbstractGradleMultiFileQuickFixTest : MultiplePluginVersionGradle
|
||||
)
|
||||
}
|
||||
|
||||
myProject.waitIndexingComplete("indexing new created modules")
|
||||
|
||||
codeInsightTestFixture.doHighlighting()
|
||||
DirectiveBasedActionUtils.checkAvailableActionsAreExpected(ktFile, action?.let { actions - it } ?: actions)
|
||||
DirectiveBasedActionUtils.checkForUnexpectedErrors(ktFile)
|
||||
|
||||
+12
-9
@@ -26,14 +26,11 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
|
||||
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
|
||||
import org.jetbrains.kotlin.idea.highlighter.KotlinHighlightingUtil
|
||||
import org.jetbrains.kotlin.idea.script.AbstractScriptConfigurationTest.Companion.useDefaultTemplate
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.idea.test.runAll
|
||||
import org.jetbrains.kotlin.idea.test.*
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
import org.jetbrains.kotlin.idea.test.KotlinCompilerStandalone
|
||||
import org.jetbrains.kotlin.idea.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import org.jetbrains.kotlin.test.util.addDependency
|
||||
import org.jetbrains.kotlin.test.util.projectLibrary
|
||||
@@ -123,23 +120,24 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
|
||||
module.addDependency(
|
||||
projectLibrary(
|
||||
"script-template-library",
|
||||
classesRoot = VfsUtil.findFileByIoFile(environment["template-classes"] as File, true)
|
||||
classesRoot = environment.toVirtualFile("template-classes")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (configureConflictingModule in environment) {
|
||||
val sharedLib = VfsUtil.findFileByIoFile(environment["lib-classes"] as File, true)!!
|
||||
val sharedLib = environment.toVirtualFile("lib-classes")
|
||||
val sharedLibSources = environment.toVirtualFile("lib-source")
|
||||
if (module == null) {
|
||||
// Force create module if it doesn't exist
|
||||
myModule = createTestModuleByName("mainModule")
|
||||
}
|
||||
module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib))
|
||||
module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib, sourcesRoot = sharedLibSources))
|
||||
}
|
||||
|
||||
if (module != null) {
|
||||
ModuleRootModificationUtil.updateModel(module) { model ->
|
||||
module?.let {
|
||||
ModuleRootModificationUtil.updateModel(it) { model ->
|
||||
model.sdk = sdk
|
||||
}
|
||||
}
|
||||
@@ -147,6 +145,11 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() {
|
||||
return createFileAndSyncDependencies(mainScriptFile)
|
||||
}
|
||||
|
||||
private fun Environment.toVirtualFile(name: String): VirtualFile {
|
||||
val value = this[name] as? File ?: error("no file value for '$name'")
|
||||
return VfsUtil.findFileByIoFile(value, true) ?: error("unable to look up a virtual file for $name: $value")
|
||||
}
|
||||
|
||||
private val oldScripClasspath: String? = System.getProperty("kotlin.script.classpath")
|
||||
|
||||
private var settings: Element? = null
|
||||
|
||||
+2
-1
@@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.macros.KOTLIN_BUNDLED
|
||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||
import org.jetbrains.kotlin.idea.test.resetCodeStyle
|
||||
import org.jetbrains.kotlin.idea.test.runAll
|
||||
import org.jetbrains.kotlin.idea.test.waitIndexingComplete
|
||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
@@ -2630,7 +2631,7 @@ abstract class AbstractKotlinMavenImporterTest : KotlinMavenImportingTestCase()
|
||||
)
|
||||
|
||||
importProjects(pomMain, pomA, pomB)
|
||||
|
||||
myProject.waitIndexingComplete()
|
||||
assertModules("module-with-kotlin", "module-with-java", "mvnktest")
|
||||
|
||||
val dependencies = (dummyFile.toPsiFile(myProject) as KtFile).analyzeAndGetResult().moduleDescriptor.allDependencyModules
|
||||
|
||||
+2
-7
@@ -10,7 +10,6 @@ import com.intellij.openapi.actionSystem.IdeActions
|
||||
import com.intellij.openapi.editor.EditorFactory
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.profile.codeInspection.ProjectInspectionProfileManager
|
||||
@@ -21,7 +20,6 @@ import com.intellij.testFramework.*
|
||||
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl
|
||||
import com.intellij.util.ArrayUtilRt
|
||||
import com.intellij.util.ThrowableRunnable
|
||||
import com.intellij.util.indexing.UnindexedFilesUpdater
|
||||
import com.intellij.util.ui.UIUtil
|
||||
import org.jetbrains.kotlin.idea.testFramework.Stats
|
||||
import org.jetbrains.kotlin.idea.testFramework.Stats.Companion.WARM_UP
|
||||
@@ -33,6 +31,7 @@ import org.jetbrains.kotlin.idea.performance.tests.utils.logMessage
|
||||
import org.jetbrains.kotlin.idea.performance.tests.utils.project.*
|
||||
import org.jetbrains.kotlin.idea.search.usagesSearch.ExpressionsOfTypeProcessor
|
||||
import org.jetbrains.kotlin.idea.test.invalidateLibraryCache
|
||||
import org.jetbrains.kotlin.idea.test.waitIndexingComplete
|
||||
import org.jetbrains.kotlin.idea.testFramework.*
|
||||
import org.jetbrains.kotlin.idea.testFramework.Fixture.Companion.openFixture
|
||||
import org.jetbrains.kotlin.test.KotlinRoot
|
||||
@@ -217,11 +216,7 @@ abstract class AbstractPerformanceProjectsTest : UsefulTestCase() {
|
||||
|
||||
logMessage { "project $name is ${if (project.isInitialized) "initialized" else "not initialized"}" }
|
||||
|
||||
with(DumbService.getInstance(project)) {
|
||||
queueTask(UnindexedFilesUpdater(project))
|
||||
completeJustSubmittedTasks()
|
||||
}
|
||||
dispatchAllInvocationEvents()
|
||||
project.waitIndexingComplete("index project")
|
||||
|
||||
Fixture.enableAnnotatorsAndLoadDefinitions(project)
|
||||
|
||||
|
||||
@@ -59,5 +59,13 @@
|
||||
serviceInterface="org.jetbrains.kotlin.psi.stubs.elements.StubIndexService"
|
||||
serviceImplementation="org.jetbrains.kotlin.idea.stubindex.IdeStubIndexService"/>
|
||||
|
||||
<globalIndexFilter implementation="org.jetbrains.kotlin.idea.stubindex.KotlinNonSourceRootIndexFilter"/>
|
||||
|
||||
<registryKey
|
||||
key="kotlin.index.non.source.roots"
|
||||
description="Index Kotlin files outside of source roots"
|
||||
defaultValue="true"
|
||||
restartRequired="true"/>
|
||||
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
@@ -3,18 +3,25 @@
|
||||
package org.jetbrains.kotlin.idea.test
|
||||
|
||||
import com.intellij.lang.annotation.HighlightSeverity
|
||||
import com.intellij.openapi.application.invokeAndWaitIfNeeded
|
||||
import com.intellij.openapi.diagnostic.ControlFlowException
|
||||
import com.intellij.openapi.editor.Document
|
||||
import com.intellij.openapi.module.ModuleManager
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.testFramework.LightPlatformTestCase
|
||||
import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture
|
||||
import com.intellij.util.indexing.IndexingFlag
|
||||
import com.intellij.util.indexing.UnindexedFilesUpdater
|
||||
import com.intellij.util.ui.UIUtil
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||
import org.jetbrains.kotlin.idea.caches.project.LibraryModificationTracker
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent
|
||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.idea.util.rootManager
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.KotlinRoot
|
||||
import java.io.File
|
||||
@@ -57,6 +64,20 @@ fun JavaCodeInsightTestFixture.dumpErrorLines(): List<String> {
|
||||
}
|
||||
}
|
||||
|
||||
fun Project.waitIndexingComplete(indexingReason: String? = null) {
|
||||
val project = this
|
||||
UIUtil.dispatchAllInvocationEvents()
|
||||
invokeAndWaitIfNeeded {
|
||||
// TODO: [VD] a dirty hack to reindex created android project
|
||||
IndexingFlag.cleanupProcessedFlag()
|
||||
with(DumbService.getInstance(project)) {
|
||||
queueTask(UnindexedFilesUpdater(project, indexingReason))
|
||||
completeJustSubmittedTasks()
|
||||
}
|
||||
UIUtil.dispatchAllInvocationEvents()
|
||||
}
|
||||
}
|
||||
|
||||
fun closeAndDeleteProject() = LightPlatformTestCase.closeAndDeleteProject()
|
||||
|
||||
fun invalidateLibraryCache(project: Project) {
|
||||
|
||||
Reference in New Issue
Block a user