[lc] extract common code to KtLightClassForFacadeBase
^KT-53543
This commit is contained in:
+37
-7
@@ -12,12 +12,15 @@ import com.intellij.psi.impl.light.LightEmptyImplementsList
|
||||
import com.intellij.psi.impl.light.LightModifierList
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.JvmNames
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_NAME_SHORT
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -28,15 +31,25 @@ import javax.swing.Icon
|
||||
|
||||
abstract class KtLightClassForFacadeBase constructor(
|
||||
override val facadeClassFqName: FqName,
|
||||
override val files: Collection<KtFile>
|
||||
final override val files: Collection<KtFile>
|
||||
) : KtLightClassBase(files.first().manager), KtLightClassForFacade {
|
||||
private val firstFileInFacade by lazyPub { files.iterator().next() }
|
||||
private val firstFileInFacade by lazyPub { files.first() }
|
||||
|
||||
private val modifierList: PsiModifierList =
|
||||
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
||||
val isMultiFileClass: Boolean by lazyPub {
|
||||
files.size > 1 || JvmFileClassUtil.findAnnotationEntryOnFileNoResolve(firstFileInFacade, JvmNames.JVM_MULTIFILE_CLASS_SHORT) != null
|
||||
}
|
||||
|
||||
private val implementsList: LightEmptyImplementsList =
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
if (isMultiFileClass)
|
||||
LightModifierList(manager, KotlinLanguage.INSTANCE, PsiModifier.PUBLIC, PsiModifier.FINAL)
|
||||
else
|
||||
createModifierListForSimpleFacade()
|
||||
}
|
||||
|
||||
|
||||
private val _implementsList: LightEmptyImplementsList by lazyPub {
|
||||
LightEmptyImplementsList(manager)
|
||||
}
|
||||
|
||||
private val packageClsFile by lazyPub {
|
||||
FakeFileForLightClass(
|
||||
@@ -46,6 +59,19 @@ abstract class KtLightClassForFacadeBase constructor(
|
||||
)
|
||||
}
|
||||
|
||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||
createOwnMethods()
|
||||
}
|
||||
|
||||
private val _ownFields: List<KtLightField> by lazyPub {
|
||||
createOwnFields()
|
||||
}
|
||||
|
||||
abstract fun createOwnMethods(): List<KtLightMethod>
|
||||
abstract fun createOwnFields(): List<KtLightField>
|
||||
|
||||
abstract fun createModifierListForSimpleFacade(): PsiModifierList
|
||||
|
||||
override fun getParent(): PsiElement = containingFile
|
||||
|
||||
override val kotlinOrigin: KtClassOrObject? get() = null
|
||||
@@ -53,7 +79,7 @@ abstract class KtLightClassForFacadeBase constructor(
|
||||
val fqName: FqName
|
||||
get() = facadeClassFqName
|
||||
|
||||
override fun getModifierList() = modifierList
|
||||
override fun getModifierList() = _modifierList
|
||||
|
||||
override fun hasModifierProperty(@NonNls name: String) = modifierList.hasModifierProperty(name)
|
||||
|
||||
@@ -79,7 +105,7 @@ abstract class KtLightClassForFacadeBase constructor(
|
||||
|
||||
override fun getDocComment(): Nothing? = null
|
||||
|
||||
override fun getImplementsList() = implementsList
|
||||
override fun getImplementsList() = _implementsList
|
||||
|
||||
override fun getImplementsListTypes(): Array<out PsiClassType> = PsiClassType.EMPTY_ARRAY
|
||||
|
||||
@@ -204,5 +230,9 @@ abstract class KtLightClassForFacadeBase constructor(
|
||||
|
||||
override fun isWritable() = files.all { it.isWritable }
|
||||
|
||||
override fun getOwnFields() = _ownFields
|
||||
|
||||
override fun getOwnMethods() = _ownMethods
|
||||
|
||||
override fun getVisibleSignatures(): MutableCollection<HierarchicalMethodSignature> = PsiSuperMethodImplUtil.getVisibleSignatures(this)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user