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)
}