From e7ba59b2094b90dba1bd0a9c9906082a91092a06 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 18 Nov 2014 16:45:00 +0300 Subject: [PATCH] Partial body resolve: correct handing of this qualifier --- .../lang/resolve/lazy/PartialBodyResolveFilter.kt | 5 +++-- .../partialBodyResolve/ThisQualifiedAutoCast.dump | 2 ++ .../partialBodyResolve/ThisQualifiedAutoCast.kt | 12 ++++++++++++ .../jet/resolve/PartialBodyResolveTestGenerated.java | 6 ++++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.dump create mode 100644 idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.kt diff --git a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt index c0e0ed5f113..d1f45580dc3 100644 --- a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt +++ b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/PartialBodyResolveFilter.kt @@ -316,14 +316,15 @@ class PartialBodyResolveFilter(elementToResolve: JetElement, private val body: J private fun PsiElement.isStatement() = this is JetExpression && getParent() is JetBlockExpression - //TODO: this.a private fun JetExpression.smartCastedExpressionName(): String? { return when (this) { is JetSimpleNameExpression -> this.getReferencedName() is JetQualifiedExpression -> { val selectorName = getSelectorExpression().smartCastedExpressionName() ?: return null - val receiverName = getReceiverExpression().smartCastedExpressionName() ?: return null + val receiver = getReceiverExpression() + if (receiver is JetThisExpression) return selectorName + val receiverName = receiver.smartCastedExpressionName() ?: return null return selectorName + "." + receiverName } diff --git a/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.dump b/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.dump new file mode 100644 index 00000000000..00e26f8caa3 --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.dump @@ -0,0 +1,2 @@ +Resolve target: val s: kotlin.String? smart-casted to kotlin.String +Skipped statements: diff --git a/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.kt b/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.kt new file mode 100644 index 00000000000..685484f2f0e --- /dev/null +++ b/idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.kt @@ -0,0 +1,12 @@ +class C(val s: String?) { + fun foo(p: Boolean) { + if (p) { + print(s!!) + } + else { + print(this.s!!) + } + + s.size + } +} diff --git a/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java index f420d6c3b9f..aa6b6579153 100644 --- a/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/PartialBodyResolveTestGenerated.java @@ -210,6 +210,12 @@ public class PartialBodyResolveTestGenerated extends AbstractPartialBodyResolveT doTest(fileName); } + @TestMetadata("ThisQualifiedAutoCast.kt") + public void testThisQualifiedAutoCast() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/ThisQualifiedAutoCast.kt"); + doTest(fileName); + } + @TestMetadata("While.kt") public void testWhile() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/partialBodyResolve/While.kt");