[FIR] Add proper nullability for java enums
This commit is contained in:
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.FirTypeParameterBuilder
|
||||
import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.AbstractFirSymbolProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.constructType
|
||||
@@ -194,6 +195,7 @@ class JavaSymbolProvider(
|
||||
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
|
||||
isVar = !javaField.isFinal
|
||||
isStatic = javaField.isStatic
|
||||
isEnumEntry = javaField.isEnumEntry
|
||||
addAnnotationsFrom(this@JavaSymbolProvider.session, javaField, javaTypeParameterStack)
|
||||
}
|
||||
declarations += firJavaField
|
||||
|
||||
@@ -42,6 +42,7 @@ class FirJavaField @FirImplementationDetail constructor(
|
||||
override val isVar: Boolean,
|
||||
override val annotations: MutableList<FirAnnotationCall>,
|
||||
override val typeParameters: MutableList<FirTypeParameter>,
|
||||
val isEnumEntry: Boolean
|
||||
) : FirField() {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@@ -127,6 +128,7 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
|
||||
var modality: Modality? = null
|
||||
lateinit var visibility: Visibility
|
||||
var isStatic: Boolean by Delegates.notNull()
|
||||
var isEnumEntry: Boolean by Delegates.notNull()
|
||||
|
||||
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
|
||||
|
||||
@@ -149,7 +151,8 @@ internal class FirJavaFieldBuilder : FirFieldBuilder() {
|
||||
status,
|
||||
isVar,
|
||||
annotations,
|
||||
typeParameters
|
||||
typeParameters,
|
||||
isEnumEntry
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+14
-3
@@ -33,8 +33,7 @@ import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
|
||||
import org.jetbrains.kotlin.load.java.descriptors.NullDefaultValue
|
||||
import org.jetbrains.kotlin.load.java.descriptors.StringDefaultValue
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.PREDEFINED_FUNCTION_ENHANCEMENT_INFO_BY_SIGNATURE
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.PredefinedFunctionEnhancementInfo
|
||||
import org.jetbrains.kotlin.load.java.typeEnhancement.*
|
||||
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.utils.Jsr305State
|
||||
@@ -89,7 +88,18 @@ class JavaClassEnhancementScope(
|
||||
is FirField -> {
|
||||
if (firElement.returnTypeRef !is FirJavaTypeRef) return original
|
||||
val memberContext = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, jsr305State, firElement.annotations)
|
||||
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), memberContext, null)
|
||||
val isEnumEntry = (firElement as? FirJavaField)?.isEnumEntry ?: false
|
||||
|
||||
val predefinedInfo = if (isEnumEntry) {
|
||||
PredefinedFunctionEnhancementInfo(
|
||||
TypeEnhancementInfo(0 to JavaTypeQualifiers(NullabilityQualifier.NOT_NULL, null, false)),
|
||||
emptyList()
|
||||
)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
val newReturnTypeRef = enhanceReturnType(firElement, emptyList(), memberContext, predefinedInfo)
|
||||
|
||||
val symbol = FirFieldSymbol(original.callableId)
|
||||
buildJavaField {
|
||||
@@ -103,6 +113,7 @@ class JavaClassEnhancementScope(
|
||||
isVar = firElement.isVar
|
||||
isStatic = firElement.isStatic
|
||||
annotations += firElement.annotations
|
||||
this.isEnumEntry = isEnumEntry
|
||||
}
|
||||
return symbol
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user