LC: commonize facade for multi-file class

This commit is contained in:
Jinseong Jeon
2023-03-28 11:21:02 -07:00
committed by Dmitrii Gridin
parent bcee270265
commit 0ac3fae9ab
5 changed files with 9 additions and 6 deletions
@@ -25,4 +25,6 @@ internal class KtLightClassForDecompiledFacade(
override fun getName(): String = super<KtLightClassForFacade>.getName()
override val facadeClassFqName: FqName get() = file.javaFileFacadeFqName
override val originKind: LightClassOriginKind get() = LightClassOriginKind.BINARY
override val multiFileClass: Boolean = false
}
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.psi.KtFile
interface KtLightClassForFacade : KtLightClass {
val facadeClassFqName: FqName
val files: Collection<KtFile>
val multiFileClass: Boolean
override fun getName(): String = facadeClassFqName.shortName().asString()
}
@@ -35,12 +35,12 @@ abstract class KtLightClassForFacadeBase constructor(
) : KtLightClassBase(files.first().manager), KtLightClassForFacade {
private val firstFileInFacade by lazyPub { files.first() }
val isMultiFileClass: Boolean by lazyPub {
override val multiFileClass: Boolean by lazyPub {
files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
}
private val _modifierList: PsiModifierList by lazyPub {
if (isMultiFileClass)
if (multiFileClass)
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
else
createModifierListForSimpleFacade()
@@ -102,7 +102,7 @@ internal class SymbolLightClassForFacade(
}
}
private val multiFileClass: Boolean get() = files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
override val multiFileClass: Boolean get() = files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
context(KtAnalysisSession)
private fun loadFieldsFromFile(
@@ -39,7 +39,7 @@ class KtUltraLightClassForFacade(
}
override val givenAnnotations: List<KtLightAbstractAnnotation>?
get() = if (isMultiFileClass) emptyList() else _givenAnnotations
get() = if (multiFileClass) emptyList() else _givenAnnotations
override fun createModifierListForSimpleFacade(): PsiModifierList = _modifierListForSimpleFacade
@@ -94,7 +94,7 @@ class KtUltraLightClassForFacade(
override fun createOwnFields(): List<KtLightField> = hashSetOf<String>().let { nameCache ->
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
val allProperties = file.declarations.filterIsInstance<KtProperty>()
val properties = if (isMultiFileClass) allProperties.filter { it.hasModifier(KtTokens.CONST_KEYWORD) } else allProperties
val properties = if (multiFileClass) allProperties.filter { it.hasModifier(KtTokens.CONST_KEYWORD) } else allProperties
properties.mapNotNull {
creator.createPropertyField(it, nameCache, forceStatic = true)
}
@@ -106,7 +106,7 @@ class KtUltraLightClassForFacade(
loadMethodsFromFile(file, support, creator, result)
}
if (!isMultiFileClass) result else result.filterNot { it.hasModifierProperty(PsiModifier.PRIVATE) }
if (!multiFileClass) result else result.filterNot { it.hasModifierProperty(PsiModifier.PRIVATE) }
}
override fun copy(): KtLightClassForFacade = KtUltraLightClassForFacade(facadeClassFqName, files, filesWithSupports)