Introduce FIR_IDENTICAL for FIR vs old frontend tests #KT-36879 Fixed

This commit is contained in:
Mikhail Glukhikh
2020-03-04 17:54:33 +03:00
parent 186e0b0cba
commit 8884cbe415
2268 changed files with 1175 additions and 19754 deletions
@@ -1,49 +0,0 @@
// JAVAC_EXPECTED_FILE
// FILE: p/G.java
package p;
public interface G<TG> {
}
// FILE: p/A.kt
package p;
public interface A<TA> {
fun foo(p: A<TA>)
}
// FILE: p/B.java
package p;
public class B<TB> implements A<TB> {
void foo(A<TB> p) {}
}
// FILE: p/C.java
package p;
public class C<TC> extends B<TC> implements A<TC> {
}
// FILE: p/P.java
package p;
public class P {
}
// FILE: k.kt
import p.*
abstract class K: C<P>() {
}
abstract class AL: java.util.ArrayList<P>() {
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// JAVAC_EXPECTED_FILE
// FILE: p/G.java
@@ -1,30 +0,0 @@
// FILE: p/A.java
package p;
public interface A {
<TA> void foo(TA p);
}
// FILE: p/B.java
package p;
public class B implements A {
<TB> void foo(TB p) {}
}
// FILE: p/C.java
package p;
public class C extends B implements A {
}
// FILE: k.kt
import p.*
abstract class K: C() {
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: p/A.java
package p;
@@ -1,16 +0,0 @@
// FILE: Bar.java
public class Bar implements Foo {
public interface I extends Boo {
}
}
// FILE: Baz.kt
public interface Foo {
companion object {
public val EMPTY: Foo = object : Foo{}
}
}
interface Boo
public class Baz : Bar.I
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Bar.java
public class Bar implements Foo {
public interface I extends Boo {
@@ -1,18 +0,0 @@
// FILE: K1.kt
open class KFirst() {
fun foo() {
}
}
// FILE: J1.java
public class J1 extends KFirst {
void baz() {}
}
// FILE: K2.kt
class K2: J1() {
fun bar() {
foo()
baz()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: K1.kt
open class KFirst() {
fun foo() {
@@ -1,17 +0,0 @@
// FILE: K1.kt
open class KFirst<T: java.io.Serializable>() {
fun foo(t: T): T = t
}
// FILE: J1.java
public class J1 extends KFirst<Integer> {
void baz() {}
}
// FILE: K2.kt
class K2: J1() {
fun bar() {
foo(1)
baz()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: K1.kt
open class KFirst<T: java.io.Serializable>() {
fun foo(t: T): T = t
@@ -1,12 +0,0 @@
// FILE: Aaa.java
// http://youtrack.jetbrains.com/issue/KT-1694
public abstract class Aaa {
public abstract void foo(String... args);
}
// FILE: bbb.kt
class Bbb() : Aaa() {
override fun foo(vararg args: String?) = Unit
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Aaa.java
// http://youtrack.jetbrains.com/issue/KT-1694
-11
View File
@@ -1,11 +0,0 @@
// FILE: aa/A.java
package aa;
public class A {
public void f() { }
}
// FILE: B.kt
import aa.A
fun foo(a: A) = a.f()
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: aa/A.java
package aa;
@@ -1,16 +0,0 @@
// FILE: Aaa.java
// http://youtrack.jetbrains.com/issue/KT-1880
public class Aaa {
public static final int i = 1;
}
// FILE: Bbb.java
public class Bbb extends Aaa {
public static final String i = "s";
}
// FILE: b.kt
fun foo() = Bbb.i
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Aaa.java
// http://youtrack.jetbrains.com/issue/KT-1880
@@ -1,20 +0,0 @@
// FILE: A.java
public class A {}
// FILE: X.java
public class X<T> {
T foo() {return null;}
void bar(T a) {}
}
// FILE: Y.java
public class Y extends X<String> {
}
// FILE: test.kt
fun main() {
Y().foo().length
Y().bar(null)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public class A {}
@@ -1,20 +0,0 @@
// FILE: A.java
public class A {}
// FILE: X.java
public class X<T> {
T foo() {return null;}
void bar(T a) {}
}
// FILE: Y.java
public class Y extends X<A> {
}
// FILE: test.kt
fun main() {
Y().foo().hashCode()
Y().bar(null)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public class A {}
@@ -1,13 +0,0 @@
// FILE: a/Test.java
package a;
public class Test<T> {
T t() {return null;}
}
// FILE: b.kt
package a
fun foo() {
// If this fails, it means that we have broken the rule that Java returns are always nullable
a.Test<Int>().t() + 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: a/Test.java
package a;
@@ -1,12 +0,0 @@
// FILE: A.java
@missing.Ann(x = "")
public class A {
@missing.Ann(1)
public String foo() {}
}
// FILE: main.kt
fun main() {
A().foo().length
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
@missing.Ann(x = "")
public class A {
@@ -1,19 +0,0 @@
// FILE: MyAnnotation.java
public @interface MyAnnotation {
}
// FILE: MyAnnoClass.java
public class MyAnnoClass implements MyAnnotation {
//...
}
// FILE: main.kt
val ann: MyAnnotation = MyAnnoClass()
fun foo(x: MyAnnoClass) {
bar(x)
}
fun bar(y: MyAnnotation) {
y.hashCode()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: MyAnnotation.java
public @interface MyAnnotation {
}
@@ -1,13 +0,0 @@
// FILE: Hello.kt
private class Hello()
{
val a = 4
}
fun test() {
// no exception is thrown (see KT-3897)
Hello().a
}
// FILE: Hello.java
public class Hello {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Hello.kt
private class Hello()
{
@@ -1,16 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public class A {
public static void foo() {}
public static void foo(String x) {}
private void foo(int y) {}
}
// FILE: main.kt
fun baz(x: (String) -> Unit) {}
fun bar() {
baz(A::foo)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public class A {
@@ -1,22 +0,0 @@
// FILE: CharBuffer.java
public class CharBuffer implements CharSequence {
public final int length() {
return 0;
}
public final char charAt(int index) {
return get(position() + checkIndex(index, 1));
}
// The key problem here is that `get` has the same signature as kotlin.CharSequence.get but completely different semantics
public abstract char get(int index);
public abstract CharBuffer subSequence(int start, int end);
}
// FILE: main.kt
fun test(cb: CharBuffer) {
cb.get(0)
(cb as CharSequence).get(0)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: CharBuffer.java
public class CharBuffer implements CharSequence {
@@ -1,85 +0,0 @@
// FILE: CollectionStringImpl.java
import java.util.Collection;
import java.util.Iterator;
public class CollectionStringImpl implements Collection<String> {
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<String> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] a) {
return null;
}
@Override
public boolean add(String s) {
return false;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> c) {
return false;
}
@Override
public boolean addAll(Collection<? extends String> c) {
return false;
}
@Override
public boolean removeAll(Collection<?> c) {
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
return false;
}
@Override
public void clear() {
}
public boolean contains(String o) {
return true;
}
}
// FILE: main.kt
fun test(x: CollectionStringImpl) {
x.contains("")
(x as Collection<String>).contains("")
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: CollectionStringImpl.java
import java.util.Collection;
@@ -1,30 +0,0 @@
// FILE: A.java
abstract public class A implements CharSequence {
public char charAt(int x) { }
public int length() { return 1; }
}
// FILE: C.java
abstract public class C implements CharSequence {
public char get(int x) { }
public int length() { return 1; }
}
// FILE: main.kt
abstract class B : A(), CharSequence {
override operator fun get(index: Int) = '1'
override val length: Int get() = 1
}
fun main(a: A, b: B, c: C) {
a[0]
b[0]
c[0]
a.get(0)
b.get(0)
c.get(0)
a.length + b.length + c.length
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
abstract public class A implements CharSequence {
public char charAt(int x) { }
@@ -1,19 +0,0 @@
// FILE: A.java
public abstract class A {
abstract public char charAt(int i);
}
// FILE: B.java
abstract public class B extends A implements CharSequence {
public char charAt(int i) { return '1'; }
}
// FILE: main.kt
abstract class C1 : B()
abstract class C2 : B() {
override fun get(index: Int) = '1'
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public abstract class A {
@@ -1,25 +0,0 @@
// FILE: AImpl.java
abstract public class AImpl {
public char charAt(int index) {
return '1';
}
public final int length() { return 1; }
}
// FILE: A.java
public class A extends AImpl implements CharSequence {
public CharSequence subSequence(int start, int end) {
return null;
}
}
// FILE: X.kt
class X : A()
fun main() {
val x = X()
x[0]
x.length
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: AImpl.java
abstract public class AImpl {
@@ -1,28 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: AImpl.kt
abstract class AImpl {
fun charAt(index: Int): Char {
return '1'
}
fun length(): Int {
return 1
}
}
// FILE: A.java
public class A extends AImpl implements CharSequence {
public CharSequence subSequence(int start, int end) {
return null;
}
}
// FILE: X.kt
class X : A()
fun main() {
val x = X()
x[0]
x.length
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: AImpl.kt
@@ -1,19 +0,0 @@
// FILE: Dict.java
public abstract class Dict<K, V> {
abstract public V get(Object key);
}
// FILE: MHashtable.java
abstract public class MHashtable<X, Y> extends Dict<X, Y> implements java.util.Map<X, Y> {
public V get(Object key) { return null; }
}
// FILE: main.kt
abstract class C1 : MHashtable<String, Int>()
abstract class C2 : MHashtable<String, Int>() {
override fun get(key: String) = 1
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Dict.java
public abstract class Dict<K, V> {
@@ -1,14 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VALUE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
// JAVAC_EXPECTED_FILE
// FILE: MyMap.java
abstract public class MyMap extends java.util.AbstractMap<Double, CharSequence> {
String get(Object q) { }
}
// FILE: main.kt
fun foo(m: MyMap) {
var x: String? = m.get(1.0)
x = m[2.0]
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VALUE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
// JAVAC_EXPECTED_FILE
// FILE: MyMap.java
@@ -1,23 +0,0 @@
// JAVAC_EXPECTED_FILE
// FILE: A.java
abstract public class A<F> extends B<F> {
public F remove(int x) { }
public boolean remove(Object x) { }
}
// FILE: main.kt
import java.util.*;
abstract class B<T> : MutableList<T>, AbstractList<T>() {
override fun removeAt(index: Int): T = null!!
override fun remove(element: T): Boolean = null!!
}
fun main(a: A<String>, b: B<String>, c: ArrayList<String>) {
a.remove("")
a.removeAt(0)
b.remove("")
b.removeAt(0)
c.remove("")
c.removeAt(0)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// JAVAC_EXPECTED_FILE
// FILE: A.java
abstract public class A<F> extends B<F> {
@@ -1,23 +0,0 @@
// JAVAC_EXPECTED_FILE
// FILE: A.java
abstract public class A extends B {
public Integer removeAt(int x) { }
public boolean remove(Integer x) { }
}
// FILE: main.kt
import java.util.*;
abstract class B : MutableList<Int>, AbstractList<Int>() {
override fun removeAt(index: Int): Int = null!!
override fun remove(element: Int): Boolean = null!!
}
fun main(a: A, b: B, c: ArrayList<Int>) {
a.remove(1)
a.removeAt(0)
b.remove(1)
b.removeAt(0)
c.remove(1)
c.removeAt(0)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// JAVAC_EXPECTED_FILE
// FILE: A.java
abstract public class A extends B {
@@ -1,13 +0,0 @@
// FILE: A.java
abstract public class A<F> extends MyList<F> {
int getSize() { return 0; }
}
// FILE: main.kt
abstract class MyList<G> : Collection<G> {}
fun main(a: A<String>) {
a.size
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
abstract public class A<F> extends MyList<F> {
@@ -1,22 +0,0 @@
// FILE: MyFunc.java
public interface MyFunc<K, V> {
V apply(K String);
}
// FILE: ConcMap.java
public interface ConcMap<K, V> {
V computeIfAbsent(K key, MyFunc<? super K,? extends V> mappingFunction);
}
// FILE: ConcHashMap.java
public class ConcHashMap<K, V> implements ConcMap<K, V> {
@Override
V computeIfAbsent(K key, MyFunc<? super K,? extends V> mappingFunction) { }
}
// FILE: main.kt
public fun concurrentMap() {
val map = ConcHashMap<String, String>()
map.computeIfAbsent("") { "" } // here
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: MyFunc.java
public interface MyFunc<K, V> {
V apply(K String);
@@ -1,20 +0,0 @@
// FILE: A.java
import java.util.*;
public class A {
public static void foo(Iterable<? super CharSequence> x) {}
public static void bar(Iterator<? super CharSequence> x) {}
}
// FILE: main.kt
fun test(x: List<String>, y: List<*>, z: MutableList<*>, w: MutableList<in CharSequence>) {
A.foo(x)
A.foo(y)
A.foo(z)
A.foo(w)
A.bar(x.iterator())
A.bar(y.iterator())
A.bar(z.iterator())
A.bar(w.iterator())
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
import java.util.*;
public class A {
@@ -1,12 +0,0 @@
// FILE: MyEnum.java
public enum MyEnum {
A;
public int getOrdinal() {return "";}
}
// FILE: main.kt
fun foo() {
MyEnum.A.getOrdinal()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: MyEnum.java
public enum MyEnum {
@@ -1,20 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// JAVAC_EXPECTED_FILE
// FILE: VcsException.java
import org.jetbrains.annotations.NotNull;
public class VcsException extends Exception {
@Override
@NotNull
public String getMessage() {
return "";
}
}
// FILE: main.kt
fun foo(e: VcsException) {
e.message.contains("")
"" in e.message
}
public operator fun CharSequence.contains(other: CharSequence): Boolean = true
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
// JAVAC_EXPECTED_FILE
// FILE: VcsException.java
@@ -1,19 +0,0 @@
// !WITH_NEW_INFERENCE
// FILE: TestClass.java
import org.jetbrains.annotations.Nullable;
public class TestClass {
public <T> T set(@Nullable String key, @Nullable T t) {
return t;
}
}
// FILE: main.kt
fun run() {
val testClass = TestClass()
// inferred as `set<Nothing>()`, return type is Nothing!
testClass.set("test", null)
// Should not be unreachable
run()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !WITH_NEW_INFERENCE
// FILE: TestClass.java
@@ -1,19 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: R.java
public class R<T extends R<T>> {
public <F extends R<F>> R(F x) {
}
}
// FILE: RImpl.java
public class RImpl extends R<RImpl> {
public RImpl() {
<RImpl>super(null);
}
}
// FILE: main.kt
fun test() {
val x: R<RImpl> = R(RImpl())
R<RImpl, RImpl>(RImpl())
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
// FILE: R.java
public class R<T extends R<T>> {
@@ -1,18 +0,0 @@
// FILE: A.java
public interface A {
void foo(Runnable r);
}
// FILE: B.java
public interface B extends A {
public void bar(Runnable r);
}
// FILE: test.kt
class C: B {
override fun foo(r: Runnable?) {
}
override fun bar(r: Runnable?) {
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public interface A {
void foo(Runnable r);
@@ -1,37 +0,0 @@
// JAVAC_EXPECTED_FILE
// FILE: backend/asmutil/AsmUtil.java
package backend.asmutil;
import org.jetbrains.annotations.NotNull;
import static frontend.JvmDeclarationOrigin.NO_ORIGIN;
public class AsmUtil {
@NotNull
public static String doSmth(String s) {
Object or = NO_ORIGIN;
return "OK";
}
}
// FILE: First.kt
package frontend
public class JvmDeclarationOrigin {
companion object {
public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin()
}
}
// FILE: Second.kt
package backend
import backend.asmutil.AsmUtil.doSmth
open public class ECallable {
fun test() {
doSmth("")
}
}
/* KT-5848 */
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// JAVAC_EXPECTED_FILE
// FILE: backend/asmutil/AsmUtil.java
package backend.asmutil;
-26
View File
@@ -1,26 +0,0 @@
// FILE: a/M.java
package a;
public class M {
public static class Inner {
private int i;
public Inner(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
}
// FILE: b.kt
package b
import a.M.Inner
fun foo() {
doSmth(Inner(87))
}
fun doSmth(b: Inner) = b
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: a/M.java
package a;
-17
View File
@@ -1,17 +0,0 @@
//FILE: a/C.java
// KT-1431 StackOverflowException in IDE when using JavaFX builders
package a;
public class C<B extends C<B>> {
public static C<?> create() { return null; }
public C foo() {return null;}
}
//FILE: d.kt
package d
import a.C
fun test() {
C.create().foo()
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//FILE: a/C.java
// KT-1431 StackOverflowException in IDE when using JavaFX builders
package a;
@@ -1,24 +0,0 @@
// KT-1730 Method which has been implemented by Java is recognized to be abstract.
// FILE: C.java
public class C implements java.lang.CharSequence {
@Override
public int length() {
return 3;
}
@Override
public char charAt(int index) {
return 48;
}
@Override
public CharSequence subSequence(int start, int end) {
return "ab";
}
@Override
public String toString() {
return "abc";
}
}
// FILE: T.kt
class T : C()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// KT-1730 Method which has been implemented by Java is recognized to be abstract.
// FILE: C.java
-10
View File
@@ -1,10 +0,0 @@
//FILE: Bbb.kt
open class Bbb
//FILE: Ccc.java
public class Ccc extends Bbb {
}
//FILE: Ddd.kt
import Ccc
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//FILE: Bbb.kt
open class Bbb
-15
View File
@@ -1,15 +0,0 @@
// !CHECK_TYPE
//KT-2394 java.lang.Iterable<T> should be visible as kotlin.Iterable<out T>
package d
fun foo(iterable: Iterable<Int>, iterator: Iterator<Int>, comparable: Comparable<Any>) {
checkSubtype<Iterable<Any>>(iterable)
checkSubtype<Iterator<Any>>(iterator)
checkSubtype<Comparable<String>>(comparable)
}
fun bar(c: Collection<Int>) {
checkSubtype<Iterable<Any>>(c)
checkSubtype<Iterator<Any>>(c.iterator())
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !CHECK_TYPE
//KT-2394 java.lang.Iterable<T> should be visible as kotlin.Iterable<out T>
-21
View File
@@ -1,21 +0,0 @@
// FILE: Bug.java
public interface Bug {
<RET extends Bug> RET save();
}
// FILE: SubBug.java
public class SubBug implements Bug {
public SubBug save() {
return this;
}
}
// FILE: Bug.kt
fun TestBug() {
SubBug().save() // can resolve on subtype
val bug: Bug = SubBug()
bug.save<Bug>() // can resolve on supertype
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Bug.java
public interface Bug {
-19
View File
@@ -1,19 +0,0 @@
// FILE: Super.java
public class Super {
public boolean foo;
public boolean bar;
public void setFoo(boolean foo) {
this.foo = foo;
}
}
// FILE: b.kt
public class Sub: Super() {
}
fun main() {
val x = Sub()
x.foo = true
x.bar = true
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Super.java
public class Super {
public boolean foo;
-14
View File
@@ -1,14 +0,0 @@
// FILE: A.java
public interface A<T extends A<? super T, ?>, S extends A<? super T, ?>> {}
// FILE: C.java
public class C
{
public <T extends A<? super T, ?>, S extends A<? super T, ?>> void f(A<T, S> x){}
}
// FILE: main.kt
fun foo() {
// TODO: uncomment when KT-9597 is fixed
// C().f(object : A<*, *> {})
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
public interface A<T extends A<? super T, ?>, S extends A<? super T, ?>> {}
-18
View File
@@ -1,18 +0,0 @@
// FILE: Assert.java
public class Assert {
public static <T> void assertThat(T actual, Matcher<? super T> matcher) {
}
}
// FILE: Matcher.java
public class Matcher<T> {
public static <T> Matcher<java.lang.Iterable<? super T>> hasItem(T item) {
return null;
}
}
// FILE: main.kt
fun test(x: List<String>) {
Assert.assertThat(x, Matcher.hasItem("abc"))
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: Assert.java
public class Assert {
@@ -1,29 +0,0 @@
//FILE:a/JC.java
package a;
import java.util.Iterator;
public interface JC<T> {
public Iterator<T> getIterator();
public void setIterator(Iterator<T> iterator);
public Iterable<T> getIterable();
public void setIterable(Iterable<T> iterable);
}
//FILE:n.kt
package n
import a.JC
fun foo(c: JC<Int>, iterator: Iterator<Int>, iterable: Iterable<Int>) {
val mutableIterator: MutableIterator<Int>? = c.getIterator()
c.setIterator(mutableIterator)
c.setIterator(iterator)
val mutableIterable: MutableIterable<Int>? = c.getIterable()
c.setIterable(mutableIterable)
c.setIterable(iterable)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//FILE:a/JC.java
package a;
@@ -1,9 +0,0 @@
// FULL_JDK
import java.util.*
import java.util.stream.Stream
fun <T> Stream<T>?.getIfSingle() =
this?.map { Optional.ofNullable(it) }
?.reduce(Optional.empty()) { _, _ -> Optional.empty() }
?.orElse(null) // <<---- should not be an error
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FULL_JDK
import java.util.*
@@ -1,15 +0,0 @@
//FILE: Foo.java
public class Foo<T extends CharSequence> {
}
//FILE: Bar.java
public interface Bar {
void f(Foo f);
}
//FILE: a.kt
class BarImpl: Bar {
override fun f(f: Foo<*>?) {
throw UnsupportedOperationException()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
//FILE: Foo.java
public class Foo<T extends CharSequence> {
}
@@ -1,22 +0,0 @@
// FILE: MyFunc.java
public interface MyFunc {
String apply(String x);
}
// FILE: A.java
public interface A<K> {
K foo(K key, MyFunc f);
}
// FILE: B.java
public class B<E> implements A<E> {
@Override
public E foo(E key, MyFunc f) {return null;}
}
// FILE: main.kt
fun main() {
B<String>().foo("") { "" }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: MyFunc.java
public interface MyFunc {
@@ -1,17 +0,0 @@
// KT-4021 Java's Package visibilty does not work for static methods
// FILE: foo/Bar.java
package foo;
class Bar {
static void baz() {}
}
// FILE: main.kt
package foo
fun main() {
Bar.baz()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// KT-4021 Java's Package visibilty does not work for static methods
// FILE: foo/Bar.java
@@ -1,29 +0,0 @@
// !LANGUAGE: +InlineClasses
// FILE: kt1.kt
package kt
inline class Z(val value: Int)
interface IFoo<T> {
fun foo(): T
}
open class KFooZ : IFoo<Z> {
override fun foo(): Z = Z(42)
}
// FILE: j/J.java
package j;
import kt.Z;
import kt.KFooZ;
public class J extends KFooZ {
}
// FILE: kt2.kt
package kt
import j.J
fun jfoo(x: J) = x.foo()
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +InlineClasses
// FILE: kt1.kt
package kt
@@ -1,19 +0,0 @@
// FILE: B.java
public abstract class B implements A {
private int size = 1;
}
// FILE: main.kt
interface A {
val size: Int
}
class C : B() {
override val size: Int get() = 1
}
fun foo() {
C().size
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: B.java
public abstract class B implements A {

Some files were not shown because too many files have changed in this diff Show More