diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesResolveScopeProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesResolveScopeProvider.kt index 399f557c073..5aa18505446 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesResolveScopeProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesResolveScopeProvider.kt @@ -21,23 +21,22 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.ResolveScopeProvider import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesInfo -import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesSourceInfo -import org.jetbrains.kotlin.idea.caches.project.getModuleInfoByVirtualFile import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager class ScriptDependenciesResolveScopeProvider : ResolveScopeProvider() { override fun getResolveScope(file: VirtualFile, project: Project): GlobalSearchScope? { - if (ScriptConfigurationManager.getInstance(project).getAllScriptsDependenciesClassFiles().isEmpty()) return null + val manager = ScriptConfigurationManager.getInstance(project) + if (manager.getAllScriptsDependenciesClassFiles().isEmpty()) return null + + if (file !in manager.getAllScriptsDependenciesClassFilesScope() && file !in manager.getAllScriptDependenciesSourcesScope()) { + return null + } - val moduleInfo = getModuleInfoByVirtualFile(project, file) ?: return null - val scriptDependenciesModuleInfo = (moduleInfo as? ScriptDependenciesInfo) - ?: (moduleInfo as? ScriptDependenciesSourceInfo)?.binariesModuleInfo - ?: return null return GlobalSearchScope.union( - arrayOf( - GlobalSearchScope.fileScope(project, file), - *scriptDependenciesModuleInfo.dependencies().map { it.contentScope() }.toTypedArray() - ) + arrayOf( + GlobalSearchScope.fileScope(project, file), + *ScriptDependenciesInfo.ForProject(project).dependencies().map { it.contentScope() }.toTypedArray() + ) ) } } \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/lib/test/Task.java b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/lib/test/Task.java new file mode 100644 index 00000000000..b47699c28b5 --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/lib/test/Task.java @@ -0,0 +1,4 @@ +package test; + +public class Task { +} \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/script.kts b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/script.kts new file mode 100644 index 00000000000..ef19bc5e56d --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/script.kts @@ -0,0 +1,5 @@ +test.JavaClass().task() { + it.outputs +} + +// CONFLICTING_MODULE \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt new file mode 100644 index 00000000000..b31570b2c86 --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/template.kt @@ -0,0 +1,24 @@ +package custom.scriptDefinition + +import java.io.File +import kotlin.script.dependencies.* +import kotlin.script.experimental.dependencies.* +import kotlin.script.templates.ScriptTemplateDefinition +import kotlin.script.experimental.location.* + +class TestDependenciesResolver : DependenciesResolver { + override fun resolve( + scriptContents: ScriptContents, + environment: Environment + ): DependenciesResolver.ResolveResult { + return DependenciesResolver.ResolveResult.Success( + ScriptDependencies( + classpath = listOf(environment["template-classes"] as File) + ) + ) + } +} + +@ScriptExpectedLocations([ScriptExpectedLocation.Everywhere]) +@ScriptTemplateDefinition(TestDependenciesResolver::class, scriptFilePattern = "script.kts") +open class Template \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Action.java b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Action.java new file mode 100644 index 00000000000..cb7453ace90 --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Action.java @@ -0,0 +1,5 @@ +package test; + +public interface Action { + void execute(T t); +} \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/JavaClass.java b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/JavaClass.java new file mode 100644 index 00000000000..1251bb74092 --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/JavaClass.java @@ -0,0 +1,7 @@ +package test; + +public class JavaClass { + public Task task(Action configureAction) { + return new Task(); + } +} \ No newline at end of file diff --git a/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Task.java b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Task.java new file mode 100644 index 00000000000..3d8ed2c1a7b --- /dev/null +++ b/idea/testData/script/definition/highlighting/customLibraryInModuleDeps/template/test/Task.java @@ -0,0 +1,7 @@ +package test; + +public class Task { + public String getOutputs() { + return ""; + } +} \ 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 c0ae2876db3..9a7ed20221d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -100,19 +100,7 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { ModuleRootModificationUtil.addDependency(myModule, newModule) } - if (configureConflictingModule in environment) { - val sharedLib = VfsUtil.findFileByIoFile(environment["lib-classes"] as File, true)!! - if (module == null) { - myModule = createTestModuleByName("mainModule") - } - module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib)) - } - if (module != null) { - ModuleRootModificationUtil.updateModel(module) { model -> - model.sdk = sdk - } - module.addDependency( projectLibrary( "script-runtime", @@ -130,6 +118,21 @@ abstract class AbstractScriptConfigurationTest : KotlinCompletionTestCase() { } } + if (configureConflictingModule in environment) { + val sharedLib = VfsUtil.findFileByIoFile(environment["lib-classes"] as File, true)!! + if (module == null) { + // Force create module if it doesn't exist + myModule = createTestModuleByName("mainModule") + } + module.addDependency(projectLibrary("sharedLib", classesRoot = sharedLib)) + } + + if (module != null) { + ModuleRootModificationUtil.updateModel(module) { model -> + model.sdk = sdk + } + } + createFileAndSyncDependencies(mainScriptFile) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java index af7b1e38d44..fb6777e2615 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/script/ScriptConfigurationHighlightingTestGenerated.java @@ -71,6 +71,11 @@ public class ScriptConfigurationHighlightingTestGenerated extends AbstractScript runTest("idea/testData/script/definition/highlighting/customLibrary/"); } + @TestMetadata("customLibraryInModuleDeps") + public void testCustomLibraryInModuleDeps() throws Exception { + runTest("idea/testData/script/definition/highlighting/customLibraryInModuleDeps/"); + } + @TestMetadata("doNotSpeakAboutJava") public void testDoNotSpeakAboutJava() throws Exception { runTest("idea/testData/script/definition/highlighting/doNotSpeakAboutJava/");