From 8b749ee76d38d73c0857440992b51e7560b4375a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 7 Aug 2015 21:32:23 +0300 Subject: [PATCH] KT-6891 Type argument of generic type before dot is not resolved KT-7373 Type parameter names are not suggested KT-6838 Class declared in same file is not suggested in completion #KT-6891 Fixed #KT-7373 Fixed #KT-6838 Fixed --- .../src/org/jetbrains/kotlin/resolve/TypeResolver.kt | 8 ++++++++ .../testData/basic/common/TypeArgFromTheSameFile.kt | 7 +++++++ .../testData/basic/common/TypeArgOfOwnerClass.kt | 5 +++++ .../test/JSBasicCompletionTestGenerated.java | 12 ++++++++++++ .../test/JvmBasicCompletionTestGenerated.java | 12 ++++++++++++ .../resolve/references/TypeArgumentBeforeDot.kt | 11 +++++++++++ .../idea/resolve/ReferenceResolveTestGenerated.java | 6 ++++++ 7 files changed, 61 insertions(+) create mode 100644 idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt create mode 100644 idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt create mode 100644 idea/testData/resolve/references/TypeArgumentBeforeDot.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt index 4e7b237cff8..b69a4ec349d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TypeResolver.kt @@ -117,6 +117,14 @@ public class TypeResolver( var result: PossiblyBareType? = null typeElement?.accept(object : JetVisitorVoid() { override fun visitUserType(type: JetUserType) { + if (type.qualifier != null) { // we must resolve all type references in arguments of qualifier type + for (typeArgument in type.qualifier!!.typeArguments) { + typeArgument.typeReference?.let { + ForceResolveUtil.forceResolveAllContents(resolveType(c, it)) + } + } + } + val referenceExpression = type.getReferenceExpression() val referencedName = type.getReferencedName() if (referenceExpression == null || referencedName == null) return diff --git a/idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt b/idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt new file mode 100644 index 00000000000..c50f3700093 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt @@ -0,0 +1,7 @@ +class C { + val prop: List> +} + +class Foo + +// EXIST: Foo diff --git a/idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt b/idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt new file mode 100644 index 00000000000..96aaa1d28d1 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt @@ -0,0 +1,5 @@ +class C { + val v: List +} + +// EXIST: TParam 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 7ae4beb8437..be92bd64197 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 @@ -901,6 +901,18 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("TypeArgFromTheSameFile.kt") + public void testTypeArgFromTheSameFile() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt"); + doTest(fileName); + } + + @TestMetadata("TypeArgOfOwnerClass.kt") + public void testTypeArgOfOwnerClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt"); + doTest(fileName); + } + @TestMetadata("TypeParameterFromOuterClass.kt") public void testTypeParameterFromOuterClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt"); 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 243d6a426da..9c7a5c9f583 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 @@ -901,6 +901,18 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("TypeArgFromTheSameFile.kt") + public void testTypeArgFromTheSameFile() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeArgFromTheSameFile.kt"); + doTest(fileName); + } + + @TestMetadata("TypeArgOfOwnerClass.kt") + public void testTypeArgOfOwnerClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeArgOfOwnerClass.kt"); + doTest(fileName); + } + @TestMetadata("TypeParameterFromOuterClass.kt") public void testTypeParameterFromOuterClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/TypeParameterFromOuterClass.kt"); diff --git a/idea/testData/resolve/references/TypeArgumentBeforeDot.kt b/idea/testData/resolve/references/TypeArgumentBeforeDot.kt new file mode 100644 index 00000000000..9157a78e603 --- /dev/null +++ b/idea/testData/resolve/references/TypeArgumentBeforeDot.kt @@ -0,0 +1,11 @@ +class Generic { + class Nested +} + +class C { + val prop: Generic<Foo>.Nested? = null +} + +class Foo + +// REF: ().Foo diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java index 383032882b9..e6585b4a887 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/ReferenceResolveTestGenerated.java @@ -353,6 +353,12 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest(fileName); } + @TestMetadata("TypeArgumentBeforeDot.kt") + public void testTypeArgumentBeforeDot() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/TypeArgumentBeforeDot.kt"); + doTest(fileName); + } + @TestMetadata("TypeArgumentUnresolvedClass.kt") public void testTypeArgumentUnresolvedClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/resolve/references/TypeArgumentUnresolvedClass.kt");