K2: add various tests describing current KT-62554 / KT-63242 behavior

This commit is contained in:
Mikhail Glukhikh
2023-11-22 19:02:48 +01:00
committed by Space Team
parent 17a1871b83
commit 54d978ba86
47 changed files with 916 additions and 0 deletions
@@ -0,0 +1,17 @@
// FIR_IDENTICAL
// WITH_STDLIB
// FILE: BaseOwnerJava.java
import java.util.Collection;
public interface BaseOwnerJava {
void setSomething(Collection<? extends BaseOwnerJava> arg);
}
// FILE: test.kt
abstract class Impl : BaseOwnerJava {
override fun setSomething(arg: Collection<BaseOwnerJava>) = throw IllegalStateException()
}
class Final : Impl(), BaseOwnerJava
@@ -0,0 +1,20 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: C:foo
// FILE: A.java
public class A {
public void foo(Integer x) {}
}
// FILE: main.kt
interface B {
fun foo(x: Int) {}
}
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class C<!> : A(), B
fun main() {
C().foo(42)
}
@@ -0,0 +1,4 @@
C:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Use site scope of /C [id: 0]
[Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/Unit| from Java enhancement scope for /A [id: 1]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 2]
@@ -0,0 +1,15 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| {
}
}
public final class C : R|A|, R|B| {
public constructor(): R|C| {
super<R|A|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/C.C|().R|/A.foo|(Int(42))
}
@@ -0,0 +1,20 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: C:foo
// FILE: A.java
public class A {
public void foo(Integer x) {}
}
// FILE: main.kt
interface B {
fun foo(x: Int) {}
}
class C : A(), B
fun main() {
C().foo(42)
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public T foo(Integer x) {
return "A";
}
}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
open class C : A<String>()
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class D<!> : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,6 @@
D:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
[Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|ft<T & Any, T?>| from Java enhancement scope for /A [id: 2]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3]
@@ -0,0 +1,22 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/String| {
^foo String(B)
}
}
public open class C : R|A<kotlin/String>| {
public constructor(): R|C| {
super<R|A<kotlin/String>|>()
}
}
public final class D : R|C|, R|B| {
public constructor(): R|D| {
super<R|C|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/D.D|().R|/B.foo|(Int(42))
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public T foo(Integer x) {
return "A";
}
}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
open class C : A<String>()
class D : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,26 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: C.java
public class C extends A<Integer> {}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class D<!> : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,6 @@
D:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /C [id: 1]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
[Enhancement]: public open fun foo(x: R|ft<T & Any, T?>|): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3]
@@ -0,0 +1,16 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/String| {
^foo String(B)
}
}
public final class D : R|C|, R|B| {
public constructor(): R|D| {
super<R|C|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/D.D|().R|/B.foo|(Int(42))
}
@@ -0,0 +1,26 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: C.java
public class C extends A<Integer> {}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
class D : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
open class C : A<Int>()
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class D<!> : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,6 @@
D:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 0]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
[Enhancement]: public open fun foo(x: R|ft<T & Any, T?>|): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /B [id: 3]
@@ -0,0 +1,22 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/String| {
^foo String(B)
}
}
public open class C : R|A<kotlin/Int>| {
public constructor(): R|C| {
super<R|A<kotlin/Int>|>()
}
}
public final class D : R|C|, R|B| {
public constructor(): R|D| {
super<R|C|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/D.D|().R|/B.foo|(Int(42))
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: D:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: main.kt
interface B {
fun foo(x: Int) = "B"
}
open class C : A<Int>()
class D : C(), B
fun main() {
D().foo(42)
}
@@ -0,0 +1,26 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: E:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: main.kt
interface B<T> {
fun foo(x: T) = "B"
}
open class C : A<Int>()
interface D : B<Int>
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class E<!> : C(), D
fun main() {
E().foo(42)
}
@@ -0,0 +1,8 @@
E:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Use site scope of /C [id: 1]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Substitution scope for [Java enhancement scope for /A] for type C [id: 1]
[Enhancement]: public open fun foo(x: R|ft<T & Any, T?>|): R|kotlin/String!| from Java enhancement scope for /A [id: 2]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 3]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Substitution scope for [Use site scope of /B] for type D [id: 3]
[Source]: public open fun foo(x: R|T|): R|kotlin/String| from Use site scope of /B [id: 4]
@@ -0,0 +1,24 @@
FILE: main.kt
public abstract interface B<T> : R|kotlin/Any| {
public open fun foo(x: R|T|): R|kotlin/String| {
^foo String(B)
}
}
public open class C : R|A<kotlin/Int>| {
public constructor(): R|C| {
super<R|A<kotlin/Int>|>()
}
}
public abstract interface D : R|B<kotlin/Int>| {
}
public final class E : R|C|, R|D| {
public constructor(): R|E| {
super<R|C|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/E.E|().R|/D.foo|(Int(42))
}
@@ -0,0 +1,26 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: E:foo
// FILE: A.java
public class A<T> {
public String foo(T x) {
return "A";
}
}
// FILE: main.kt
interface B<T> {
fun foo(x: T) = "B"
}
open class C : A<Int>()
interface D : B<Int>
class <!CONFLICTING_INHERITED_JVM_DECLARATIONS!>E<!> : C(), D
fun main() {
E().foo(42)
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: E:foo
// FILE: A.java
public class A {
public String foo(Integer x) {
return "A";
}
}
// FILE: main.kt
interface B<T> {
fun foo(x: T) = "B"
}
interface D : B<Int>
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class E<!> : A(), D
fun main() {
E().foo(42)
}
@@ -0,0 +1,6 @@
E:
[IntersectionOverride]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /E [id: 0]
[Enhancement]: public open fun foo(x: R|kotlin/Int!|): R|kotlin/String!| from Java enhancement scope for /A [id: 1]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Use site scope of /D [id: 2]
[SubstitutionOverride(DeclarationSite)]: public open fun foo(x: R|kotlin/Int|): R|kotlin/String| from Substitution scope for [Use site scope of /B] for type D [id: 2]
[Source]: public open fun foo(x: R|T|): R|kotlin/String| from Use site scope of /B [id: 3]
@@ -0,0 +1,18 @@
FILE: main.kt
public abstract interface B<T> : R|kotlin/Any| {
public open fun foo(x: R|T|): R|kotlin/String| {
^foo String(B)
}
}
public abstract interface D : R|B<kotlin/Int>| {
}
public final class E : R|A|, R|D| {
public constructor(): R|E| {
super<R|A|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/E.E|().R|/D.foo|(Int(42))
}
@@ -0,0 +1,24 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: E:foo
// FILE: A.java
public class A {
public String foo(Integer x) {
return "A";
}
}
// FILE: main.kt
interface B<T> {
fun foo(x: T) = "B"
}
interface D : B<Int>
class E : A(), D
fun main() {
E().foo(42)
}
@@ -0,0 +1,22 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: C:foo
// FILE: A.java
import org.jetbrains.annotations.*;
public class A {
public void foo(@NotNull Integer x) {}
}
// FILE: main.kt
interface B {
fun foo(x: Int) {}
}
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class C<!> : A(), B
fun main() {
C().foo(42)
}
@@ -0,0 +1,4 @@
C:
[IntersectionOverride]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0]
[Enhancement]: public open fun foo(x: R|@EnhancedNullability kotlin/Int|): R|kotlin/Unit| from Java enhancement scope for /A [id: 1]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 2]
@@ -0,0 +1,15 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| {
}
}
public final class C : R|A|, R|B| {
public constructor(): R|C| {
super<R|A|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/C.C|().R|/A.foo|(Int(42))
}
@@ -0,0 +1,22 @@
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: C:foo
// FILE: A.java
import org.jetbrains.annotations.*;
public class A {
public void foo(@NotNull Integer x) {}
}
// FILE: main.kt
interface B {
fun foo(x: Int) {}
}
class C : A(), B
fun main() {
C().<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>(42)
}
@@ -0,0 +1,15 @@
FILE: main.kt
public abstract interface B : R|kotlin/Any| {
public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| {
}
}
public final class C : R|A|, R|B| {
public constructor(): R|C| {
super<R|A|>()
}
}
public final fun main(): R|kotlin/Unit| {
R|/C.C|().R|/B.foo|(Int(42))
}
@@ -0,0 +1,23 @@
// FIR_IDENTICAL
// ISSUE: KT-62554
// FIR_DUMP
// SCOPE_DUMP: C:foo
// FILE: A.java
import org.jetbrains.annotations.*;
public class A {
public void foo(@Nullable Integer x) {}
}
// FILE: main.kt
interface B {
fun foo(x: Int) {}
}
class C : A(), B
fun main() {
C().foo(42)
}
@@ -0,0 +1,6 @@
C:
[Enhancement]: public open fun foo(x: R|kotlin/Int?|): R|kotlin/Unit| from Use site scope of /C [id: 0]
[Enhancement]: public open fun foo(x: R|kotlin/Int?|): R|kotlin/Unit| from Java enhancement scope for /A [id: 0]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /C [id: 0]
[Source]: public open fun foo(x: R|kotlin/Int|): R|kotlin/Unit| from Use site scope of /B [id: 0]