From cb5c12cda3a6f52cf447c34b8de35cca35dd0082 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 5 Dec 2014 08:05:23 +0300 Subject: [PATCH] Completion of object's in type position - they can be used there --- .../java/descriptor/SamConstructorDescriptor.kt | 1 - .../jetbrains/jet/lang/resolve/scopes/JetScope.kt | 9 ++++++--- .../jet/plugin/completion/CompletionSession.kt | 15 +++++---------- ...tInTypePosition.kt => ObjectInTypePosition.kt} | 3 +-- .../ObjectInTypePosition.dependency.kt | 3 +++ .../ObjectInTypePosition/ObjectInTypePosition.kt | 4 ++++ .../JSBasicCompletionTestGenerated.java | 12 ++++++------ .../JvmBasicCompletionTestGenerated.java | 12 ++++++------ .../MultiFileJvmBasicCompletionTestGenerated.java | 6 ++++++ 9 files changed, 37 insertions(+), 28 deletions(-) rename idea/testData/completion/basic/common/{NoObjectInTypePosition.kt => ObjectInTypePosition.kt} (56%) create mode 100644 idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.dependency.kt create mode 100644 idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.kt diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt index 041f59be712..3f77f7aa964 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.kt @@ -35,5 +35,4 @@ public class SamConstructorDescriptor( public object SamConstructorDescriptorKindExclude : DescriptorKindExclude { override fun matches(descriptor: DeclarationDescriptor) = descriptor is SamConstructorDescriptor - override fun toString() = this.javaClass.getSimpleName() } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt index 6c7ee7b2701..b3130000126 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.kt @@ -185,17 +185,20 @@ public class DescriptorKindFilter( public trait DescriptorKindExclude { public fun matches(descriptor: DeclarationDescriptor): Boolean + override fun toString() = this.javaClass.getSimpleName() + public object Extensions : DescriptorKindExclude { override fun matches(descriptor: DeclarationDescriptor) = descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null - - override fun toString() = this.javaClass.getSimpleName() } public object NonExtensions : DescriptorKindExclude { override fun matches(descriptor: DeclarationDescriptor) = descriptor !is CallableDescriptor || descriptor.getExtensionReceiverParameter() == null + } - override fun toString() = this.javaClass.getSimpleName() + public object EnumEntry : DescriptorKindExclude { + override fun matches(descriptor: DeclarationDescriptor) + = descriptor is ClassDescriptor && descriptor.getKind() == ClassKind.ENUM_ENTRY } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt index 625db049254..97d743b0330 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/CompletionSession.kt @@ -23,7 +23,6 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.psi.* import org.jetbrains.jet.lang.resolve.BindingContext -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import org.jetbrains.jet.plugin.caches.resolve.* import org.jetbrains.jet.plugin.codeInsight.ReferenceVariantsHelper import org.jetbrains.jet.plugin.completion.smart.SmartCompletion @@ -43,6 +42,7 @@ import org.jetbrains.jet.lang.psi.psiUtil.getStrictParentOfType import org.jetbrains.jet.plugin.util.makeNotNullable import org.jetbrains.jet.plugin.util.CallType import org.jetbrains.jet.plugin.completion.isVisible +import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindExclude class CompletionSessionConfiguration( val completeNonImportedDeclarations: Boolean, @@ -187,18 +187,13 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, val completeReference = jetReference != null && !isOnlyKeywordCompletion() val onlyTypes = completeReference && shouldRunOnlyTypeCompletion() - val kindMask = if (onlyTypes) - DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK + val kindFilter = if (onlyTypes) + DescriptorKindFilter(DescriptorKindFilter.CLASSIFIERS_MASK or DescriptorKindFilter.PACKAGES_MASK) exclude DescriptorKindExclude.EnumEntry else - DescriptorKindFilter.ALL_KINDS_MASK - val kindFilter = DescriptorKindFilter(kindMask) + DescriptorKindFilter(DescriptorKindFilter.ALL_KINDS_MASK) if (completeReference) { addReferenceVariants(kindFilter, shouldCastToRuntimeType = false) - - if (onlyTypes) { - collector.addDescriptorElements(listOf(KotlinBuiltIns.getInstance().getUnit()), false) - } } KeywordCompletion.complete(parameters, prefixMatcher.getPrefix(), collector) @@ -223,7 +218,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, private fun addNonImported(onlyTypes: Boolean) { if (shouldRunTopLevelCompletion()) { - addAllClasses { if (onlyTypes) !it.isSingleton() else it != ClassKind.ENUM_ENTRY } + addAllClasses { it != ClassKind.ENUM_ENTRY } if (!onlyTypes) { collector.addDescriptorElements(getKotlinTopLevelCallables(), suppressAutoInsertion = true) diff --git a/idea/testData/completion/basic/common/NoObjectInTypePosition.kt b/idea/testData/completion/basic/common/ObjectInTypePosition.kt similarity index 56% rename from idea/testData/completion/basic/common/NoObjectInTypePosition.kt rename to idea/testData/completion/basic/common/ObjectInTypePosition.kt index 947dd133ad1..bc7646695bc 100644 --- a/idea/testData/completion/basic/common/NoObjectInTypePosition.kt +++ b/idea/testData/completion/basic/common/ObjectInTypePosition.kt @@ -4,5 +4,4 @@ fun test() { val a : Named } -// INVOCATION_COUNT: 2 -// ABSENT: NamedObject +// EXIST: NamedObject diff --git a/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.dependency.kt b/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.dependency.kt new file mode 100644 index 00000000000..f61aa4a76ef --- /dev/null +++ b/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.dependency.kt @@ -0,0 +1,3 @@ +package ppp + +object SomeObject \ No newline at end of file diff --git a/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.kt b/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.kt new file mode 100644 index 00000000000..137738b035d --- /dev/null +++ b/idea/testData/completion/basic/multifile/ObjectInTypePosition/ObjectInTypePosition.kt @@ -0,0 +1,4 @@ +fun foo(): S + +// INVOCATION_COUNT: 2 +// EXIST: SomeObject diff --git a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java index 677a49bca81..72b1988bbee 100644 --- a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java @@ -700,12 +700,6 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } - @TestMetadata("NoObjectInTypePosition.kt") - public void testNoObjectInTypePosition() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/NoObjectInTypePosition.kt"); - doTest(fileName); - } - @TestMetadata("NoPackageFacadeClasses.kt") public void testNoPackageFacadeClasses() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/NoPackageFacadeClasses.kt"); @@ -724,6 +718,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("ObjectInTypePosition.kt") + public void testObjectInTypePosition() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectInTypePosition.kt"); + doTest(fileName); + } + @TestMetadata("ObjectRedeclaration1.kt") public void testObjectRedeclaration1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectRedeclaration1.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index ca74f6257e5..d05d47d1107 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java @@ -700,12 +700,6 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } - @TestMetadata("NoObjectInTypePosition.kt") - public void testNoObjectInTypePosition() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/NoObjectInTypePosition.kt"); - doTest(fileName); - } - @TestMetadata("NoPackageFacadeClasses.kt") public void testNoPackageFacadeClasses() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/NoPackageFacadeClasses.kt"); @@ -724,6 +718,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("ObjectInTypePosition.kt") + public void testObjectInTypePosition() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectInTypePosition.kt"); + doTest(fileName); + } + @TestMetadata("ObjectRedeclaration1.kt") public void testObjectRedeclaration1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/ObjectRedeclaration1.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java index d17a3a2afa4..e3746b97440 100644 --- a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java @@ -174,6 +174,12 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ doTest(fileName); } + @TestMetadata("ObjectInTypePosition") + public void testObjectInTypePosition() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/multifile/ObjectInTypePosition/"); + doTest(fileName); + } + @TestMetadata("TopLevelFunction") public void testTopLevelFunction() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/multifile/TopLevelFunction/");