From 3d91c410e70bf9e068b893781bc1c9ad0fa4e445 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Thu, 11 Jun 2020 17:09:37 +0300 Subject: [PATCH] *.gradle.kts: include project sources in script dependencies sources scope ^KT-39523 Fixed --- .../kotlin/idea/caches/project/ScriptModuleInfos.kt | 4 +++- .../kotlin/idea/stubindex/KotlinSourceFilterScope.kt | 2 +- .../buildSrcProblem/depModule/test/custom.kt | 7 +++++++ .../definition/navigation/buildSrcProblem/script.kts | 6 ++++++ .../idea/script/AbstractScriptConfigurationTest.kt | 10 ++++++++++ .../ScriptConfigurationNavigationTestGenerated.java | 5 +++++ 6 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 idea/testData/script/definition/navigation/buildSrcProblem/depModule/test/custom.kt create mode 100644 idea/testData/script/definition/navigation/buildSrcProblem/script.kts diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt index 68c8457a3f9..9ab8930f6ad 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ScriptModuleInfos.kt @@ -132,7 +132,9 @@ sealed class ScriptDependenciesSourceInfo(override val project: Project) : IdeaM override val binariesModuleInfo: ScriptDependenciesInfo get() = ScriptDependenciesInfo.ForProject(project) - override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.librarySources( + // include project sources because script dependencies sources may contain roots from project + // the main example is buildSrc for *.gradle.kts files + override fun sourceScope(): GlobalSearchScope = KotlinSourceFilterScope.projectAndLibrariesSources( ScriptConfigurationManager.getInstance(project).getAllScriptDependenciesSourcesScope(), project ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt index 40217840b42..d9483ba380d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/KotlinSourceFilterScope.kt @@ -157,7 +157,7 @@ class KotlinSourceFilterScope private constructor( includeProjectSourceFiles = true, includeLibrarySourceFiles = true, includeClassFiles = false, - includeScriptDependencies = false, + includeScriptDependencies = true, includeScriptsOutsideSourceRoots = true, project = project ) diff --git a/idea/testData/script/definition/navigation/buildSrcProblem/depModule/test/custom.kt b/idea/testData/script/definition/navigation/buildSrcProblem/depModule/test/custom.kt new file mode 100644 index 00000000000..e98015f518f --- /dev/null +++ b/idea/testData/script/definition/navigation/buildSrcProblem/depModule/test/custom.kt @@ -0,0 +1,7 @@ +package test + +object KObject { + fun foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/script/definition/navigation/buildSrcProblem/script.kts b/idea/testData/script/definition/navigation/buildSrcProblem/script.kts new file mode 100644 index 00000000000..c5dc437ca34 --- /dev/null +++ b/idea/testData/script/definition/navigation/buildSrcProblem/script.kts @@ -0,0 +1,6 @@ +test.KObject.foo() + +// DEPENDENCIES: classpath:module-classes; sources:module-source + +// REF: (in test.KObject).foo() +// FILE: test/custom.kt \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt index 8dba46182fc..c016e5e0d31 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -30,6 +30,7 @@ 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.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.test.KotlinTestUtils @@ -265,11 +266,20 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { val libClasses = libSrcDir?.let { compileLibToDir(it) } + var moduleSrcDir = File("${path}depModule").takeIf { it.isDirectory } + val moduleClasses = moduleSrcDir?.let { compileLibToDir(it) } + if (moduleSrcDir != null) { + val depModule = createTestModuleFromDir(moduleSrcDir) + moduleSrcDir = File(depModule.getModuleDir()) + } + return mapOf( "runtime-classes" to ForTestCompileRuntime.runtimeJarForTests(), "runtime-source" to File("libraries/stdlib/src"), "lib-classes" to libClasses, "lib-source" to libSrcDir, + "module-classes" to moduleClasses, + "module-source" to moduleSrcDir, "template-classes" to templateOutDir ) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java index 5cdba271429..cab57ad7e3b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationNavigationTestGenerated.java @@ -28,6 +28,11 @@ public class ScriptConfigurationNavigationTestGenerated extends AbstractScriptCo KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/script/definition/navigation"), Pattern.compile("^([^\\.]+)$"), null, false); } + @TestMetadata("buildSrcProblem") + public void testBuildSrcProblem() throws Exception { + runTest("idea/testData/script/definition/navigation/buildSrcProblem/"); + } + @TestMetadata("conflictingModule") public void testConflictingModule() throws Exception { runTest("idea/testData/script/definition/navigation/conflictingModule/");