KT-6059 Regression: irrelevant compiler error on trait inheritance (worked in M8)

#KT-6059 Fixed
This commit is contained in:
Andrey Breslav
2014-10-20 18:54:25 +04:00
parent d9f5bd013b
commit 7b89771953
6 changed files with 157 additions and 0 deletions
@@ -195,6 +195,7 @@ public class DeclarationsChecker {
switch (typeParameterDescriptor.getVariance()) {
case INVARIANT:
// Leave conflicting types as is
Filter.REMOVE_IF_EQUAL_TYPE_IN_THE_SET.proceed(conflictingTypes);
break;
case IN_VARIANCE:
// Filter out those who have supertypes in this set (common supertype)
@@ -233,6 +234,12 @@ public class DeclarationsChecker {
public boolean removeNeeded(JetType subject, JetType other) {
return JetTypeChecker.DEFAULT.isSubtypeOf(subject, other);
}
},
REMOVE_IF_EQUAL_TYPE_IN_THE_SET {
@Override
public boolean removeNeeded(JetType subject, JetType other) {
return JetTypeChecker.DEFAULT.equalTypes(subject, other);
}
};
private void proceed(Set<JetType> conflictingTypes) {
@@ -0,0 +1,14 @@
// !EXPLICIT_FLEXIBLE_TYPES
// !DIAGNOSTICS: -BASE_WITH_NULLABLE_UPPER_BOUND
trait A<T>
trait B<T>: A<ft<T, T?>>
trait C: A<String>, B<String>
trait D: B<String>, A<String>
trait E: A<String?>, B<String?>
trait F: A<String?>, B<String>
trait G: <!INCONSISTENT_TYPE_PARAMETER_VALUES!>A<String>, B<String?><!>
trait H: <!INCONSISTENT_TYPE_PARAMETER_VALUES!>A<Int>, B<String><!>
trait I: <!INCONSISTENT_TYPE_PARAMETER_VALUES!>B<Int>, A<String><!>
@@ -0,0 +1,55 @@
package
internal trait A</*0*/ T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait B</*0*/ T> : A<T!> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait C : A<kotlin.String>, B<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait D : B<kotlin.String>, A<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait E : A<kotlin.String?>, B<kotlin.String?> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait F : A<kotlin.String?>, B<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait G : A<kotlin.String>, B<kotlin.String?> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait H : A<kotlin.Int>, B<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal trait I : B<kotlin.Int>, A<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,2 @@
trait ExtMap<K, V> : Map<K, V>
class HashMapEx<K, V> : java.util.HashMap<K, V>(), ExtMap<K, V>
@@ -0,0 +1,67 @@
package
internal trait ExtMap</*0*/ K, /*1*/ V> : kotlin.Map<K, V> {
public abstract override /*1*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun entrySet(): kotlin.Set<kotlin.Map.Entry<K, V>>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun get(/*0*/ key: kotlin.Any?): V?
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun keySet(): kotlin.Set<K>
public abstract override /*1*/ /*fake_override*/ fun size(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public abstract override /*1*/ /*fake_override*/ fun values(): kotlin.Collection<V>
}
internal final class HashMapEx</*0*/ K, /*1*/ V> : java.util.HashMap<K, V>, ExtMap<K, V> {
public constructor HashMapEx</*0*/ K, /*1*/ V>()
invisible_fake final override /*1*/ /*fake_override*/ var entrySet: kotlin.(Mutable)Set<kotlin.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
invisible_fake final override /*1*/ /*fake_override*/ val hashSeed: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var keySet: kotlin.(Mutable)Set<K!>!
invisible_fake final override /*1*/ /*fake_override*/ val loadFactor: kotlin.Float
invisible_fake final override /*1*/ /*fake_override*/ var modCount: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var size: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var table: kotlin.Array<(out) java.util.HashMap.Entry<K!, V!>!>!
invisible_fake final override /*1*/ /*fake_override*/ var threshold: kotlin.Int
invisible_fake final override /*1*/ /*fake_override*/ var useAltHashing: kotlin.Boolean
invisible_fake final override /*1*/ /*fake_override*/ var values: kotlin.(Mutable)Collection<V!>!
invisible_fake open override /*1*/ /*fake_override*/ fun addEntry(/*0*/ p0: kotlin.Int, /*1*/ p1: K!, /*2*/ p2: V!, /*3*/ p3: kotlin.Int): kotlin.Unit
invisible_fake open override /*1*/ /*fake_override*/ fun capacity(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun clear(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any!
public open override /*2*/ /*fake_override*/ fun containsKey(/*0*/ key: kotlin.Any?): kotlin.Boolean
invisible_fake open override /*1*/ /*fake_override*/ fun containsNullValue(): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun containsValue(/*0*/ value: kotlin.Any?): kotlin.Boolean
invisible_fake open override /*1*/ /*fake_override*/ fun createEntry(/*0*/ p0: kotlin.Int, /*1*/ p1: K!, /*2*/ p2: V!, /*3*/ p3: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun entrySet(): kotlin.Set<kotlin.Map.Entry<K, V>>
invisible_fake open override /*1*/ /*fake_override*/ fun entrySet0(): kotlin.(Mutable)Set<kotlin.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun get(/*0*/ key: kotlin.Any?): V?
invisible_fake final override /*1*/ /*fake_override*/ fun getEntry(/*0*/ p0: kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
invisible_fake open override /*1*/ /*fake_override*/ fun getForNullKey(): V!
invisible_fake final override /*1*/ /*fake_override*/ fun hash(/*0*/ p0: kotlin.Any!): kotlin.Int
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
invisible_fake open override /*1*/ /*fake_override*/ fun init(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun isEmpty(): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun keySet(): kotlin.Set<K>
invisible_fake open override /*1*/ /*fake_override*/ fun loadFactor(): kotlin.Float
invisible_fake open override /*1*/ /*fake_override*/ fun newEntryIterator(): kotlin.(Mutable)Iterator<kotlin.(Mutable)Map.(Mutable)Entry<K!, V!>!>!
invisible_fake open override /*1*/ /*fake_override*/ fun newKeyIterator(): kotlin.(Mutable)Iterator<K!>!
invisible_fake open override /*1*/ /*fake_override*/ fun newValueIterator(): kotlin.(Mutable)Iterator<V!>!
public open override /*1*/ /*fake_override*/ fun put(/*0*/ key: K!, /*1*/ value: V!): V!
public open override /*1*/ /*fake_override*/ fun putAll(/*0*/ m: (kotlin.MutableMap<out K!, out V!>..kotlin.Map<out K!, V!>?)): kotlin.Unit
invisible_fake open override /*1*/ /*fake_override*/ fun putAllForCreate(/*0*/ p0: (kotlin.MutableMap<out K!, out V!>..kotlin.Map<out K!, V!>?)): kotlin.Unit
invisible_fake open override /*1*/ /*fake_override*/ fun putForCreate(/*0*/ p0: K!, /*1*/ p1: V!): kotlin.Unit
invisible_fake open override /*1*/ /*fake_override*/ fun putForNullKey(/*0*/ p0: V!): V!
invisible_fake open override /*1*/ /*fake_override*/ fun readObject(/*0*/ p0: java.io.ObjectInputStream!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun remove(/*0*/ key: kotlin.Any!): V!
invisible_fake final override /*1*/ /*fake_override*/ fun removeEntryForKey(/*0*/ p0: kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
invisible_fake final override /*1*/ /*fake_override*/ fun removeMapping(/*0*/ p0: kotlin.Any!): java.util.HashMap.Entry<K!, V!>!
invisible_fake open override /*1*/ /*fake_override*/ fun resize(/*0*/ p0: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun size(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
invisible_fake open override /*1*/ /*fake_override*/ fun transfer(/*0*/ p0: kotlin.Array<(out) java.util.HashMap.Entry<out kotlin.Any?, out kotlin.Any?>!>!, /*1*/ p1: kotlin.Boolean): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun values(): kotlin.Collection<V>
invisible_fake open override /*1*/ /*fake_override*/ fun writeObject(/*0*/ p0: java.io.ObjectOutputStream!): kotlin.Unit
}
@@ -7753,6 +7753,18 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("supertypeArgumentsExplicit.kt")
public void testSupertypeArgumentsExplicit() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/supertypeArgumentsExplicit.kt");
doTest(fileName);
}
@TestMetadata("supertypeTypeArguments.kt")
public void testSupertypeTypeArguments() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/platformTypes/supertypeTypeArguments.kt");
doTest(fileName);
}
@TestMetadata("compiler/testData/diagnostics/tests/platformTypes/commonSupertype")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)