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 fun getName(): String = super<KtLightClassForFacade>.getName()
|
||||||
override val facadeClassFqName: FqName get() = file.javaFileFacadeFqName
|
override val facadeClassFqName: FqName get() = file.javaFileFacadeFqName
|
||||||
override val originKind: LightClassOriginKind get() = LightClassOriginKind.BINARY
|
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 {
|
interface KtLightClassForFacade : KtLightClass {
|
||||||
val facadeClassFqName: FqName
|
val facadeClassFqName: FqName
|
||||||
val files: Collection<KtFile>
|
val files: Collection<KtFile>
|
||||||
|
val multiFileClass: Boolean
|
||||||
|
|
||||||
override fun getName(): String = facadeClassFqName.shortName().asString()
|
override fun getName(): String = facadeClassFqName.shortName().asString()
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -35,12 +35,12 @@ abstract class KtLightClassForFacadeBase constructor(
|
|||||||
) : KtLightClassBase(files.first().manager), KtLightClassForFacade {
|
) : KtLightClassBase(files.first().manager), KtLightClassForFacade {
|
||||||
private val firstFileInFacade by lazyPub { files.first() }
|
private val firstFileInFacade by lazyPub { files.first() }
|
||||||
|
|
||||||
val isMultiFileClass: Boolean by lazyPub {
|
override val multiFileClass: Boolean by lazyPub {
|
||||||
files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
files.size > 1 || firstFileInFacade.isJvmMultifileClassFile
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _modifierList: PsiModifierList by lazyPub {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
if (isMultiFileClass)
|
if (multiFileClass)
|
||||||
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
||||||
else
|
else
|
||||||
createModifierListForSimpleFacade()
|
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)
|
context(KtAnalysisSession)
|
||||||
private fun loadFieldsFromFile(
|
private fun loadFieldsFromFile(
|
||||||
|
|||||||
+3
-3
@@ -39,7 +39,7 @@ class KtUltraLightClassForFacade(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override val givenAnnotations: List<KtLightAbstractAnnotation>?
|
override val givenAnnotations: List<KtLightAbstractAnnotation>?
|
||||||
get() = if (isMultiFileClass) emptyList() else _givenAnnotations
|
get() = if (multiFileClass) emptyList() else _givenAnnotations
|
||||||
|
|
||||||
override fun createModifierListForSimpleFacade(): PsiModifierList = _modifierListForSimpleFacade
|
override fun createModifierListForSimpleFacade(): PsiModifierList = _modifierListForSimpleFacade
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ class KtUltraLightClassForFacade(
|
|||||||
override fun createOwnFields(): List<KtLightField> = hashSetOf<String>().let { nameCache ->
|
override fun createOwnFields(): List<KtLightField> = hashSetOf<String>().let { nameCache ->
|
||||||
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
|
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
|
||||||
val allProperties = file.declarations.filterIsInstance<KtProperty>()
|
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 {
|
properties.mapNotNull {
|
||||||
creator.createPropertyField(it, nameCache, forceStatic = true)
|
creator.createPropertyField(it, nameCache, forceStatic = true)
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ class KtUltraLightClassForFacade(
|
|||||||
loadMethodsFromFile(file, support, creator, result)
|
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)
|
override fun copy(): KtLightClassForFacade = KtUltraLightClassForFacade(facadeClassFqName, files, filesWithSupports)
|
||||||
|
|||||||
Reference in New Issue
Block a user