[lc] extract common code to KtLightClassForFacadeBase
^KT-53543
This commit is contained in:
+17
-41
@@ -8,14 +8,9 @@ package org.jetbrains.kotlin.asJava.classes
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiModifier
|
||||
import com.intellij.psi.PsiModifierList
|
||||
import com.intellij.psi.impl.light.LightModifierList
|
||||
import org.jetbrains.kotlin.asJava.elements.*
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil.findAnnotationEntryOnFileNoResolve
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_MULTIFILE_CLASS
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_MULTIFILE_CLASS_SHORT
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
@@ -24,17 +19,10 @@ import org.jetbrains.kotlin.psi.psiUtil.isPrivate
|
||||
class KtUltraLightClassForFacade(
|
||||
facadeClassFqName: FqName,
|
||||
files: Collection<KtFile>,
|
||||
private val filesWithSupports: Collection<Pair<KtFile, KtUltraLightSupport>>
|
||||
private val filesWithSupports: Collection<Pair<KtFile, KtUltraLightSupport>>,
|
||||
) : KtLightClassForFacadeBase(facadeClassFqName, files) {
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
if (isMultiFileClass)
|
||||
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
||||
else
|
||||
KtUltraLightSimpleModifierList(owner = this, modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.FINAL))
|
||||
}
|
||||
|
||||
private val isMultiFileClass: Boolean by lazyPub {
|
||||
files.size > 1 || files.any { findAnnotationEntryOnFileNoResolve(it, JVM_MULTIFILE_CLASS_SHORT) != null }
|
||||
private val _modifierListForSimpleFacade: PsiModifierList by lazyPub {
|
||||
KtUltraLightSimpleModifierList(owner = this, modifiers = setOf(PsiModifier.PUBLIC, PsiModifier.FINAL))
|
||||
}
|
||||
|
||||
private val _givenAnnotations: List<KtLightAbstractAnnotation>? by lazyPub {
|
||||
@@ -44,7 +32,7 @@ class KtUltraLightClassForFacade(
|
||||
name = entry.shortName?.identifier,
|
||||
lazyQualifiedName = { entry.analyzeAnnotation()?.fqName?.asString() },
|
||||
kotlinOrigin = entry,
|
||||
parent = _modifierList
|
||||
parent = modifierList
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -53,7 +41,7 @@ class KtUltraLightClassForFacade(
|
||||
override val givenAnnotations: List<KtLightAbstractAnnotation>?
|
||||
get() = if (isMultiFileClass) emptyList() else _givenAnnotations
|
||||
|
||||
override fun getModifierList(): PsiModifierList = _modifierList
|
||||
override fun createModifierListForSimpleFacade(): PsiModifierList = _modifierListForSimpleFacade
|
||||
|
||||
override fun getScope(): PsiElement? = parent
|
||||
|
||||
@@ -103,35 +91,23 @@ class KtUltraLightClassForFacade(
|
||||
}
|
||||
}
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
for ((file, support, creator) in filesWithSupportsWithCreators) {
|
||||
loadMethodsFromFile(file, support, creator, result)
|
||||
}
|
||||
if (!multiFileClass) result else result.filterNot { it.hasModifierProperty(PsiModifier.PRIVATE) }
|
||||
}
|
||||
|
||||
private val multiFileClass: Boolean by lazyPub {
|
||||
filesWithSupports.any {
|
||||
it.second.findAnnotation(it.first, JVM_MULTIFILE_CLASS) != null
|
||||
}
|
||||
}
|
||||
|
||||
private val _ownFields: List<KtLightField> by lazyPub {
|
||||
hashSetOf<String>().let { nameCache ->
|
||||
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
|
||||
val allProperties = file.declarations.filterIsInstance<KtProperty>()
|
||||
val properties = if (multiFileClass) allProperties.filter { it.hasModifier(KtTokens.CONST_KEYWORD) } else allProperties
|
||||
properties.mapNotNull {
|
||||
creator.createPropertyField(it, nameCache, forceStatic = true)
|
||||
}
|
||||
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
|
||||
properties.mapNotNull {
|
||||
creator.createPropertyField(it, nameCache, forceStatic = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getOwnFields() = _ownFields
|
||||
override fun createOwnMethods() = mutableListOf<KtLightMethod>().let { result ->
|
||||
for ((file, support, creator) in filesWithSupportsWithCreators) {
|
||||
loadMethodsFromFile(file, support, creator, result)
|
||||
}
|
||||
|
||||
override fun getOwnMethods() = _ownMethods
|
||||
if (!isMultiFileClass) result else result.filterNot { it.hasModifierProperty(PsiModifier.PRIVATE) }
|
||||
}
|
||||
|
||||
override fun copy(): KtLightClassForFacade = KtUltraLightClassForFacade(facadeClassFqName, files, filesWithSupports)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user