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<!>)
|
b.foobar(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
||||||
|
|
||||||
a.foo(null)
|
a.foo(null)
|
||||||
// TODO: defaults on parameters do not work properly
|
a.bar(null)
|
||||||
a.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>)
|
|
||||||
a.baz(null)
|
a.baz(null)
|
||||||
a.foobar(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 {
|
@spr.NonNullApi public open class A : B {
|
||||||
public constructor A()
|
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*/ fun baz(/*0*/ @spr.UnknownNullability x: kotlin.String!): kotlin.Unit
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
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
|
@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
|
@NullableApi
|
||||||
public String foobar(String x, @Nonnull CharSequence y) {
|
public String foobar(String x, @NonNullApi CharSequence y) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ public class A {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNullApi
|
@NonNullApi
|
||||||
public String foobar(String x, @Nullable CharSequence y) {
|
public String foobar(String x, @NullableApi CharSequence y) {
|
||||||
return "";
|
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!>?
|
@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 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
|
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 hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
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!>?
|
@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 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?
|
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 hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-16
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.java.typeEnhancement
|
package org.jetbrains.kotlin.load.java.typeEnhancement
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
import org.jetbrains.kotlin.descriptors.annotations.Annotated
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
@@ -120,13 +117,11 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
|||||||
|
|
||||||
val receiverTypeEnhancement =
|
val receiverTypeEnhancement =
|
||||||
if (extensionReceiverParameter != null)
|
if (extensionReceiverParameter != null)
|
||||||
parts(
|
partsForValueParameter(
|
||||||
typeContainer =
|
parameterDescriptor =
|
||||||
annotationOwnerForMember.safeAs<FunctionDescriptor>()
|
annotationOwnerForMember.safeAs<FunctionDescriptor>()
|
||||||
?.getUserData(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER),
|
?.getUserData(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER),
|
||||||
isCovariant = false,
|
methodContext = memberContext
|
||||||
containerContext = memberContext,
|
|
||||||
containerApplicabilityType = AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER
|
|
||||||
) { it.extensionReceiverParameter!!.type }.enhance()
|
) { it.extensionReceiverParameter!!.type }.enhance()
|
||||||
else null
|
else null
|
||||||
|
|
||||||
@@ -145,12 +140,8 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
|||||||
|
|
||||||
val valueParameterEnhancements = annotationOwnerForMember.valueParameters.map {
|
val valueParameterEnhancements = annotationOwnerForMember.valueParameters.map {
|
||||||
p ->
|
p ->
|
||||||
parts(
|
partsForValueParameter(p, memberContext) { it.valueParameters[p.index].type }
|
||||||
typeContainer = p, isCovariant = false,
|
.enhance(predefinedEnhancementInfo?.parametersInfo?.getOrNull(p.index))
|
||||||
containerContext = memberContext,
|
|
||||||
containerApplicabilityType = AnnotationTypeQualifierResolver.QualifierApplicabilityType.VALUE_PARAMETER
|
|
||||||
) { it.valueParameters[p.index].type }
|
|
||||||
.enhance(predefinedEnhancementInfo?.parametersInfo?.getOrNull(p.index))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val returnTypeEnhancement =
|
val returnTypeEnhancement =
|
||||||
@@ -369,7 +360,19 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
|||||||
|
|
||||||
private data class PartEnhancementResult(val type: KotlinType, val wereChanges: Boolean)
|
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?,
|
typeContainer: Annotated?,
|
||||||
isCovariant: Boolean,
|
isCovariant: Boolean,
|
||||||
containerContext: LazyJavaResolverContext,
|
containerContext: LazyJavaResolverContext,
|
||||||
|
|||||||
Reference in New Issue
Block a user