[NI] Fix checks for infix/operator conventions
This commit is contained in:
+4
-6
@@ -373,9 +373,8 @@ internal object EagerResolveOfCallableReferences : ResolutionPart() {
|
|||||||
internal object CheckInfixResolutionPart : ResolutionPart() {
|
internal object CheckInfixResolutionPart : ResolutionPart() {
|
||||||
override fun KotlinResolutionCandidate.process(workIndex: Int) {
|
override fun KotlinResolutionCandidate.process(workIndex: Int) {
|
||||||
val candidateDescriptor = resolvedCall.candidateDescriptor
|
val candidateDescriptor = resolvedCall.candidateDescriptor
|
||||||
if (callComponents.statelessCallbacks.isInfixCall(kotlinCall) &&
|
if (candidateDescriptor !is FunctionDescriptor) return
|
||||||
(candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isInfix)
|
if (!candidateDescriptor.isInfix && callComponents.statelessCallbacks.isInfixCall(kotlinCall)) {
|
||||||
) {
|
|
||||||
addDiagnostic(InfixCallNoInfixModifier)
|
addDiagnostic(InfixCallNoInfixModifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -384,9 +383,8 @@ internal object CheckInfixResolutionPart : ResolutionPart() {
|
|||||||
internal object CheckOperatorResolutionPart : ResolutionPart() {
|
internal object CheckOperatorResolutionPart : ResolutionPart() {
|
||||||
override fun KotlinResolutionCandidate.process(workIndex: Int) {
|
override fun KotlinResolutionCandidate.process(workIndex: Int) {
|
||||||
val candidateDescriptor = resolvedCall.candidateDescriptor
|
val candidateDescriptor = resolvedCall.candidateDescriptor
|
||||||
if (callComponents.statelessCallbacks.isOperatorCall(kotlinCall) &&
|
if (candidateDescriptor !is FunctionDescriptor) return
|
||||||
(candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isOperator)
|
if (!candidateDescriptor.isOperator && callComponents.statelessCallbacks.isOperatorCall(kotlinCall)) {
|
||||||
) {
|
|
||||||
addDiagnostic(InvokeConventionCallNoOperatorModifier)
|
addDiagnostic(InvokeConventionCallNoOperatorModifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -196,8 +196,6 @@ class SimpleCandidateFactory(
|
|||||||
enum class KotlinCallKind(vararg resolutionPart: ResolutionPart) {
|
enum class KotlinCallKind(vararg resolutionPart: ResolutionPart) {
|
||||||
VARIABLE(
|
VARIABLE(
|
||||||
CheckVisibility,
|
CheckVisibility,
|
||||||
CheckInfixResolutionPart,
|
|
||||||
CheckOperatorResolutionPart,
|
|
||||||
CheckSuperExpressionCallPart,
|
CheckSuperExpressionCallPart,
|
||||||
NoTypeArguments,
|
NoTypeArguments,
|
||||||
NoArguments,
|
NoArguments,
|
||||||
@@ -210,6 +208,7 @@ enum class KotlinCallKind(vararg resolutionPart: ResolutionPart) {
|
|||||||
CheckInstantiationOfAbstractClass,
|
CheckInstantiationOfAbstractClass,
|
||||||
CheckVisibility,
|
CheckVisibility,
|
||||||
CheckInfixResolutionPart,
|
CheckInfixResolutionPart,
|
||||||
|
CheckOperatorResolutionPart,
|
||||||
CheckSuperExpressionCallPart,
|
CheckSuperExpressionCallPart,
|
||||||
MapTypeArguments,
|
MapTypeArguments,
|
||||||
MapArguments,
|
MapArguments,
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ class MyClass2 {}
|
|||||||
|
|
||||||
fun test(mc1: MyClass, mc2: MyClass2) {
|
fun test(mc1: MyClass, mc2: MyClass2) {
|
||||||
val (<!OPERATOR_MODIFIER_REQUIRED!>a<!>, b) = <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>mc1<!>
|
val (<!OPERATOR_MODIFIER_REQUIRED!>a<!>, b) = <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>mc1<!>
|
||||||
val (c) = <!COMPONENT_FUNCTION_AMBIGUITY!>mc2<!>
|
val (c) = <!NI;COMPONENT_FUNCTION_MISSING, OI;COMPONENT_FUNCTION_AMBIGUITY!>mc2<!>
|
||||||
|
|
||||||
//a,b,c are error types
|
//a,b,c are error types
|
||||||
use(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a<!>, <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>, <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>c<!>)
|
use(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a<!>, <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>, <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>c<!>)
|
||||||
|
|||||||
+1
-2
@@ -1,4 +1,3 @@
|
|||||||
// !WITH_NEW_INFERENCE
|
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
class Example
|
class Example
|
||||||
@@ -22,7 +21,7 @@ fun a() {
|
|||||||
val b = Example()
|
val b = Example()
|
||||||
|
|
||||||
consumeString(a + b)
|
consumeString(a + b)
|
||||||
consumeInt(<!NI;TYPE_MISMATCH!>a <!NI;OPERATOR_MODIFIER_REQUIRED!>-<!> b<!>)
|
consumeInt(a - b)
|
||||||
|
|
||||||
consumeString(a plus b)
|
consumeString(a plus b)
|
||||||
consumeInt(a minus b)
|
consumeInt(a minus b)
|
||||||
|
|||||||
+2
-3
@@ -1,4 +1,3 @@
|
|||||||
// !WITH_NEW_INFERENCE
|
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
@@ -20,7 +19,7 @@ fun a() {
|
|||||||
val b = Example()
|
val b = Example()
|
||||||
|
|
||||||
a + b
|
a + b
|
||||||
a <!NI;OPERATOR_MODIFIER_REQUIRED!>-<!> b
|
a - b
|
||||||
a * b
|
a * b
|
||||||
a <!OPERATOR_MODIFIER_REQUIRED!>/<!> b
|
a <!OPERATOR_MODIFIER_REQUIRED!>/<!> b
|
||||||
|
|
||||||
@@ -31,7 +30,7 @@ fun a() {
|
|||||||
|
|
||||||
with (Example()) {
|
with (Example()) {
|
||||||
consumeInt(this + a)
|
consumeInt(this + a)
|
||||||
consumeString(<!NI;TYPE_MISMATCH!>this <!NI;OPERATOR_MODIFIER_REQUIRED!>-<!> b<!>)
|
consumeString(this - b)
|
||||||
consumeInt(this * a)
|
consumeInt(this * a)
|
||||||
consumeInt(this <!OPERATOR_MODIFIER_REQUIRED!>/<!> b)
|
consumeInt(this <!OPERATOR_MODIFIER_REQUIRED!>/<!> b)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// !WITH_NEW_INFERENCE
|
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER, -EXTENSION_SHADOWED_BY_MEMBER
|
||||||
|
|
||||||
open class Example {
|
open class Example {
|
||||||
@@ -29,14 +28,14 @@ fun test() {
|
|||||||
var a = Example()
|
var a = Example()
|
||||||
val b = Example()
|
val b = Example()
|
||||||
|
|
||||||
consumeString(<!NI;TYPE_MISMATCH!><!NI;OPERATOR_MODIFIER_REQUIRED!>a<!>()<!>)
|
consumeString(a())
|
||||||
consumeString(<!NI;OPERATOR_MODIFIER_REQUIRED, NI;TYPE_MISMATCH!>a[1]<!>)
|
consumeString(a[1])
|
||||||
|
|
||||||
val (<!NI;OPERATOR_MODIFIER_REQUIRED!>x<!>, <!NI;OPERATOR_MODIFIER_REQUIRED!>y<!>) = Example()
|
val (x, y) = Example()
|
||||||
consumeString(<!NI;TYPE_MISMATCH!>x<!>)
|
consumeString(x)
|
||||||
consumeString(<!NI;TYPE_MISMATCH!>y<!>)
|
consumeString(y)
|
||||||
|
|
||||||
consumeExample2(<!NI;TYPE_MISMATCH!><!NI;OPERATOR_MODIFIER_REQUIRED!>++<!>a<!>)
|
consumeExample2(++a)
|
||||||
|
|
||||||
consumeString(a plus b)
|
consumeString(a plus b)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// !WITH_NEW_INFERENCE
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
operator fun get(x: Int): Int = x
|
operator fun get(x: Int): Int = x
|
||||||
fun set(<!UNUSED_PARAMETER!>x<!>: Int, <!UNUSED_PARAMETER!>y<!>: Int) {} // no `operator` modifier
|
fun set(<!UNUSED_PARAMETER!>x<!>: Int, <!UNUSED_PARAMETER!>y<!>: Int) {} // no `operator` modifier
|
||||||
@@ -5,7 +7,7 @@ class A {
|
|||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
val a = A()
|
val a = A()
|
||||||
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!>++
|
<!OPERATOR_MODIFIER_REQUIRED!>a<!NI;NO_SET_METHOD!>[1]<!><!>++
|
||||||
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!> += 3
|
<!OPERATOR_MODIFIER_REQUIRED!>a<!NI;NO_SET_METHOD!>[1]<!><!> += 3
|
||||||
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!> = a[1] + 3
|
<!OPERATOR_MODIFIER_REQUIRED!>a[1]<!> = a[1] + 3
|
||||||
}
|
}
|
||||||
+3
-2
@@ -1,10 +1,11 @@
|
|||||||
|
// !WITH_NEW_INFERENCE
|
||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
fun Int.invoke(i: Int, a: Any) {}
|
fun Int.invoke(i: Int, a: Any) {}
|
||||||
fun Int.invoke(a: Any, i: Int) {}
|
fun Int.invoke(a: Any, i: Int) {}
|
||||||
|
|
||||||
fun foo(i: Int) {
|
fun foo(i: Int) {
|
||||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>i<!>(1, 1)
|
<!NI;NONE_APPLICABLE, OI;OVERLOAD_RESOLUTION_AMBIGUITY!>i<!>(1, 1)
|
||||||
|
|
||||||
<!OVERLOAD_RESOLUTION_AMBIGUITY!>5<!>(1, 2)
|
<!NI;NONE_APPLICABLE, OI;OVERLOAD_RESOLUTION_AMBIGUITY!>5<!>(1, 2)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user