[NI] Update filtering of constraints with equal types

Make check for synthetic nullability constraint status before skipping
new constraint with nonunique type.
This commit is contained in:
Pavel Kirpichenkov
2020-01-15 17:01:44 +03:00
parent 2896642f94
commit 0d393e3fd7
4 changed files with 29 additions and 12 deletions
@@ -49,7 +49,11 @@ class MutableVariableWithConstraints(
// return new actual constraint, if this constraint is new
fun addConstraint(constraint: Constraint): Constraint? {
val previousConstraintWithSameType = constraints.filter { it.typeHashCode == constraint.typeHashCode && it.type == constraint.type }
val previousConstraintWithSameType = constraints.filter { oldConstraint ->
oldConstraint.typeHashCode == constraint.typeHashCode
&& oldConstraint.type == constraint.type
&& oldConstraint.isNullabilityConstraint == constraint.isNullabilityConstraint
}
if (previousConstraintWithSameType.any { previous -> newConstraintIsUseless(previous, constraint) })
return null
@@ -1,9 +1,16 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun <M> make(): M? = null
fun <I> id(arg: I): I = arg
fun <S> select(vararg args: S): S = TODO()
val v = id(
make()
)
fun test() {
id(
make()
)
select(make(), null)
if (true) make() else TODO()
}
@@ -1,9 +1,16 @@
// !LANGUAGE: +NewInference
// !WITH_NEW_INFERENCE
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun <M> make(): M? = null
fun <I> id(arg: I): I = arg
fun <S> select(vararg args: S): S = TODO()
val v = <!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>make<!>()
)
fun test() {
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(
<!NI;NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>make<!>()
)
select(make(), null)
<!OI;TYPE_INFERENCE_FAILED_ON_SPECIAL_CONSTRUCT!>if<!> (true) <!OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>make()<!> else TODO()
}
@@ -1,7 +1,6 @@
package
public val v: [ERROR : Type for id(
make()
)]
public fun </*0*/ I> id(/*0*/ arg: I): I
public fun </*0*/ M> make(): M?
public fun </*0*/ S> select(/*0*/ vararg args: S /*kotlin.Array<out S>*/): S
public fun test(): kotlin.Unit