From 8f1a2f46121f07778d13bf030694b6a73ddcec6a Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 4 Mar 2022 18:16:54 +0900 Subject: [PATCH] Improve heuristic for filtering synthetic enum methods out It's not possible to check the exact method signature, as it is unavailable in dumb stubs for Kotlin's light classes. Yet, it's still possible to check more things, such as parameter count and access flags. --- .../kotlin/asJava/SyntheticElementUtils.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt index 2450ac0f5cb..f1baa05ab7c 100644 --- a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/asJava/SyntheticElementUtils.kt @@ -6,10 +6,22 @@ package org.jetbrains.kotlin.asJava import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiModifier import com.intellij.psi.SyntheticElement -import org.jetbrains.kotlin.builtins.StandardNames fun isSyntheticValuesOrValueOfMethod(method: PsiMethod): Boolean { - if (method !is SyntheticElement) return false - return StandardNames.ENUM_VALUE_OF.asString() == method.name || StandardNames.ENUM_VALUES.asString() == method.name -} + 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 +} \ No newline at end of file