diff --git a/compiler/testData/diagnostics/tests/InfixModifierApplicability.kt b/compiler/testData/diagnostics/tests/InfixModifierApplicability.kt index c8df26ed36b..e1b5f33fb1b 100644 --- a/compiler/testData/diagnostics/tests/InfixModifierApplicability.kt +++ b/compiler/testData/diagnostics/tests/InfixModifierApplicability.kt @@ -14,11 +14,11 @@ class OkTest { infix fun String.e1(o: String, o2: String? = null) = o infix fun String.e2(o: String = "", o2: String? = null) = o -infix fun e3() {} -infix fun e4(s: String) {} +infix fun e3() {} +infix fun e4(s: String) {} infix fun String.e5() {} infix fun String.e6(a: Int, b: Int) {} -infix fun e7(a: Int, b: Int) {} +infix fun e7(a: Int, b: Int) {} class Example { infix fun e8(s: String, a: Int = 0) {} diff --git a/compiler/testData/diagnostics/testsWithStdLib/ifElseJavaList.txt b/compiler/testData/diagnostics/testsWithStdLib/ifElseJavaList.txt index d09d82faadb..074d576f649 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/ifElseJavaList.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/ifElseJavaList.txt @@ -9,5 +9,5 @@ public/*package*/ open class Java { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String // Static members - public open operator fun get(/*0*/ o: kotlin.collections.(Mutable)List!): kotlin.collections.(Mutable)List! + public open fun get(/*0*/ o: kotlin.collections.(Mutable)List!): kotlin.collections.(Mutable)List! } diff --git a/core/descriptors/src/org/jetbrains/kotlin/util/modifierChecks.kt b/core/descriptors/src/org/jetbrains/kotlin/util/modifierChecks.kt index 8bc8b2d2300..bdeb5c34fab 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/util/modifierChecks.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/util/modifierChecks.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue -import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.* @@ -70,10 +69,11 @@ interface Check { sealed class MemberKindCheck(override val description: String) : Check { object MemberOrExtension : MemberKindCheck("must be a member or an extension function") { override fun check(functionDescriptor: FunctionDescriptor) = - functionDescriptor.isExtension || functionDescriptor.containingDeclaration is ClassDescriptor + functionDescriptor.dispatchReceiverParameter != null || functionDescriptor.extensionReceiverParameter != null } object Member : MemberKindCheck("must be a member function") { - override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.containingDeclaration is ClassDescriptor + override fun check(functionDescriptor: FunctionDescriptor) = + functionDescriptor.dispatchReceiverParameter != null } } @@ -92,13 +92,6 @@ sealed class ValueParameterCountCheck(override val description: String) : Check } } -private object HasDispatchOrExtensionReceiverParameter : Check { - override val description = "must be a member of an extension function" - override fun check(functionDescriptor: FunctionDescriptor): Boolean { - return functionDescriptor.dispatchReceiverParameter != null || functionDescriptor.extensionReceiverParameter != null - } -} - private object NoDefaultAndVarargsCheck : Check { override val description = "should not have varargs or parameters with default values" override fun check(functionDescriptor: FunctionDescriptor) = @@ -238,7 +231,7 @@ object OperatorChecks : AbstractModifierChecks() { object InfixChecks : AbstractModifierChecks() { override val checks = listOf( - Checks(HasDispatchOrExtensionReceiverParameter, SingleValueParameter, NoDefaultAndVarargsCheck)) + Checks(MemberKindCheck.MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck)) } fun FunctionDescriptor.isValidOperator() = isOperator && OperatorChecks.check(this).isSuccess \ No newline at end of file diff --git a/idea/testData/intentions/toInfixCall/noExplicitReceiver.kt b/idea/testData/intentions/toInfixCall/noExplicitReceiver.kt index b5f72929c04..0fd27a072e9 100644 --- a/idea/testData/intentions/toInfixCall/noExplicitReceiver.kt +++ b/idea/testData/intentions/toInfixCall/noExplicitReceiver.kt @@ -1,4 +1,4 @@ // IS_APPLICABLE: false -// ERROR: 'infix' modifier is inapplicable on this function: must be a member of an extension function +// ERROR: 'infix' modifier is inapplicable on this function: must be a member or an extension function infix fun id(s: String) = s -val x = id("0").get(0) \ No newline at end of file +val x = id("0").get(0) diff --git a/idea/testData/intentions/toInfixCall/packageFunctionCall.kt b/idea/testData/intentions/toInfixCall/packageFunctionCall.kt index a19c5472fa4..b4c19e95dd4 100644 --- a/idea/testData/intentions/toInfixCall/packageFunctionCall.kt +++ b/idea/testData/intentions/toInfixCall/packageFunctionCall.kt @@ -1,9 +1,9 @@ // IS_APPLICABLE: false -// ERROR: 'infix' modifier is inapplicable on this function: must be a member of an extension function +// ERROR: 'infix' modifier is inapplicable on this function: must be a member or an extension function package ppp infix fun foo(p: String){} fun main() { ppp.foo("") -} \ No newline at end of file +} diff --git a/idea/testData/intentions/toInfixCall/singlePackageFunctionCall.kt b/idea/testData/intentions/toInfixCall/singlePackageFunctionCall.kt index af53d11507d..959fddee23f 100644 --- a/idea/testData/intentions/toInfixCall/singlePackageFunctionCall.kt +++ b/idea/testData/intentions/toInfixCall/singlePackageFunctionCall.kt @@ -1,6 +1,6 @@ // WITH_RUNTIME // IS_APPLICABLE: false -// ERROR: 'infix' modifier is inapplicable on this function: must be a member of an extension function +// ERROR: 'infix' modifier is inapplicable on this function: must be a member or an extension function package demo @@ -8,4 +8,4 @@ infix fun foo(str: String) = kotlin.io.println(str) fun main() { demo.foo("") -} \ No newline at end of file +} diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt b/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt index b50f6bcc0c8..44ae8829ef4 100644 --- a/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt +++ b/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt @@ -1,5 +1,5 @@ // "Replace with 'newFun(p, this)'" "true" -// ERROR: 'infix' modifier is inapplicable on this function: must be a member of an extension function +// ERROR: 'infix' modifier is inapplicable on this function: must be a member or an extension function @Deprecated("", ReplaceWith("newFun(p, this)")) infix fun String.oldFun(p: Int) { diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt.after index bf49c4823b7..a39016a8161 100644 --- a/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt.after +++ b/idea/testData/quickfix/deprecatedSymbolUsage/infixCall.kt.after @@ -1,5 +1,5 @@ // "Replace with 'newFun(p, this)'" "true" -// ERROR: 'infix' modifier is inapplicable on this function: must be a member of an extension function +// ERROR: 'infix' modifier is inapplicable on this function: must be a member or an extension function @Deprecated("", ReplaceWith("newFun(p, this)")) infix fun String.oldFun(p: Int) {