SLC: add nullability annotation to value param of non-synthetic enum members
^KT-57567
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt
index ff90465..e0623fc 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt
@@ -14,6 +14,7 @@
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier
+import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.light.classes.symbol.*
import org.jetbrains.kotlin.light.classes.symbol.annotations.annotateByKtType
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
@@ -59,7 +60,12 @@
if (isDeclaredAsVararg()) return NullabilityType.NotNull
val nullabilityApplicable = !containingMethod.hasModifierProperty(PsiModifier.PRIVATE) &&
- !containingMethod.containingClass.let { it.isAnnotationType || it.isEnum }
+ !containingMethod.containingClass.isAnnotationType &&
+ // `enum` synthetic members (e.g., values or valueOf) are not applicable for nullability.
+ // In other words, `enum` non-synthetic members are applicable for nullability.
+ // Technically, we should retrieve the symbol for the containing method and see if its origin is not synthetic.
+ // But, only `enum#valueOf` has a value parameter we want to filter out, so this is cheap yet feasible.
+ (!containingMethod.containingClass.isEnum || containingMethod.name != StandardNames.ENUM_VALUE_OF.identifier)
return if (nullabilityApplicable) {
parameterSymbolPointer.withSymbol(ktModule) { getTypeNullability(it.returnType) }
diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.fir.java
index 6f0b945..4908a4dc 100644
--- a/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.fir.java
+++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.fir.java
@@ -23,7 +23,7 @@
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.Nullable()
- public static final Event upTo(State);// upTo(State)
+ public static final Event upTo(@org.jetbrains.annotations.NotNull() State);// upTo(State)
@org.jetbrains.annotations.NotNull()
public static Event valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String)
@@ -61,7 +61,7 @@
private State();// .ctor()
- public final boolean isAtLeast(State);// isAtLeast(State)
+ public final boolean isAtLeast(@org.jetbrains.annotations.NotNull() State);// isAtLeast(State)
public final boolean isFinished();// isFinished()