[FIR] Implement warnings for java nullability type mismatch on override
#KT-56989
This commit is contained in:
committed by
Space Team
parent
a6fdeeb7df
commit
2df1e9dde6
+23
-9
@@ -17,6 +17,8 @@ public class BaseClass {
|
||||
public @Nullable Foo mixed(Foo x) { return null; }
|
||||
|
||||
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||
|
||||
public static Foo foo() { return null; }
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +26,11 @@ public class BaseClass {
|
||||
|
||||
private val FOO = object : Foo {}
|
||||
|
||||
class Correct : BaseClass() {
|
||||
open class IntermediateClass : BaseClass() {
|
||||
open fun intermediateNotNull() = BaseClass.foo()
|
||||
}
|
||||
|
||||
class Correct : IntermediateClass() {
|
||||
override fun everythingNotNullable(x: Foo): Foo {
|
||||
return FOO
|
||||
}
|
||||
@@ -44,24 +50,32 @@ class Correct : BaseClass() {
|
||||
override fun explicitlyNullnessUnspecified(x: Foo): Foo {
|
||||
return FOO
|
||||
}
|
||||
|
||||
override fun intermediateNotNull(): Foo {
|
||||
return FOO
|
||||
}
|
||||
}
|
||||
|
||||
class WrongReturnTypes : BaseClass() {
|
||||
override fun everythingNotNullable(x: Foo): Foo? {
|
||||
class WrongReturnTypes : IntermediateClass() {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun everythingNotNullable(x: Foo): Foo? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun explicitlyNullnessUnspecified(x: Foo): Foo? {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun explicitlyNullnessUnspecified(x: Foo): Foo? {
|
||||
return null
|
||||
}
|
||||
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun intermediateNotNull(): Foo? {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
class WrongParameter : BaseClass() {
|
||||
override fun everythingNotNullable(x: Foo?): Foo {
|
||||
class WrongParameter : IntermediateClass() {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun everythingNotNullable(x: Foo?): Foo {
|
||||
return FOO
|
||||
}
|
||||
|
||||
override fun everythingNullable(x: Foo): Foo? {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun everythingNullable(x: Foo): Foo? {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -69,11 +83,11 @@ class WrongParameter : BaseClass() {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun mixed(x: Foo?): Foo? {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun mixed(x: Foo?): Foo? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun explicitlyNullnessUnspecified(x: Foo?): Foo {
|
||||
return FOO
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+17
-3
@@ -17,6 +17,8 @@ public class BaseClass {
|
||||
public @Nullable Foo mixed(Foo x) { return null; }
|
||||
|
||||
public Foo explicitlyNullnessUnspecified(@NullnessUnspecified Foo x) { return null; }
|
||||
|
||||
public static Foo foo() { return null; }
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +26,11 @@ public class BaseClass {
|
||||
|
||||
private val FOO = object : Foo {}
|
||||
|
||||
class Correct : BaseClass() {
|
||||
open class IntermediateClass : BaseClass() {
|
||||
open fun intermediateNotNull() = BaseClass.foo()
|
||||
}
|
||||
|
||||
class Correct : IntermediateClass() {
|
||||
override fun everythingNotNullable(x: Foo): Foo {
|
||||
return FOO
|
||||
}
|
||||
@@ -44,9 +50,13 @@ class Correct : BaseClass() {
|
||||
override fun explicitlyNullnessUnspecified(x: Foo): Foo {
|
||||
return FOO
|
||||
}
|
||||
|
||||
override fun intermediateNotNull(): Foo {
|
||||
return FOO
|
||||
}
|
||||
}
|
||||
|
||||
class WrongReturnTypes : BaseClass() {
|
||||
class WrongReturnTypes : IntermediateClass() {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun everythingNotNullable(x: Foo): Foo? {
|
||||
return null
|
||||
}
|
||||
@@ -54,9 +64,13 @@ class WrongReturnTypes : BaseClass() {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun explicitlyNullnessUnspecified(x: Foo): Foo? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun intermediateNotNull(): Foo? {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
class WrongParameter : BaseClass() {
|
||||
class WrongParameter : IntermediateClass() {
|
||||
<!WRONG_NULLABILITY_FOR_JAVA_OVERRIDE!>override<!> fun everythingNotNullable(x: Foo?): Foo {
|
||||
return FOO
|
||||
}
|
||||
|
||||
+23
-3
@@ -12,9 +12,12 @@ private val FOO: FOO.`<no name provided>`
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
@org.jspecify.annotations.Nullable public open fun mixed(/*0*/ x: Foo!): @org.jspecify.annotations.Nullable Foo!
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
// Static members
|
||||
public open fun foo(): Foo!
|
||||
}
|
||||
|
||||
public final class Correct : BaseClass {
|
||||
public final class Correct : IntermediateClass {
|
||||
public constructor Correct()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ fun everythingNotNullable(/*0*/ x: Foo): Foo
|
||||
@@ -22,6 +25,7 @@ public final class Correct : BaseClass {
|
||||
public open override /*1*/ fun everythingUnknown(/*0*/ x: Foo?): Foo?
|
||||
public open override /*1*/ fun explicitlyNullnessUnspecified(/*0*/ x: Foo): Foo
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ fun intermediateNotNull(): Foo
|
||||
public open override /*1*/ fun mixed(/*0*/ x: Foo): Foo?
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -32,7 +36,20 @@ public interface Foo {
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class WrongParameter : BaseClass {
|
||||
public open class IntermediateClass : BaseClass {
|
||||
public constructor IntermediateClass()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun everythingNotNullable(/*0*/ x: Foo!): Foo!
|
||||
@org.jspecify.annotations.Nullable public open override /*1*/ /*fake_override*/ fun everythingNullable(/*0*/ @org.jspecify.annotations.Nullable x: @org.jspecify.annotations.Nullable Foo!): @org.jspecify.annotations.Nullable Foo!
|
||||
@org.jspecify.annotations.NullnessUnspecified public open override /*1*/ /*fake_override*/ fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): @org.jspecify.annotations.NullnessUnspecified Foo!
|
||||
public open override /*1*/ /*fake_override*/ fun explicitlyNullnessUnspecified(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): Foo!
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open fun intermediateNotNull(): Foo!
|
||||
@org.jspecify.annotations.Nullable public open override /*1*/ /*fake_override*/ fun mixed(/*0*/ x: Foo!): @org.jspecify.annotations.Nullable Foo!
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class WrongParameter : IntermediateClass {
|
||||
public constructor WrongParameter()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ fun everythingNotNullable(/*0*/ x: Foo?): Foo
|
||||
@@ -40,11 +57,12 @@ public final class WrongParameter : BaseClass {
|
||||
public open override /*1*/ fun everythingUnknown(/*0*/ x: Foo): Foo?
|
||||
public open override /*1*/ fun explicitlyNullnessUnspecified(/*0*/ x: Foo?): Foo
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun intermediateNotNull(): Foo!
|
||||
public open override /*1*/ fun mixed(/*0*/ x: Foo?): Foo?
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class WrongReturnTypes : BaseClass {
|
||||
public final class WrongReturnTypes : IntermediateClass {
|
||||
public constructor WrongReturnTypes()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ fun everythingNotNullable(/*0*/ x: Foo): Foo?
|
||||
@@ -52,6 +70,8 @@ public final class WrongReturnTypes : BaseClass {
|
||||
@org.jspecify.annotations.NullnessUnspecified public open override /*1*/ /*fake_override*/ fun everythingUnknown(/*0*/ @org.jspecify.annotations.NullnessUnspecified x: @org.jspecify.annotations.NullnessUnspecified Foo!): @org.jspecify.annotations.NullnessUnspecified Foo!
|
||||
public open override /*1*/ fun explicitlyNullnessUnspecified(/*0*/ x: Foo): Foo?
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ fun intermediateNotNull(): Foo?
|
||||
@org.jspecify.annotations.Nullable public open override /*1*/ /*fake_override*/ fun mixed(/*0*/ x: Foo!): @org.jspecify.annotations.Nullable Foo!
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user