Introduce FIR_IDENTICAL for FIR vs old frontend tests #KT-36879 Fixed
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
|
||||
-20
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
public class A {}
|
||||
|
||||
|
||||
-20
@@ -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
@@ -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;
|
||||
|
||||
|
||||
-12
@@ -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
@@ -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()
|
||||
{
|
||||
|
||||
-16
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// FILE: A.java
|
||||
public class A {
|
||||
|
||||
-22
@@ -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 {
|
||||
|
||||
-85
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: CollectionStringImpl.java
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
-30
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
abstract public class A implements CharSequence {
|
||||
public char charAt(int x) { }
|
||||
|
||||
Vendored
-19
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
|
||||
public abstract class A {
|
||||
|
||||
Vendored
-25
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: AImpl.java
|
||||
|
||||
abstract public class AImpl {
|
||||
|
||||
Vendored
-28
@@ -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
|
||||
}
|
||||
Vendored
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// FILE: AImpl.kt
|
||||
|
||||
|
||||
Vendored
-19
@@ -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
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: Dict.java
|
||||
|
||||
public abstract class Dict<K, V> {
|
||||
|
||||
-14
@@ -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> {
|
||||
|
||||
-23
@@ -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 {
|
||||
|
||||
Vendored
-13
@@ -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
|
||||
}
|
||||
Vendored
+1
@@ -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;
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: a/M.java
|
||||
package a;
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
//FILE: Bbb.kt
|
||||
open class Bbb
|
||||
|
||||
//FILE: Ccc.java
|
||||
public class Ccc extends Bbb {
|
||||
}
|
||||
|
||||
//FILE: Ddd.kt
|
||||
import Ccc
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
//FILE: Bbb.kt
|
||||
open class Bbb
|
||||
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !CHECK_TYPE
|
||||
|
||||
//KT-2394 java.lang.Iterable<T> should be visible as kotlin.Iterable<out T>
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: Bug.java
|
||||
|
||||
public interface Bug {
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: Super.java
|
||||
public class Super {
|
||||
public boolean foo;
|
||||
|
||||
@@ -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,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: A.java
|
||||
public interface A<T extends A<? super T, ?>, S extends A<? super T, ?>> {}
|
||||
|
||||
|
||||
@@ -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,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> {
|
||||
}
|
||||
|
||||
-22
@@ -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 {
|
||||
|
||||
-17
@@ -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
|
||||
|
||||
-29
@@ -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
@@ -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
Reference in New Issue
Block a user