Scripts: Check if file is in all script dependencies class files scope instead of searching for module info

^KT-32799 Fixed
^KT-16760 Add test
This commit is contained in:
Natalia Selezneva
2019-09-19 12:14:41 +03:00
parent 245b2aecb3
commit eca7bbdb8c
9 changed files with 82 additions and 23 deletions
@@ -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()
)
)
}
}