Use descriptors for building SAM constructors
It helps to get rid of semantics duplicating and fixes known bugs - SOE in OnlyAbstractMethodFinder.find - type enhancement for SAM constructors #KT-11287 Fixed #KT-11322 Fixed EA-77989 Fixed
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
// FILE: J.java
|
||||
import org.jetbrains.annotations.*;
|
||||
|
||||
public interface J {
|
||||
@NotNull
|
||||
String foo(@Nullable String x);
|
||||
}
|
||||
|
||||
// FILE: J2.java
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public interface J2 extends J {
|
||||
String foo(String x);
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
fun main() {
|
||||
J { <!EXPECTED_PARAMETER_TYPE_MISMATCH!>s: String<!> -> s} // should be prohibited, because SAM value parameter has nullable type
|
||||
J { "" + it<!UNSAFE_CALL!>.<!>length }
|
||||
J { <!NULL_FOR_NONNULL_TYPE!>null<!> }
|
||||
J { <!TYPE_MISMATCH!>it?.length?.toString()<!> }
|
||||
|
||||
J2 { <!EXPECTED_PARAMETER_TYPE_MISMATCH!>s: String<!> -> s}
|
||||
J2 { "" + it<!UNSAFE_CALL!>.<!>length }
|
||||
J2 { <!NULL_FOR_NONNULL_TYPE!>null<!> }
|
||||
J2 { <!TYPE_MISMATCH!>it?.length?.toString()<!> }
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public /*synthesized*/ fun J(/*0*/ function: (kotlin.String?) -> kotlin.String): J
|
||||
public /*synthesized*/ fun J2(/*0*/ function: (kotlin.String?) -> kotlin.String): J2
|
||||
public fun main(): kotlin.Unit
|
||||
|
||||
public interface J {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull() public abstract fun foo(/*0*/ @org.jetbrains.annotations.Nullable() x: kotlin.String?): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface J2 : J {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract override /*1*/ fun foo(/*0*/ x: kotlin.String?): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user