Put reference to default object in default object extenstion call

This commit is contained in:
Nikolay Krasko
2015-03-04 19:36:13 +03:00
parent 5ae9bb600c
commit c75a7df926
8 changed files with 144 additions and 1 deletions
@@ -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)
}
@@ -0,0 +1,17 @@
package t
class A {
class object Default {
}
class B
}
fun test() {
<caret>A.B()
}
// REF: (t).A
@@ -0,0 +1,17 @@
package t
class A {
class object Default {
}
}
fun A.Default.foo() {}
fun test() {
<caret>A.foo()
}
// REF: class object of (t).A
@@ -0,0 +1,17 @@
package t
class A {
class object B {
}
}
val A.B.bar : Int get() = 1
fun test() {
<caret>A.bar
}
// REF: class object of (t).A
@@ -0,0 +1,19 @@
package t
trait Trait
open class A {
class object Default : Trait {
}
}
fun Trait.foo() {}
fun test() {
<caret>A.foo()
}
// REF: class object of (t).A
@@ -0,0 +1,19 @@
package t
trait Trait {
val some : Int get() = 1
}
open class A {
class object Default : Trait {
}
}
fun test() {
<caret>A.some
}
// REF: class object of (t).A
@@ -0,0 +1,15 @@
package t
class A {
class object Default {
fun test()
}
}
fun test() {
<caret>A.test()
}
// REF: class object of (t).A
@@ -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");