Fix types enhancement for properties' getters overrides in Java
Prior to the 1.1.4, nullability related annotations were stored
in types that became hard to maintain at some moment and
we got rid of it (see 57b7b91444)
But enhancement for properties overrides stopped working
because there were effectively no annotations in the
resulting descriptor
#KT-19409 Fixed
#KT-19409 Fixed
This commit is contained in:
+12
-3
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.annotations.composeAnnotations
|
||||
import org.jetbrains.kotlin.load.java.*
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor
|
||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
|
||||
import org.jetbrains.kotlin.load.java.lazy.computeNewDefaultTypeQualifiers
|
||||
import org.jetbrains.kotlin.load.java.lazy.descriptors.isJavaField
|
||||
@@ -91,11 +92,19 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
if (kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE && original.overriddenDescriptors.size == 1) return this
|
||||
|
||||
val outerScopeQualifiers = c.computeNewDefaultTypeQualifiers(annotations)
|
||||
|
||||
// When loading method as an override for a property, all annotations are stick to its getter
|
||||
val annotationOwnerForMember =
|
||||
if (this is JavaPropertyDescriptor && getter?.isDefault == false)
|
||||
getter!!
|
||||
else
|
||||
this
|
||||
|
||||
val receiverTypeEnhancement =
|
||||
if (extensionReceiverParameter != null)
|
||||
parts(
|
||||
typeContainer =
|
||||
this.safeAs<FunctionDescriptor>()
|
||||
annotationOwnerForMember.safeAs<FunctionDescriptor>()
|
||||
?.getUserData(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER),
|
||||
isCovariant = false,
|
||||
defaultTopLevelQualifiers =
|
||||
@@ -117,7 +126,7 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
}
|
||||
}
|
||||
|
||||
val valueParameterEnhancements = valueParameters.map {
|
||||
val valueParameterEnhancements = annotationOwnerForMember.valueParameters.map {
|
||||
p ->
|
||||
parts(
|
||||
typeContainer = p, isCovariant = false,
|
||||
@@ -130,7 +139,7 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
|
||||
val returnTypeEnhancement =
|
||||
parts(
|
||||
typeContainer = this, isCovariant = true,
|
||||
typeContainer = annotationOwnerForMember, isCovariant = true,
|
||||
defaultTopLevelQualifiers =
|
||||
outerScopeQualifiers?.get(
|
||||
if (this.safeAs<PropertyDescriptor>()?.isJavaField == true)
|
||||
|
||||
Reference in New Issue
Block a user