Obtain default type qualifiers from value parameters too
#KT-20016 In Progress
This commit is contained in:
compiler/testData/foreignAnnotations/tests/jsr305/typeQualifierDefault/forceFlexibleOverOverrides.kt
Vendored
+1
-2
@@ -89,8 +89,7 @@ fun main(a: A, b: B) {
|
||||
b.foobar(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||
|
||||
a.foo(null)
|
||||
// TODO: defaults on parameters do not work properly
|
||||
a.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||
a.bar(null)
|
||||
a.baz(null)
|
||||
a.foobar(null)
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public fun main(/*0*/ a: A, /*1*/ b: B): kotlin.Unit
|
||||
|
||||
@spr.NonNullApi public open class A : B {
|
||||
public constructor A()
|
||||
public open override /*1*/ fun bar(/*0*/ @spr.ForceFlexibility x: kotlin.String): kotlin.Unit
|
||||
public open override /*1*/ fun bar(/*0*/ @spr.ForceFlexibility x: kotlin.String!): kotlin.Unit
|
||||
public open override /*1*/ fun baz(/*0*/ @spr.UnknownNullability x: kotlin.String!): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@spr.ForceFlexibility public open override /*1*/ fun foo(/*0*/ x: kotlin.String!): kotlin.Unit
|
||||
|
||||
compiler/testData/foreignAnnotations/tests/jsr305/typeQualifierDefault/overridingDefaultQualifier.kt
Vendored
+2
-2
@@ -66,7 +66,7 @@ public class A {
|
||||
}
|
||||
|
||||
@NullableApi
|
||||
public String foobar(String x, @Nonnull CharSequence y) {
|
||||
public String foobar(String x, @NonNullApi CharSequence y) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ public class A {
|
||||
}
|
||||
|
||||
@NonNullApi
|
||||
public String foobar(String x, @Nullable CharSequence y) {
|
||||
public String foobar(String x, @NullableApi CharSequence y) {
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ public fun main(/*0*/ a: A, /*1*/ b: A.B, /*2*/ c: A.C): kotlin.Unit
|
||||
@javax.annotation.Nullable public open fun baz(): kotlin.collections.(Mutable)List<kotlin.String!>?
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open fun foo(/*0*/ x: kotlin.String, /*1*/ @javax.annotation.CheckForNull y: kotlin.CharSequence?): kotlin.String
|
||||
@NullableApi public open fun foobar(/*0*/ x: kotlin.String?, /*1*/ @javax.annotation.Nonnull y: kotlin.CharSequence): kotlin.String?
|
||||
@NullableApi public open fun foobar(/*0*/ x: kotlin.String?, /*1*/ @NonNullApi y: kotlin.CharSequence): kotlin.String?
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
@@ -20,7 +20,7 @@ public fun main(/*0*/ a: A, /*1*/ b: A.B, /*2*/ c: A.C): kotlin.Unit
|
||||
@javax.annotation.Nullable public open fun baz(): kotlin.collections.(Mutable)List<kotlin.String!>?
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open fun foo(/*0*/ x: kotlin.String?, /*1*/ @javax.annotation.Nonnull y: kotlin.CharSequence): kotlin.String?
|
||||
@NonNullApi public open fun foobar(/*0*/ x: kotlin.String, /*1*/ @javax.annotation.Nullable y: kotlin.CharSequence?): kotlin.String
|
||||
@NonNullApi public open fun foobar(/*0*/ x: kotlin.String, /*1*/ @NullableApi y: kotlin.CharSequence?): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
+19
-16
@@ -16,10 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.load.java.typeEnhancement
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
@@ -120,13 +117,11 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
|
||||
val receiverTypeEnhancement =
|
||||
if (extensionReceiverParameter != null)
|
||||
parts(
|
||||
typeContainer =
|
||||
partsForValueParameter(
|
||||
parameterDescriptor =
|
||||
annotationOwnerForMember.safeAs<FunctionDescriptor>()
|
||||
?.getUserData(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER),
|
||||
isCovariant = false,
|
||||
containerContext = memberContext,
|
||||
containerApplicabilityType = AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER
|
||||
methodContext = memberContext
|
||||
) { it.extensionReceiverParameter!!.type }.enhance()
|
||||
else null
|
||||
|
||||
@@ -145,12 +140,8 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
|
||||
val valueParameterEnhancements = annotationOwnerForMember.valueParameters.map {
|
||||
p ->
|
||||
parts(
|
||||
typeContainer = p, isCovariant = false,
|
||||
containerContext = memberContext,
|
||||
containerApplicabilityType = AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER
|
||||
) { it.valueParameters[p.index].type }
|
||||
.enhance(predefinedEnhancementInfo?.parametersInfo?.getOrNull(p.index))
|
||||
partsForValueParameter(p, memberContext) { it.valueParameters[p.index].type }
|
||||
.enhance(predefinedEnhancementInfo?.parametersInfo?.getOrNull(p.index))
|
||||
}
|
||||
|
||||
val returnTypeEnhancement =
|
||||
@@ -369,7 +360,19 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
||||
|
||||
private data class PartEnhancementResult(val type: KotlinType, val wereChanges: Boolean)
|
||||
|
||||
private fun <D : CallableMemberDescriptor> D.parts(
|
||||
private fun CallableMemberDescriptor.partsForValueParameter(
|
||||
// TODO: investigate if it's really can be a null (check properties' with extension overrides in Java)
|
||||
parameterDescriptor: ValueParameterDescriptor?,
|
||||
methodContext: LazyJavaResolverContext,
|
||||
collector: (CallableMemberDescriptor) -> KotlinType
|
||||
) = parts(
|
||||
parameterDescriptor, false,
|
||||
parameterDescriptor?.let { methodContext.copyWithNewDefaultTypeQualifiers(it.annotations) } ?: methodContext,
|
||||
AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER,
|
||||
collector
|
||||
)
|
||||
|
||||
private fun CallableMemberDescriptor.parts(
|
||||
typeContainer: Annotated?,
|
||||
isCovariant: Boolean,
|
||||
containerContext: LazyJavaResolverContext,
|
||||
|
||||
Reference in New Issue
Block a user