From c75a7df92692f7345eb280839fdcf8732eed8b76 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 4 Mar 2015 19:36:13 +0300 Subject: [PATCH] Put reference to default object in default object extenstion call --- .../resolve/scopes/receivers/Qualifier.kt | 5 ++- ...sQualifierForNestedClassConstructorCall.kt | 17 +++++++++ ...ultObjectAsExtensionReceiverForFunction.kt | 17 +++++++++ ...ultObjectAsExtensionReceiverForProperty.kt | 17 +++++++++ ...ReceiverForExtensionFunctionOnSuperType.kt | 19 ++++++++++ ...tAsReceiverForMemberPropertyInSuperType.kt | 19 ++++++++++ .../DefaultObjectInShortReferenceFormCall.kt | 15 ++++++++ .../ReferenceResolveTestGenerated.java | 36 +++++++++++++++++++ 8 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt create mode 100644 idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt create mode 100644 idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt create mode 100644 idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt create mode 100644 idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt create mode 100644 idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt index 262541df8e3..e1bb4ea35d7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt @@ -170,7 +170,10 @@ private fun QualifierReceiver.resolveReferenceTarget( return packageView } - if (classifier is ClassDescriptor && classifier.classObjectDescriptor == selectorContainer) { + val isCallableWithReceiver = selector is CallableDescriptor && + (selector.getDispatchReceiverParameter() != null || selector.getExtensionReceiverParameter() != null) + + if (classifier is ClassDescriptor && classifier.classObjectDescriptor != null && isCallableWithReceiver) { if (classifier.getDefaultObjectDescriptor() != null) { context.trace.record(SHORT_REFERENCE_TO_DEFAULT_OBJECT, referenceExpression, classifier) } diff --git a/idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt b/idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt new file mode 100644 index 00000000000..3aca717eb9a --- /dev/null +++ b/idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt @@ -0,0 +1,17 @@ +package t + +class A { + class object Default { + + } + + class B +} + +fun test() { + A.B() +} + + +// REF: (t).A + diff --git a/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt b/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt new file mode 100644 index 00000000000..6916a0869ea --- /dev/null +++ b/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt @@ -0,0 +1,17 @@ +package t + +class A { + class object Default { + + } +} + +fun A.Default.foo() {} + +fun test() { + A.foo() +} + + +// REF: class object of (t).A + diff --git a/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt b/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt new file mode 100644 index 00000000000..6e05dfc0d4a --- /dev/null +++ b/idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt @@ -0,0 +1,17 @@ +package t + +class A { + class object B { + + } +} + +val A.B.bar : Int get() = 1 + +fun test() { + A.bar +} + + +// REF: class object of (t).A + diff --git a/idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt b/idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt new file mode 100644 index 00000000000..556034c3ffb --- /dev/null +++ b/idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt @@ -0,0 +1,19 @@ +package t + +trait Trait + +open class A { + class object Default : Trait { + + } +} + +fun Trait.foo() {} + +fun test() { + A.foo() +} + + +// REF: class object of (t).A + diff --git a/idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt b/idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt new file mode 100644 index 00000000000..e728c264984 --- /dev/null +++ b/idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt @@ -0,0 +1,19 @@ +package t + +trait Trait { + val some : Int get() = 1 +} + +open class A { + class object Default : Trait { + + } +} + +fun test() { + A.some +} + + +// REF: class object of (t).A + diff --git a/idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt b/idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt new file mode 100644 index 00000000000..f18a985e147 --- /dev/null +++ b/idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt @@ -0,0 +1,15 @@ +package t + +class A { + class object Default { + fun test() + } +} + +fun test() { + A.test() +} + + +// REF: class object of (t).A + diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java index bb6bde280d4..123a18707aa 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java @@ -95,6 +95,12 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest(fileName); } + @TestMetadata("ClassQualifierForNestedClassConstructorCall.kt") + public void testClassQualifierForNestedClassConstructorCall() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt"); + doTest(fileName); + } + @TestMetadata("ClassReferenceInImport.kt") public void testClassReferenceInImport() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/ClassReferenceInImport.kt"); @@ -113,6 +119,36 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest(fileName); } + @TestMetadata("DefaultObjectAsExtensionReceiverForFunction.kt") + public void testDefaultObjectAsExtensionReceiverForFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt"); + doTest(fileName); + } + + @TestMetadata("DefaultObjectAsExtensionReceiverForProperty.kt") + public void testDefaultObjectAsExtensionReceiverForProperty() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt"); + doTest(fileName); + } + + @TestMetadata("DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt") + public void testDefaultObjectAsReceiverForExtensionFunctionOnSuperType() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt"); + doTest(fileName); + } + + @TestMetadata("DefaultObjectAsReceiverForMemberPropertyInSuperType.kt") + public void testDefaultObjectAsReceiverForMemberPropertyInSuperType() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt"); + doTest(fileName); + } + + @TestMetadata("DefaultObjectInShortReferenceFormCall.kt") + public void testDefaultObjectInShortReferenceFormCall() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt"); + doTest(fileName); + } + @TestMetadata("EnumValues.kt") public void testEnumValues() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/EnumValues.kt");