From 25f65aff3a3a99308c20d9a53c97f470f7dd32b1 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Wed, 21 Dec 2022 20:04:30 +0100 Subject: [PATCH] Replace getEntries with hardcoded PsiMethod in LC decompiled declaration This adds NotNull annotation. ^KTIJ-23530 Fixed --- .../KtLightClassForDecompiledDeclaration.kt | 6 ++++++ .../kotlin/asJava/SyntheticElementUtils.kt | 11 ++++++++++- .../EnumClassWithEnumEntries.lib.java | 16 ---------------- 3 files changed, 16 insertions(+), 17 deletions(-) delete mode 100644 compiler/testData/asJava/lightClasses/EnumClassWithEnumEntries.lib.java 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 2e47ca7948c..57fe5173fce 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 @@ -20,7 +20,9 @@ import org.jetbrains.kotlin.analysis.decompiler.psi.file.KtClsFile 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.getEnumEntriesPsiMethod import org.jetbrains.kotlin.asJava.classes.lazyPub +import org.jetbrains.kotlin.asJava.isGetEntriesMethod import org.jetbrains.kotlin.asJava.isSyntheticValuesOrValueOfMethod import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.KtClassOrObject @@ -159,8 +161,12 @@ open class KtLightClassForDecompiledDeclaration( private val _methods: MutableList by lazyPub { mutableListOf().also { + val isEnum = isEnum clsDelegate.methods.mapNotNullTo(it) { psiMethod -> if (isSyntheticValuesOrValueOfMethod(psiMethod)) return@mapNotNullTo null + if (isEnum && isGetEntriesMethod(psiMethod)) { + return@mapNotNullTo getEnumEntriesPsiMethod(this) + } KtLightMethodForDecompiledDeclaration( funDelegate = psiMethod, funParent = this, 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 f1baa05ab7c..d70dcc4ef51 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 @@ -24,4 +24,13 @@ fun isSyntheticValuesOrValueOfMethod(method: PsiMethod): Boolean { } return false -} \ No newline at end of file +} + +fun isGetEntriesMethod(method: PsiMethod): Boolean { + return with(method) { + name == "getEntries" && + parameterList.parametersCount == 0 && + hasModifierProperty(PsiModifier.PUBLIC) && + hasModifierProperty(PsiModifier.STATIC) + } +} diff --git a/compiler/testData/asJava/lightClasses/EnumClassWithEnumEntries.lib.java b/compiler/testData/asJava/lightClasses/EnumClassWithEnumEntries.lib.java deleted file mode 100644 index 0f4e23f5721..00000000000 --- a/compiler/testData/asJava/lightClasses/EnumClassWithEnumEntries.lib.java +++ /dev/null @@ -1,16 +0,0 @@ -public enum MyEnumClass /* one.MyEnumClass*/ { - Entry; - - @org.jetbrains.annotations.NotNull() - public static one.MyEnumClass valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) - - @org.jetbrains.annotations.NotNull() - public static one.MyEnumClass[] values();// values() - - private MyEnumClass();// .ctor() - - public final int doo();// doo() - - public static kotlin.enums.EnumEntries getEntries();// getEntries() - -}