diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ShadowedExtensionChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ShadowedExtensionChecker.kt index b9776c593b1..487538d0ba9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ShadowedExtensionChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ShadowedExtensionChecker.kt @@ -91,6 +91,7 @@ class ShadowedExtensionChecker(val typeSpecificityComparator: TypeSpecificityCom if (extension.valueParameters.size != member.valueParameters.size) return false if (extension.varargParameterPosition() != member.varargParameterPosition()) return false if (extension.isOperator && !member.isOperator) return false + if (extension.isInfix && !member.isInfix) return false val extensionSignature = FlatSignature.createForPossiblyShadowedExtension(extension) val memberSignature = FlatSignature.createFromCallableDescriptor(member) diff --git a/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/BinaryExpressionIdentifier.kt b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/BinaryExpressionIdentifier.kt index 8edf3e80777..8d07b8b532a 100644 --- a/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/BinaryExpressionIdentifier.kt +++ b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/BinaryExpressionIdentifier.kt @@ -1,6 +1,6 @@ // !CHECK_TYPE -infix fun Int.compareTo(o: Int) = 0 +infix fun Int.compareTo(o: Int) = 0 fun foo(a: Number): Int { val result = (a as Int) compareTo a diff --git a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.kt b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.kt new file mode 100644 index 00000000000..88e3beff360 --- /dev/null +++ b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.kt @@ -0,0 +1,7 @@ +interface IFoo { + fun foo(i: Int): Int + infix fun bar(i: Int): Int +} + +infix fun IFoo.foo(i: Int) = i +infix fun IFoo.bar(i: Int) = i \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.txt b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.txt new file mode 100644 index 00000000000..7fcbe820c58 --- /dev/null +++ b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.txt @@ -0,0 +1,12 @@ +package + +public infix fun IFoo.bar(/*0*/ i: kotlin.Int): kotlin.Int +public infix fun IFoo.foo(/*0*/ i: kotlin.Int): kotlin.Int + +public interface IFoo { + public abstract infix fun bar(/*0*/ i: kotlin.Int): kotlin.Int + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(/*0*/ i: kotlin.Int): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.kt b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.kt index 35e3f25596d..8c4c3e74ebe 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.kt +++ b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.kt @@ -1,5 +1,7 @@ interface Test { fun invoke() + operator fun invoke(i: Int): Int } -operator fun Test.invoke() {} \ No newline at end of file +operator fun Test.invoke() {} +operator fun Test.invoke(i: Int) = i \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.txt b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.txt index c77f47e570b..fc13a509292 100644 --- a/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.txt +++ b/compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/operatorExtensionVsNonOperatorMember.txt @@ -1,10 +1,12 @@ package public operator fun Test.invoke(): kotlin.Unit +public operator fun Test.invoke(/*0*/ i: kotlin.Int): kotlin.Int public interface Test { 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 abstract fun invoke(): kotlin.Unit + public abstract operator fun invoke(/*0*/ i: kotlin.Int): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index ab50fbb2236..2ee280d7721 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -16035,6 +16035,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("infixExtensionVsNonInfixMember.kt") + public void testInfixExtensionVsNonInfixMember() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/infixExtensionVsNonInfixMember.kt"); + doTest(fileName); + } + @TestMetadata("localExtensionShadowedByMember.kt") public void testLocalExtensionShadowedByMember() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/redeclarations/shadowedExtension/localExtensionShadowedByMember.kt");