diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index 8375d37d1dd..fafcc9b7bf1 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.receivers.ClassQualifier import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue +import org.jetbrains.kotlin.resolve.scopes.receivers.TypeAliasQualifier import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.DoubleColonLHS import org.jetbrains.kotlin.util.supertypesWithAny @@ -282,9 +283,8 @@ fun CallTypeAndReceiver<*, *>.receiverTypesWithIndex( val receiverValues = if (receiverExpression != null) { val receiverType = bindingContext.getType(receiverExpression) ?: - (bindingContext.get(BindingContext.QUALIFIER, receiverExpression) as? ClassQualifier)?.let { - it.descriptor.classValueType - } ?: + (bindingContext.get(BindingContext.QUALIFIER, receiverExpression) as? ClassQualifier)?.descriptor?.classValueType ?: + (bindingContext.get(BindingContext.QUALIFIER, receiverExpression) as? TypeAliasQualifier)?.classDescriptor?.classValueType ?: return emptyList() listOf(ExpressionReceiver.create(receiverExpression, receiverType, bindingContext)) } diff --git a/idea/idea-completion/testData/basic/common/objects/PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt b/idea/idea-completion/testData/basic/common/objects/PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt new file mode 100644 index 00000000000..65e0e7d0c8e --- /dev/null +++ b/idea/idea-completion/testData/basic/common/objects/PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt @@ -0,0 +1,13 @@ +object Obj { + class NestedInObject { + companion object { + val inCompanion = 0 + } + } +} + +typealias TA = Obj.NestedInObject + +val usage = TA. + +// EXIST: inCompanion \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/common/objects/PropertyOfTypeAliasToObject.kt b/idea/idea-completion/testData/basic/common/objects/PropertyOfTypeAliasToObject.kt new file mode 100644 index 00000000000..9be821ab1f1 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/objects/PropertyOfTypeAliasToObject.kt @@ -0,0 +1,9 @@ +object Obj { + val inObject = 1 +} + +typealias TA = Obj + +val usage = TA. + +// EXIST: inObject \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/common/objects/TypeAliasToNestedObject.kt b/idea/idea-completion/testData/basic/common/objects/TypeAliasToNestedObject.kt new file mode 100644 index 00000000000..1e762885240 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/objects/TypeAliasToNestedObject.kt @@ -0,0 +1,11 @@ +class Cls { + object Obj { + val inObject = 1 + } +} + +typealias TA = Cls.Obj + +val usage = TA. + +// EXIST: inObject \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 39c511a4cf8..666da2fdd93 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -1982,6 +1982,33 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes } } + @TestMetadata("idea/idea-completion/testData/basic/common/objects") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Objects extends AbstractJSBasicCompletionTest { + public void testAllFilesPresentInObjects() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/basic/common/objects"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt") + public void testPropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt"); + doTest(fileName); + } + + @TestMetadata("PropertyOfTypeAliasToObject.kt") + public void testPropertyOfTypeAliasToObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/PropertyOfTypeAliasToObject.kt"); + doTest(fileName); + } + + @TestMetadata("TypeAliasToNestedObject.kt") + public void testTypeAliasToNestedObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/TypeAliasToNestedObject.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/idea-completion/testData/basic/common/override") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 3dfcd9a9157..505af8db96d 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -1982,6 +1982,33 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT } } + @TestMetadata("idea/idea-completion/testData/basic/common/objects") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Objects extends AbstractJvmBasicCompletionTest { + public void testAllFilesPresentInObjects() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/idea-completion/testData/basic/common/objects"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); + } + + @TestMetadata("PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt") + public void testPropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/PropertyFromCompanionObjectFromTypeAliasToNestedInObjectClass.kt"); + doTest(fileName); + } + + @TestMetadata("PropertyOfTypeAliasToObject.kt") + public void testPropertyOfTypeAliasToObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/PropertyOfTypeAliasToObject.kt"); + doTest(fileName); + } + + @TestMetadata("TypeAliasToNestedObject.kt") + public void testTypeAliasToNestedObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/objects/TypeAliasToNestedObject.kt"); + doTest(fileName); + } + } + @TestMetadata("idea/idea-completion/testData/basic/common/override") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)