Filter synthetic enum methods in light classes for compiled declarations Instead of reverted '7c86911f44b914fb2a224afbd08fea3ec025bb16' and '43468c6d55599b7b8f2cf2e858a57b89590c99e5', this commit filters synthetic methods only coming from the 'ClsClassImpl' directly.
diff --git a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt index 9abfd0f..2ca4d05 100644 --- a/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt +++ b/analysis/decompiled/light-classes-for-decompiled/src/org/jetbrains/kotlin/analysis/decompiled/light/classes/KtLightClassForDecompiledDeclaration.kt
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService import org.jetbrains.kotlin.asJava.classes.KotlinClassInnerStuffCache import org.jetbrains.kotlin.asJava.classes.LightClassesLazyCreator +import org.jetbrains.kotlin.asJava.classes.isEnumSyntheticMethod import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.KtClassOrObject @@ -155,7 +156,8 @@ private val _methods: MutableList<PsiMethod> by lazyPub { mutableListOf<PsiMethod>().also { - clsDelegate.methods.mapTo(it) { psiMethod -> + clsDelegate.methods.mapNotNullTo(it) { psiMethod -> + if (isEnumSyntheticMethod(psiMethod)) return@mapNotNullTo null KtLightMethodForDecompiledDeclaration( funDelegate = psiMethod, funParent = this,
diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/lightClassPlatformUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/lightClassPlatformUtils.kt index 81cac30..b84528c 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/lightClassPlatformUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/lightClassPlatformUtils.kt
@@ -6,8 +6,28 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiModifier +import com.intellij.psi.SyntheticElement import com.intellij.psi.augment.PsiAugmentProvider +fun isEnumSyntheticMethod(method: PsiMethod): Boolean { + if (method is SyntheticElement) { + val name = method.name + if (name == "values" || name == "valueOf") { + if (method.hasModifierProperty(PsiModifier.PUBLIC) && method.hasModifierProperty(PsiModifier.STATIC)) { + val parameterCount = method.parameterList.parametersCount + when (name) { + "values" -> if (parameterCount == 0) return true + "valueOf" -> if (parameterCount == 1) return true + } + } + } + } + + return false +} + internal fun <Psi : PsiElement> collectAugments(element: PsiElement, type: Class<out Psi>): List<Psi> { return PsiAugmentProvider.collectAugments(element, type, null) }