LC: commonize facade for multi-file class
This commit is contained in:
committed by
Dmitrii Gridin
parent
bcee270265
commit
0ac3fae9ab
+2
@@ -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
|
||||
}
|
||||
+1
@@ -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()
|
||||
}
|
||||
|
||||
+2
-2
@@ -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()
|
||||
|
||||
+1
-1
@@ -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(
|
||||
|
||||
+3
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user