Completion for script inside module should provide classes from related module
^KT-35825 Fixed
This commit is contained in:
+18
-12
@@ -22,8 +22,9 @@ import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.ResolveScopeProvider
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.core.script.StandardIdeScriptDefinition
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
@@ -39,17 +40,22 @@ class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
|
||||
if (file.fileType != KotlinFileType.INSTANCE) return null
|
||||
|
||||
val ktFile = PsiManager.getInstance(project).findFile(file) as? KtFile ?: return null
|
||||
val scriptDefinition = ktFile.findScriptDefinition()
|
||||
return when {
|
||||
scriptDefinition == null -> null
|
||||
// This is a workaround for completion in scripts and REPL to provide module dependencies
|
||||
scriptDefinition.baseClassType.fromClass == Any::class -> null
|
||||
scriptDefinition.asLegacyOrNull<StandardIdeScriptDefinition>() != null -> null
|
||||
scriptDefinition is ScriptDefinition.FromConfigurations || scriptDefinition.asLegacyOrNull<KotlinScriptDefinitionFromAnnotatedTemplate>() != null -> {
|
||||
GlobalSearchScope.fileScope(project, file)
|
||||
.union(ScriptConfigurationManager.getInstance(project).getScriptDependenciesClassFilesScope(file))
|
||||
}
|
||||
else -> null
|
||||
val scriptDefinition = ktFile.findScriptDefinition() ?: return null
|
||||
|
||||
// This is a workaround for completion in scripts inside module and REPL to provide module dependencies
|
||||
if (ktFile.getModuleInfo() !is ScriptModuleInfo) return null
|
||||
|
||||
// This is a workaround for completion in REPL to provide module dependencies
|
||||
if (scriptDefinition.baseClassType.fromClass == Any::class) return null
|
||||
|
||||
if (scriptDefinition is ScriptDefinition.FromConfigurations ||
|
||||
scriptDefinition.asLegacyOrNull<KotlinScriptDefinitionFromAnnotatedTemplate>() != null
|
||||
) {
|
||||
return GlobalSearchScope.fileScope(project, file).union(
|
||||
ScriptConfigurationManager.getInstance(project).getScriptDependenciesClassFilesScope(file)
|
||||
)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user