From aebcb614028a30af44484c55bdedaaeabfedfac6 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Thu, 29 Mar 2018 11:35:25 +0300 Subject: [PATCH] Resolve elements in chain of qualifier expression without expected type Consider call chain `foo.bar.baz()` which has expected type `Int` Elements `foo` and `bar` doesn't have expected type `Int`, this is especially important in NI, because we use expected type for candidate applicability --- .../resolve/calls/CallExpressionResolver.kt | 2 +- .../referenceWithTheSameNameAsPackage.kt | 23 +++++++++++++++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 6 +++++ .../codegen/BlackBoxCodegenTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 6 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 6 +++++ 6 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt index 3c41fc42f7e..5f6fb60e50d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/CallExpressionResolver.kt @@ -413,7 +413,7 @@ class CallExpressionResolver( val currentContext = context.replaceExpectedType(NO_EXPECTED_TYPE).replaceContextDependency(INDEPENDENT) val trace = currentContext.trace - val elementChain = expression.elementChain(context) + val elementChain = expression.elementChain(currentContext) val firstReceiver = elementChain.first().receiver var receiverTypeInfo = when (trace.get(BindingContext.QUALIFIER, firstReceiver)) { diff --git a/compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt b/compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt new file mode 100644 index 00000000000..99387957c24 --- /dev/null +++ b/compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt @@ -0,0 +1,23 @@ +// !LANGUAGE: +NewInference +// WITH_RUNTIME + +// FILE: messages/foo.kt + +package messages + +fun foo() {} + +// FILE: sample.kt + +class Test { + val messages = arrayListOf() + + fun test(): Boolean { + return messages.any { it == "foo" } + } +} + +fun box(): String { + val result = Test().test() + return if (result) "faile" else "OK" +} \ No newline at end of file diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index a9aa14c20e2..c6d8ff81f42 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -14086,6 +14086,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/privateTopLevelPropAndVarInInner.kt"); doTest(fileName); } + + @TestMetadata("referenceWithTheSameNameAsPackage.kt") + public void testReferenceWithTheSameNameAsPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/platformTypes") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index e5d937b8d5b..f6278348742 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -14086,6 +14086,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/privateTopLevelPropAndVarInInner.kt"); doTest(fileName); } + + @TestMetadata("referenceWithTheSameNameAsPackage.kt") + public void testReferenceWithTheSameNameAsPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/platformTypes") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index ffe2e3853be..4e3f17f3dea 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14086,6 +14086,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/privateTopLevelPropAndVarInInner.kt"); doTest(fileName); } + + @TestMetadata("referenceWithTheSameNameAsPackage.kt") + public void testReferenceWithTheSameNameAsPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/platformTypes") diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 9d802c0bad6..d05a1b62df8 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -16701,6 +16701,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/privateTopLevelPropAndVarInInner.kt"); doTest(fileName); } + + @TestMetadata("referenceWithTheSameNameAsPackage.kt") + public void testReferenceWithTheSameNameAsPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/package/referenceWithTheSameNameAsPackage.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/platformTypes")