Generate Enum.getEntries method in ultra light classes
^KTIJ-23530 Fixed
This commit is contained in:
committed by
Space Team
parent
59663f4752
commit
e5d5cbc7a3
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
||||
import org.jetbrains.kotlin.codegen.kotlinType
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
@@ -266,8 +267,8 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
|
||||
private fun propertyParameters() = classOrObject.primaryConstructorParameters.filter { it.hasValOrVar() }
|
||||
|
||||
private fun ownMethods(): List<KtLightMethod> {
|
||||
val result = mutableListOf<KtLightMethod>()
|
||||
private fun ownMethods(): List<PsiMethod> {
|
||||
val result = mutableListOf<PsiMethod>()
|
||||
|
||||
for (declaration in this.classOrObject.declarations.filterNot { it.isHiddenByDeprecation(support) }) {
|
||||
if (declaration.hasModifier(PRIVATE_KEYWORD) && isInterface) continue
|
||||
@@ -319,18 +320,23 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
|
||||
val lazyDescriptor = lazy { getDescriptor() }
|
||||
project.applyCompilerPlugins {
|
||||
val methodsList = mutableListOf<KtLightMethod>()
|
||||
it.interceptMethodsBuilding(
|
||||
declaration = kotlinOrigin,
|
||||
descriptor = lazyDescriptor,
|
||||
containingDeclaration = this,
|
||||
methodsList = result
|
||||
methodsList = methodsList
|
||||
)
|
||||
result.addAll(methodsList)
|
||||
}
|
||||
if (isEnum && support.languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries)) {
|
||||
result.add(getEnumEntriesPsiMethod(this))
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
private val _ownMethods: CachedValue<List<KtLightMethod>> = CachedValuesManager.getManager(project).createCachedValue(
|
||||
private val _ownMethods: CachedValue<List<PsiMethod>> = CachedValuesManager.getManager(project).createCachedValue(
|
||||
{
|
||||
CachedValueProvider.Result.create(
|
||||
ownMethods(),
|
||||
@@ -339,7 +345,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
}, false
|
||||
)
|
||||
|
||||
private fun addMethodsFromDataClass(result: MutableList<KtLightMethod>) {
|
||||
private fun addMethodsFromDataClass(result: MutableList<PsiMethod>) {
|
||||
if (!classOrObject.hasModifier(DATA_KEYWORD)) return
|
||||
val ktClass = classOrObject as? KtClass ?: return
|
||||
val descriptor = classOrObject.resolve() as? ClassDescriptor ?: return
|
||||
@@ -381,7 +387,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
}.generate()
|
||||
}
|
||||
|
||||
private fun addDelegatesToInterfaceMethods(result: MutableList<KtLightMethod>) {
|
||||
private fun addDelegatesToInterfaceMethods(result: MutableList<PsiMethod>) {
|
||||
classOrObject.superTypeListEntries.filterIsInstance<KtDelegatedSuperTypeEntry>().forEach {
|
||||
addDelegatesToInterfaceMethods(it, result)
|
||||
}
|
||||
@@ -389,7 +395,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
|
||||
private fun addDelegatesToInterfaceMethods(
|
||||
superTypeEntry: KtDelegatedSuperTypeEntry,
|
||||
result: MutableList<KtLightMethod>
|
||||
result: MutableList<PsiMethod>
|
||||
) {
|
||||
val classDescriptor = classOrObject.resolve() as? ClassDescriptor ?: return
|
||||
val typeReference = superTypeEntry.typeReference ?: return
|
||||
@@ -475,7 +481,7 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
|
||||
|
||||
private fun isJvmStatic(declaration: KtAnnotated): Boolean = declaration.hasAnnotation(JVM_STATIC_ANNOTATION_FQ_NAME)
|
||||
|
||||
override fun getOwnMethods(): List<KtLightMethod> = _ownMethods.value
|
||||
override fun getOwnMethods(): List<PsiMethod> = _ownMethods.value
|
||||
|
||||
private fun KtAnnotated.hasAnnotation(name: FqName) = support.findAnnotation(this, name) != null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user