Load @NonNull(when=UNKNOWN) annotated type as a flexible one
This commit is contained in:
@@ -7,7 +7,7 @@ public open class A {
|
|||||||
@edu.umd.cs.findbugs.annotations.Nullable public final var field: kotlin.String?
|
@edu.umd.cs.findbugs.annotations.Nullable public final var field: kotlin.String?
|
||||||
@edu.umd.cs.findbugs.annotations.NonNull public open fun bar(): kotlin.String
|
@edu.umd.cs.findbugs.annotations.NonNull public open fun bar(): 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
|
||||||
@edu.umd.cs.findbugs.annotations.PossiblyNull public open fun foo(/*0*/ @edu.umd.cs.findbugs.annotations.NonNull x: kotlin.String, /*1*/ @edu.umd.cs.findbugs.annotations.UnknownNullness y: kotlin.CharSequence?): kotlin.String?
|
@edu.umd.cs.findbugs.annotations.PossiblyNull public open fun foo(/*0*/ @edu.umd.cs.findbugs.annotations.NonNull x: kotlin.String, /*1*/ @edu.umd.cs.findbugs.annotations.UnknownNullness 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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,5 +30,5 @@ fun main(a: A) {
|
|||||||
a.bar()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.length
|
a.bar()<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.length
|
||||||
|
|
||||||
a.field?.length
|
a.field?.length
|
||||||
a.field<!UNSAFE_CALL!>.<!>length
|
a.field.length
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ public fun main(/*0*/ a: A): kotlin.Unit
|
|||||||
|
|
||||||
public open class A {
|
public open class A {
|
||||||
public constructor A()
|
public constructor A()
|
||||||
@javax.annotation.Nonnull(when = When.UNKNOWN) public final var field: kotlin.String?
|
@javax.annotation.Nonnull(when = When.UNKNOWN) public final var field: kotlin.String!
|
||||||
@javax.annotation.Nonnull public open fun bar(): kotlin.String
|
@javax.annotation.Nonnull public open fun bar(): 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
|
||||||
@javax.annotation.Nonnull(when = When.MAYBE) public open fun foo(/*0*/ @javax.annotation.Nonnull(when = When.ALWAYS) x: kotlin.String, /*1*/ @javax.annotation.Nonnull(when = When.NEVER) y: kotlin.CharSequence?): kotlin.String?
|
@javax.annotation.Nonnull(when = When.MAYBE) public open fun foo(/*0*/ @javax.annotation.Nonnull(when = When.ALWAYS) x: kotlin.String, /*1*/ @javax.annotation.Nonnull(when = When.NEVER) 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
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-5
@@ -59,11 +59,18 @@ class SignatureEnhancement(private val annotationTypeQualifierResolver: Annotati
|
|||||||
?.takeIf { it.annotationClass?.fqNameSafe == JAVAX_NONNULL_ANNOTATION }
|
?.takeIf { it.annotationClass?.fqNameSafe == JAVAX_NONNULL_ANNOTATION }
|
||||||
?: return null
|
?: return null
|
||||||
|
|
||||||
return typeQualifier.allValueArguments.values.singleOrNull()?.value?.let {
|
val enumEntryDescriptor =
|
||||||
enumEntryDescriptor ->
|
typeQualifier.allValueArguments.values.singleOrNull()?.value
|
||||||
if (enumEntryDescriptor !is ClassDescriptor) return@let null
|
// if no argument is specified, use default value: NOT_NULL
|
||||||
if (enumEntryDescriptor.name.asString() == "ALWAYS") NullabilityQualifier.NOT_NULL else NullabilityQualifier.NULLABLE
|
?: return NullabilityQualifier.NOT_NULL
|
||||||
} ?: NullabilityQualifier.NOT_NULL
|
|
||||||
|
if (enumEntryDescriptor !is ClassDescriptor) return null
|
||||||
|
|
||||||
|
return when (enumEntryDescriptor.name.asString()) {
|
||||||
|
"ALWAYS" -> NullabilityQualifier.NOT_NULL
|
||||||
|
"MAYBE" -> NullabilityQualifier.NULLABLE
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user