FIR: Avoid reporting inference errors from DelegatedPropertyConstraintPosition
All necessary diagnostics have already been reported through the checkers
This commit is contained in:
committed by
TeamCityServer
parent
43f3fe1ebe
commit
6136526a3a
+4
@@ -272,6 +272,10 @@ private fun ConstraintSystemError.toDiagnostic(
|
|||||||
upperConeType,
|
upperConeType,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
is DelegatedPropertyConstraintPosition<*> -> {
|
||||||
|
errorsToIgnore.add(this)
|
||||||
|
return null
|
||||||
|
}
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.NewConstraintSystem
|
|||||||
import org.jetbrains.kotlin.resolve.calls.inference.buildAbstractResultingSubstitutor
|
import org.jetbrains.kotlin.resolve.calls.inference.buildAbstractResultingSubstitutor
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionMode
|
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionMode
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
import org.jetbrains.kotlin.resolve.calls.inference.model.DelegatedPropertyConstraintPosition
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ class FirDelegatedPropertyInferenceSession(
|
|||||||
val unsubstitutedReturnType = accessor.returnTypeRef.coneType
|
val unsubstitutedReturnType = accessor.returnTypeRef.coneType
|
||||||
|
|
||||||
val substitutedReturnType = substitutor.substituteOrSelf(unsubstitutedReturnType)
|
val substitutedReturnType = substitutor.substituteOrSelf(unsubstitutedReturnType)
|
||||||
commonSystem.addSubtypeConstraint(substitutedReturnType, expectedType!!, SimpleConstraintSystemConstraintPosition)
|
commonSystem.addSubtypeConstraint(substitutedReturnType, expectedType!!, DelegatedPropertyConstraintPosition(callInfo.callSite))
|
||||||
}
|
}
|
||||||
|
|
||||||
addConstraintForThis(commonSystem)
|
addConstraintForThis(commonSystem)
|
||||||
@@ -125,7 +125,7 @@ class FirDelegatedPropertyInferenceSession(
|
|||||||
val unsubstitutedParameterType = accessor.valueParameters.getOrNull(2)?.returnTypeRef?.coneType ?: return
|
val unsubstitutedParameterType = accessor.valueParameters.getOrNull(2)?.returnTypeRef?.coneType ?: return
|
||||||
|
|
||||||
val substitutedReturnType = substitutor.substituteOrSelf(unsubstitutedParameterType)
|
val substitutedReturnType = substitutor.substituteOrSelf(unsubstitutedParameterType)
|
||||||
commonSystem.addSubtypeConstraint(substitutedReturnType, expectedType!!, SimpleConstraintSystemConstraintPosition)
|
commonSystem.addSubtypeConstraint(expectedType!!, substitutedReturnType, DelegatedPropertyConstraintPosition(callInfo.callSite))
|
||||||
}
|
}
|
||||||
|
|
||||||
addConstraintForThis(commonSystem)
|
addConstraintForThis(commonSystem)
|
||||||
@@ -141,7 +141,7 @@ class FirDelegatedPropertyInferenceSession(
|
|||||||
} ?: components.session.builtinTypes.nullableNothingType.type
|
} ?: components.session.builtinTypes.nullableNothingType.type
|
||||||
val valueParameterForThis = (symbol as? FirFunctionSymbol<*>)?.fir?.valueParameters?.firstOrNull() ?: return
|
val valueParameterForThis = (symbol as? FirFunctionSymbol<*>)?.fir?.valueParameters?.firstOrNull() ?: return
|
||||||
val substitutedType = substitutor.substituteOrSelf(valueParameterForThis.returnTypeRef.coneType)
|
val substitutedType = substitutor.substituteOrSelf(valueParameterForThis.returnTypeRef.coneType)
|
||||||
commonSystem.addSubtypeConstraint(typeOfThis, substitutedType, SimpleConstraintSystemConstraintPosition)
|
commonSystem.addSubtypeConstraint(typeOfThis, substitutedType, DelegatedPropertyConstraintPosition(callInfo.callSite))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <T> writeOnlyStubs(call: T): Boolean where T : FirResolvable, T : FirStatement = false
|
override fun <T> writeOnlyStubs(call: T): Boolean where T : FirResolvable, T : FirStatement = false
|
||||||
|
|||||||
+1
-1
@@ -68,7 +68,7 @@ abstract class LambdaArgumentConstraintPosition<T>(val lambda: T) : ConstraintPo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class DelegatedPropertyConstraintPosition<T>(val topLevelCall: T) : ConstraintPosition() {
|
open class DelegatedPropertyConstraintPosition<T>(val topLevelCall: T) : ConstraintPosition() {
|
||||||
override fun toString(): String = "Constraint from call $topLevelCall for delegated property"
|
override fun toString(): String = "Constraint from call $topLevelCall for delegated property"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -16,7 +16,7 @@ class B<R>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var b1: Int by B()
|
var b1: Int by B()
|
||||||
var b2: Int by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>B<Number>()<!>
|
var b2: Int by B<Number>()
|
||||||
|
|
||||||
class C<R>() {
|
class C<R>() {
|
||||||
operator fun getValue(t: Any?, p: KProperty<*>): R = null!!
|
operator fun getValue(t: Any?, p: KProperty<*>): R = null!!
|
||||||
|
|||||||
+2
-2
@@ -3,8 +3,8 @@ package foo
|
|||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
var a5: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>MyProperty1()<!>
|
var a5: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>MyProperty1()<!>
|
||||||
var b5: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>getMyProperty1()<!>
|
var b5: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>getMyProperty1()<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <A, B> getMyProperty1() = MyProperty1<A, B>()
|
fun <A, B> getMyProperty1() = MyProperty1<A, B>()
|
||||||
|
|||||||
+4
-4
@@ -52,12 +52,12 @@ class MyProperty2<T> {
|
|||||||
//--------------------------
|
//--------------------------
|
||||||
|
|
||||||
class A3 {
|
class A3 {
|
||||||
var a3: String by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>MyProperty3()<!>
|
var a3: String by MyProperty3()
|
||||||
var b3: String by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>getMyProperty3()<!>
|
var b3: String by getMyProperty3()
|
||||||
}
|
}
|
||||||
|
|
||||||
var c3: String by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>getMyProperty3()<!>
|
var c3: String by getMyProperty3()
|
||||||
var d3: String by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>MyProperty3()<!>
|
var d3: String by MyProperty3()
|
||||||
|
|
||||||
fun <A> getMyProperty3() = MyProperty3<A>()
|
fun <A> getMyProperty3() = MyProperty3<A>()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ class A {
|
|||||||
val p1 by this
|
val p1 by this
|
||||||
get
|
get
|
||||||
|
|
||||||
var p2 by <!NEW_INFERENCE_ERROR!>this<!>
|
var p2 by this
|
||||||
<!ACCESSOR_FOR_DELEGATED_PROPERTY!>get() = ""<!>
|
<!ACCESSOR_FOR_DELEGATED_PROPERTY!>get() = ""<!>
|
||||||
|
|
||||||
operator fun getValue(a: Any?, p: Any?) = ""
|
operator fun getValue(a: Any?, p: Any?) = ""
|
||||||
|
|||||||
Vendored
+1
-1
@@ -9,5 +9,5 @@ object T2 {
|
|||||||
operator fun <T> Foo<T>.getValue(receiver: String, p: Any?): T = TODO()
|
operator fun <T> Foo<T>.getValue(receiver: String, p: Any?): T = TODO()
|
||||||
|
|
||||||
val String.test1: String by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>delegate<!>()
|
val String.test1: String by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>delegate<!>()
|
||||||
val test2: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>delegate<!>()<!>
|
val test2: String by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>delegate<!>()<!>
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -4,10 +4,10 @@
|
|||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class D {
|
class D {
|
||||||
var c: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR!>Delegate()<!>
|
var c: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate()<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
var cTopLevel: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR!>Delegate()<!>
|
var cTopLevel: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate()<!>
|
||||||
|
|
||||||
class A
|
class A
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@ import kotlin.reflect.KProperty
|
|||||||
open class Base
|
open class Base
|
||||||
class Derived: Base()
|
class Derived: Base()
|
||||||
|
|
||||||
var a: Derived by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>A()<!>
|
var a: Derived by A()
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
operator fun getValue(t: Any?, p: KProperty<*>): Derived {
|
operator fun getValue(t: Any?, p: KProperty<*>): Derived {
|
||||||
|
|||||||
+2
-2
@@ -4,10 +4,10 @@
|
|||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
var a: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR!>Delegate()<!>
|
var a: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate()<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
var aTopLevel: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, NEW_INFERENCE_ERROR!>Delegate()<!>
|
var aTopLevel: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>Delegate()<!>
|
||||||
|
|
||||||
class Delegate {
|
class Delegate {
|
||||||
operator fun getValue(t: Any?, p: KProperty<*>): Int {
|
operator fun getValue(t: Any?, p: KProperty<*>): Int {
|
||||||
|
|||||||
Vendored
+2
-2
@@ -19,6 +19,6 @@ public class J {
|
|||||||
|
|
||||||
// FILE: k.kt
|
// FILE: k.kt
|
||||||
|
|
||||||
var A by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>J.staticNN<!>
|
var A by J.staticNN
|
||||||
var B by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>J.staticN<!>
|
var B by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE, DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!>J.staticN<!>
|
||||||
var C by <!NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>J.staticJ<!>
|
var C by J.staticJ
|
||||||
|
|||||||
@@ -7,6 +7,6 @@ fun interface ReadOnlyProperty<in T, out V> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Problem {
|
class Problem {
|
||||||
val variable: Int by delegate() // delegate returns `ReadOnlyProperty<Problem, {CharSequence & Int}>`
|
val variable: Int by <!DELEGATE_SPECIAL_FUNCTION_RETURN_TYPE_MISMATCH, NEW_INFERENCE_ERROR, NEW_INFERENCE_ERROR!>delegate()<!> // delegate returns `ReadOnlyProperty<Problem, {CharSequence & Int}>`
|
||||||
fun <T : CharSequence> delegate() = null as ReadOnlyProperty<Problem, T>
|
fun <T : CharSequence> delegate() = null as ReadOnlyProperty<Problem, T>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ fun interface ReadOnlyProperty<in T, out V> {
|
|||||||
class Problem {
|
class Problem {
|
||||||
val variable: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!TYPE_MISMATCH!>delegate<!>()<!> // delegate returns `ReadOnlyProperty<Problem, {CharSequence & Int}>`
|
val variable: Int by <!DELEGATE_SPECIAL_FUNCTION_NONE_APPLICABLE!><!TYPE_MISMATCH!>delegate<!>()<!> // delegate returns `ReadOnlyProperty<Problem, {CharSequence & Int}>`
|
||||||
fun <T : CharSequence> delegate() = null <!CAST_NEVER_SUCCEEDS!>as<!> ReadOnlyProperty<Problem, T>
|
fun <T : CharSequence> delegate() = null <!CAST_NEVER_SUCCEEDS!>as<!> ReadOnlyProperty<Problem, T>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user