Implement support for static resolving to scripts in source roots in IDEA
This commit is contained in:
committed by
Ilya Chernikov
parent
9453834fb1
commit
2ecddc996a
@@ -205,11 +205,6 @@ private inline fun <T> collectInfosByVirtualFile(
|
||||
isScript: Boolean = getScriptDefinition(virtualFile, project) != null,
|
||||
onOccurrence: (IdeaModuleInfo?) -> T
|
||||
): T {
|
||||
if (isScript) {
|
||||
getScriptDefinition(virtualFile, project)?.let {
|
||||
onOccurrence(ScriptModuleInfo(project, virtualFile, it))
|
||||
}
|
||||
}
|
||||
|
||||
val projectFileIndex = ProjectFileIndex.SERVICE.getInstance(project)
|
||||
|
||||
@@ -218,6 +213,12 @@ private inline fun <T> collectInfosByVirtualFile(
|
||||
onOccurrence(moduleRelatedModuleInfo)
|
||||
}
|
||||
|
||||
if (moduleRelatedModuleInfo == null && isScript) {
|
||||
getScriptDefinition(virtualFile, project)?.let {
|
||||
onOccurrence(ScriptModuleInfo(project, virtualFile, it))
|
||||
}
|
||||
}
|
||||
|
||||
projectFileIndex.getOrderEntriesForFile(virtualFile).forEach {
|
||||
it.toIdeaModuleInfo(project, virtualFile, treatAsLibrarySource)?.let(onOccurrence)
|
||||
}
|
||||
|
||||
+2
-2
@@ -391,13 +391,13 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
private fun getFacadeToAnalyzeFiles(files: Collection<KtFile>): ResolutionFacade {
|
||||
val file = files.first()
|
||||
val moduleInfo = file.getModuleInfo()
|
||||
val scripts = files.filterScripts()
|
||||
val specialFiles = files.filterNotInProjectSource(moduleInfo)
|
||||
val scripts = specialFiles.filterScripts()
|
||||
if (scripts.isNotEmpty()) {
|
||||
val projectFacade = getFacadeForScripts(scripts)
|
||||
return ModuleResolutionFacadeImpl(projectFacade, moduleInfo)
|
||||
}
|
||||
|
||||
val specialFiles = files.filterNotInProjectSource(moduleInfo)
|
||||
if (specialFiles.isNotEmpty()) {
|
||||
val projectFacade = getFacadeForSpecialFiles(specialFiles)
|
||||
return ModuleResolutionFacadeImpl(projectFacade, moduleInfo)
|
||||
|
||||
+7
-2
@@ -9,6 +9,7 @@ import com.intellij.util.indexing.*
|
||||
import com.intellij.util.io.DataExternalizer
|
||||
import com.intellij.util.io.EnumeratorStringDescriptor
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import java.io.DataInput
|
||||
@@ -28,7 +29,7 @@ object KotlinPackageSourcesMemberNamesIndex : FileBasedIndexExtension<String, Co
|
||||
override fun getValueExternalizer() = StringSetExternalizer
|
||||
|
||||
override fun getInputFilter(): FileBasedIndex.InputFilter =
|
||||
FileBasedIndex.InputFilter { file -> file.extension == KotlinFileType.EXTENSION }
|
||||
FileBasedIndex.InputFilter { file -> file.extension == KotlinFileType.EXTENSION || file.extension == KotlinParserDefinition.STD_SCRIPT_SUFFIX }
|
||||
|
||||
override fun getVersion(): Int = 2
|
||||
|
||||
@@ -40,7 +41,11 @@ object KotlinPackageSourcesMemberNamesIndex : FileBasedIndexExtension<String, Co
|
||||
val ktFile = inputData.psiFile as? KtFile ?: return@DataIndexer emptyMap()
|
||||
val packageName = ktFile.packageDirective?.fqName?.asString() ?: ""
|
||||
|
||||
mapOf(packageName to ktFile.declarations.mapNotNullTo(hashSetOf(), KtDeclaration::getName))
|
||||
if (!ktFile.isScript()) {
|
||||
mapOf(packageName to ktFile.declarations.mapNotNullTo(hashSetOf(), KtDeclaration::getName))
|
||||
} else {
|
||||
mapOf(packageName to listOfNotNull(ktFile.script?.name).toHashSet())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user