Introduce FIR_IDENTICAL for FIR vs old frontend tests #KT-36879 Fixed
This commit is contained in:
-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> {
|
||||
|
||||
Reference in New Issue
Block a user