Introduce warnings reporting by missed constraints because of incorrect optimization in the constraints processor
This commit is contained in:
+1
-1
@@ -4,5 +4,5 @@
|
||||
class Foo<T : Enum<T>>(val values: Array<T>)
|
||||
|
||||
fun foo(x: Array<out Enum<*>>) {
|
||||
val y = Foo(<!ARGUMENT_TYPE_MISMATCH!>x<!>)
|
||||
val y = Foo(<!ARGUMENT_TYPE_MISMATCH{LT}!>x<!>)
|
||||
}
|
||||
|
||||
-1
@@ -1,4 +1,3 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// SKIP_JAVAC
|
||||
|
||||
// FILE: MySettings.java
|
||||
|
||||
Vendored
+1
-2
@@ -1,4 +1,3 @@
|
||||
// !WITH_NEW_INFERENCE
|
||||
// SKIP_JAVAC
|
||||
|
||||
// FILE: MySettings.java
|
||||
@@ -28,5 +27,5 @@ abstract class MySettingsListener<S extends MyComparableSettings> {}
|
||||
fun test() {
|
||||
val a = MySettings.getSettings()
|
||||
a.getLinkedProjectsSettings()
|
||||
a.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE{OI}, TYPE_INFERENCE_UPPER_BOUND_VIOLATED{OI}!>linkedProjectsSettings<!>
|
||||
a.linkedProjectsSettings
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
|
||||
|
||||
@@ -5,5 +6,5 @@ fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
|
||||
|
||||
fun reproduce() {
|
||||
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
|
||||
createMap(<!ARGUMENT_TYPE_MISMATCH!>enumClass<!>)
|
||||
createMap(enumClass)
|
||||
}
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
|
||||
|
||||
@@ -5,5 +6,5 @@ fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
|
||||
|
||||
fun reproduce() {
|
||||
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
|
||||
createMap(enumClass)
|
||||
createMap(<!TYPE_MISMATCH_WARNING("Enum<in Enum<*>>; Enum<*>")!>enumClass<!>)
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
|
||||
|
||||
fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
|
||||
|
||||
fun reproduce() {
|
||||
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
|
||||
createMap(<!ARGUMENT_TYPE_MISMATCH!>enumClass<!>)
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
|
||||
// WITH_RUNTIME
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -CAST_NEVER_SUCCEEDS
|
||||
|
||||
fun <E : Enum<E>> createMap(enumClass: Class<E>) {}
|
||||
|
||||
fun reproduce() {
|
||||
val enumClass: Class<Enum<*>> = "any" as Class<Enum<*>>
|
||||
createMap(<!TYPE_MISMATCH, TYPE_MISMATCH!>enumClass<!>)
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ E : kotlin.Enum<E>> createMap(/*0*/ enumClass: java.lang.Class<E>): kotlin.Unit
|
||||
public fun reproduce(): kotlin.Unit
|
||||
@@ -0,0 +1,13 @@
|
||||
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
|
||||
|
||||
sealed class Subtype<A1, B1> {
|
||||
abstract fun cast(value: A1): B1
|
||||
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
|
||||
override fun cast(value: A2): B2 = value
|
||||
}
|
||||
}
|
||||
|
||||
fun <A, B> unsafeCast(value: A): B {
|
||||
val proof: Subtype<A, B> = <!UPPER_BOUND_VIOLATED!>Subtype.Trivial()<!>
|
||||
return proof.cast(value)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// !LANGUAGE: -ProperTypeInferenceConstraintsProcessing
|
||||
|
||||
sealed class Subtype<A1, B1> {
|
||||
abstract fun cast(value: A1): B1
|
||||
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
|
||||
override fun cast(value: A2): B2 = value
|
||||
}
|
||||
}
|
||||
|
||||
fun <A, B> unsafeCast(value: A): B {
|
||||
val proof: Subtype<A, B> = Subtype.<!TYPE_MISMATCH_WARNING("B; A")!>Trivial()<!>
|
||||
return proof.cast(value)
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ A, /*1*/ B> unsafeCast(/*0*/ value: A): B
|
||||
|
||||
public sealed class Subtype</*0*/ A1, /*1*/ B1> {
|
||||
protected constructor Subtype</*0*/ A1, /*1*/ B1>()
|
||||
public abstract fun cast(/*0*/ value: A1): B1
|
||||
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
|
||||
|
||||
public final class Trivial</*0*/ A2 : B2, /*1*/ B2> : Subtype<A2, B2> {
|
||||
public constructor Trivial</*0*/ A2 : B2, /*1*/ B2>()
|
||||
public open override /*1*/ fun cast(/*0*/ value: A2): B2
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
|
||||
|
||||
sealed class Subtype<A1, B1> {
|
||||
abstract fun cast(value: A1): B1
|
||||
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
|
||||
override fun cast(value: A2): B2 = value
|
||||
}
|
||||
}
|
||||
|
||||
fun <A, B> unsafeCast(value: A): B {
|
||||
val proof: Subtype<A, B> = <!UPPER_BOUND_VIOLATED!>Subtype.Trivial()<!>
|
||||
return proof.cast(value)
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// !LANGUAGE: +ProperTypeInferenceConstraintsProcessing
|
||||
|
||||
sealed class Subtype<A1, B1> {
|
||||
abstract fun cast(value: A1): B1
|
||||
class Trivial<A2 : B2, B2> : Subtype<A2, B2>() {
|
||||
override fun cast(value: A2): B2 = value
|
||||
}
|
||||
}
|
||||
|
||||
fun <A, B> unsafeCast(value: A): B {
|
||||
val proof: Subtype<A, B> = Subtype.<!TYPE_MISMATCH, TYPE_MISMATCH!>Trivial()<!>
|
||||
return proof.cast(value)
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ A, /*1*/ B> unsafeCast(/*0*/ value: A): B
|
||||
|
||||
public sealed class Subtype</*0*/ A1, /*1*/ B1> {
|
||||
protected constructor Subtype</*0*/ A1, /*1*/ B1>()
|
||||
public abstract fun cast(/*0*/ value: A1): B1
|
||||
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
|
||||
|
||||
public final class Trivial</*0*/ A2 : B2, /*1*/ B2> : Subtype<A2, B2> {
|
||||
public constructor Trivial</*0*/ A2 : B2, /*1*/ B2>()
|
||||
public open override /*1*/ fun cast(/*0*/ value: A2): B2
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user