From abb18b7bb99b156c5770e9a5410cfed05a8740a3 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Tue, 25 Aug 2015 17:29:03 +0300 Subject: [PATCH] KT-8861 Package name vs property with wrong receiver #KT-8861 Fixed --- .../resolve/calls/CallExpressionResolver.java | 2 +- .../tests/resolve/wrongReceiver.kt | 20 +++++++++++++++++++ .../tests/resolve/wrongReceiver.txt | 15 ++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt create mode 100644 compiler/testData/diagnostics/tests/resolve/wrongReceiver.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.java index 891b15f369e..713d7c59072 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.java @@ -120,7 +120,7 @@ public class CallExpressionResolver { // if the expression is a receiver in a qualified expression, it should be resolved after the selector is resolved boolean isLHSOfDot = JetPsiUtil.isLHSOfDot(nameExpression); - if (!resolutionResult.isNothing()) { + if (!resolutionResult.isNothing() && resolutionResult.getResultCode() != OverloadResolutionResults.Code.CANDIDATES_WITH_WRONG_RECEIVER) { boolean isQualifier = isLHSOfDot && resolutionResult.isSingleResult() && resolutionResult.getResultingDescriptor() instanceof FakeCallableDescriptorForObject; if (!isQualifier) { diff --git a/compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt b/compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt new file mode 100644 index 00000000000..c311a1751aa --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt @@ -0,0 +1,20 @@ +package some + +class A() + +val Int.some: Int get() = 4 +val Int.foo: Int get() = 4 + +fun Int.extFun() = 4 + +fun String.test() { + some + some.A() + "".some + + foo + "".foo + + extFun() + "".extFun() +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/resolve/wrongReceiver.txt b/compiler/testData/diagnostics/tests/resolve/wrongReceiver.txt new file mode 100644 index 00000000000..f7e52c311cd --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/wrongReceiver.txt @@ -0,0 +1,15 @@ +package + +package some { + internal val kotlin.Int.foo: kotlin.Int + internal val kotlin.Int.some: kotlin.Int + internal fun kotlin.Int.extFun(): kotlin.Int + internal fun kotlin.String.test(): kotlin.Unit + + internal final class A { + public constructor A() + 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 open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 8e4fe0175a2..9a0bd266c0b 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -11637,6 +11637,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("wrongReceiver.kt") + public void testWrongReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/resolve/wrongReceiver.kt"); + doTest(fileName); + } + @TestMetadata("compiler/testData/diagnostics/tests/resolve/invoke") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)