Don't enhance previously erased value parameters for jspecify strict mode
^KT-48261 Fixed
This commit is contained in:
+9
-2
@@ -161,7 +161,9 @@ abstract class AbstractSignatureParts<TAnnotation : Any> {
|
||||
}
|
||||
|
||||
fun KotlinTypeMarker.computeIndexedQualifiers(
|
||||
overrides: Iterable<KotlinTypeMarker>, predefined: TypeEnhancementInfo?
|
||||
overrides: Iterable<KotlinTypeMarker>,
|
||||
predefined: TypeEnhancementInfo?,
|
||||
ignoreDeclarationNullabilityAnnotations: Boolean = false
|
||||
): IndexedJavaTypeQualifiers {
|
||||
val indexedThisType = toIndexed()
|
||||
val indexedFromSupertypes = overrides.map { it.toIndexed() }
|
||||
@@ -178,7 +180,12 @@ abstract class AbstractSignatureParts<TAnnotation : Any> {
|
||||
val computedResult = Array(treeSize) { index ->
|
||||
val qualifiers = indexedThisType[index].extractQualifiersFromAnnotations()
|
||||
val superQualifiers = indexedFromSupertypes.mapNotNull { it.getOrNull(index)?.type?.extractQualifiers() }
|
||||
qualifiers.computeQualifiersForOverride(superQualifiers, index == 0 && isCovariant, index == 0 && containerIsVarargParameter)
|
||||
qualifiers.computeQualifiersForOverride(
|
||||
superQualifiers,
|
||||
index == 0 && isCovariant,
|
||||
index == 0 && containerIsVarargParameter,
|
||||
ignoreDeclarationNullabilityAnnotations
|
||||
)
|
||||
}
|
||||
return { index -> predefined?.map?.get(index) ?: computedResult.getOrElse(index) { JavaTypeQualifiers.NONE } }
|
||||
}
|
||||
|
||||
+5
-2
@@ -35,7 +35,8 @@ private val JavaTypeQualifiers.nullabilityForErrors: NullabilityQualifier?
|
||||
fun JavaTypeQualifiers.computeQualifiersForOverride(
|
||||
superQualifiers: Collection<JavaTypeQualifiers>,
|
||||
isCovariant: Boolean,
|
||||
isForVarargParameter: Boolean
|
||||
isForVarargParameter: Boolean,
|
||||
ignoreDeclarationNullabilityAnnotations: Boolean
|
||||
): JavaTypeQualifiers {
|
||||
val newNullabilityForErrors = superQualifiers.mapNotNull { it.nullabilityForErrors }.toSet()
|
||||
.select(nullabilityForErrors, isCovariant)
|
||||
@@ -45,7 +46,9 @@ fun JavaTypeQualifiers.computeQualifiersForOverride(
|
||||
.select(MutabilityQualifier.MUTABLE, MutabilityQualifier.READ_ONLY, mutability, isCovariant)
|
||||
// Vararg value parameters effectively have non-nullable type in Kotlin
|
||||
// and having nullable types in Java may lead to impossibility of overriding them in Kotlin
|
||||
val realNullability = newNullability?.takeUnless { isForVarargParameter && it == NullabilityQualifier.NULLABLE }
|
||||
val realNullability = newNullability?.takeUnless {
|
||||
ignoreDeclarationNullabilityAnnotations || (isForVarargParameter && it == NullabilityQualifier.NULLABLE)
|
||||
}
|
||||
return JavaTypeQualifiers(
|
||||
realNullability, newMutability,
|
||||
realNullability == NullabilityQualifier.NOT_NULL && (definitelyNotNull || superQualifiers.any { it.definitelyNotNull }),
|
||||
|
||||
Reference in New Issue
Block a user