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,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> {