FIR/LC: filter out scripts for facade creation

^KTIJ-22016 Fixed
This commit is contained in:
Jinseong Jeon
2022-06-15 12:50:20 -07:00
committed by Ilya Kirillov
parent cd80bddfcd
commit b18999be82
15 changed files with 45 additions and 20 deletions
@@ -61,16 +61,19 @@ abstract class LightClassGenerationSupport {
abstract val useUltraLightClasses: Boolean
internal fun canCreateUltraLightClassForFacade(
files: Collection<KtFile>,
): Boolean {
return useUltraLightClasses && files.none { it.isScript() }
}
fun createUltraLightClassForFacade(
manager: PsiManager,
facadeClassFqName: FqName,
lightClassDataCache: CachedValue<LightClassDataHolder.ForFacade>,
files: Collection<KtFile>,
): KtUltraLightClassForFacade? {
if (!useUltraLightClasses) return null
if (files.any { it.isScript() }) return null
if (!canCreateUltraLightClassForFacade(files)) return null
val filesToSupports: List<Pair<KtFile, KtUltraLightSupport>> = files.map {
it to getUltraLightClassSupport(it)
@@ -233,7 +233,7 @@ open class KtLightClassForFacadeImpl constructor(
fun createForFacadeNoCache(fqName: FqName, searchScope: GlobalSearchScope, project: Project): KtLightClassForFacade? {
val sources = KotlinAsJavaSupport.getInstance(project).findFilesForFacade(fqName, searchScope)
.filterNot { it.isCompiled }
.filterNot { it.isCompiled || it.isScript() }
if (sources.isEmpty()) return null
@@ -244,7 +244,7 @@ open class KtLightClassForFacadeImpl constructor(
val manager = PsiManager.getInstance(project)
return LightClassGenerationSupport.getInstance(project).run {
if (useUltraLightClasses) createUltraLightClassForFacade(manager, fqName, stubValue, sources)
if (canCreateUltraLightClassForFacade(sources)) createUltraLightClassForFacade(manager, fqName, stubValue, sources)
?: error("Unable to create UL class for facade: $fqName for ${sources.joinToString { it.virtualFilePath }}")
else KtLightClassForFacadeImpl(manager, fqName, stubValue, sources)
}