From be5eeb25465fc1a10a43b0c3e526548ab33fde10 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 13 Feb 2012 19:00:38 +0400 Subject: [PATCH] KT-985 Don't show the default package in the completion list --- .../jetbrains/jet/compiler/TipsManager.java | 44 ++++++++++++++----- .../completion/basic/NoEmptyNamespace.kt | 5 +++ .../completion/ExpectedCompletionUtils.java | 10 +++-- .../completion/JetBasicCompletionTest.java | 4 ++ 4 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 idea/testData/completion/basic/NoEmptyNamespace.kt diff --git a/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java b/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java index 2f6bdc48fde..c61feb87035 100644 --- a/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java +++ b/compiler/backend/src/org/jetbrains/jet/compiler/TipsManager.java @@ -5,7 +5,11 @@ import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.CallableDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetNamespaceHeader; @@ -23,10 +27,7 @@ import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.NamespaceType; import org.jetbrains.jet.lang.types.Variance; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Set; +import java.util.*; import static org.jetbrains.jet.lang.resolve.calls.inference.ConstraintType.RECEIVER; @@ -48,7 +49,7 @@ public final class TipsManager { if (expressionType != null && resolutionScope != null) { return includeExternalCallableExtensions( - expressionType.getMemberScope().getAllDescriptors(), + excludePrivateDescriptors(expressionType.getMemberScope().getAllDescriptors()), resolutionScope, new ExpressionReceiver(receiverExpression, expressionType)); } } else { @@ -57,7 +58,7 @@ public final class TipsManager { if (expression.getParent() instanceof JetImportDirective || expression.getParent() instanceof JetNamespaceHeader) { return excludeNonPackageDescriptors(resolutionScope.getAllDescriptors()); } else { - java.util.HashSet descriptorsSet = Sets.newHashSet(); + HashSet descriptorsSet = Sets.newHashSet(); ArrayList result = new ArrayList(); resolutionScope.getImplicitReceiversHierarchy(result); @@ -68,10 +69,7 @@ public final class TipsManager { } descriptorsSet.addAll(resolutionScope.getAllDescriptors()); - - ClassDescriptor anInt = context.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, "Int"); - - return excludeNotCallableExtensions(descriptorsSet, resolutionScope); + return excludeNotCallableExtensions(excludePrivateDescriptors(descriptorsSet), resolutionScope); } } } @@ -79,6 +77,30 @@ public final class TipsManager { return Collections.emptyList(); } + + + public static Collection excludePrivateDescriptors( + @NotNull Collection descriptors) { + + return Collections2.filter(descriptors, new Predicate() { + @Override + public boolean apply(@Nullable DeclarationDescriptor descriptor) { + if (descriptor == null) { + return false; + } + + if (descriptor instanceof NamespaceDescriptor) { + NamespaceDescriptor namespaceDescriptor = (NamespaceDescriptor) descriptor; + if (namespaceDescriptor.getName().isEmpty()) { + return false; + } + } + + return true; + } + }); + } + public static Collection excludeNotCallableExtensions( @NotNull Collection descriptors, @NotNull final JetScope scope ) { diff --git a/idea/testData/completion/basic/NoEmptyNamespace.kt b/idea/testData/completion/basic/NoEmptyNamespace.kt new file mode 100644 index 00000000000..4bd30127fba --- /dev/null +++ b/idea/testData/completion/basic/NoEmptyNamespace.kt @@ -0,0 +1,5 @@ +fun test() { + +} + +// ABSENT: "" \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/ExpectedCompletionUtils.java b/idea/tests/org/jetbrains/jet/completion/ExpectedCompletionUtils.java index 52fb79372c3..1046973d0cc 100644 --- a/idea/tests/org/jetbrains/jet/completion/ExpectedCompletionUtils.java +++ b/idea/tests/org/jetbrains/jet/completion/ExpectedCompletionUtils.java @@ -1,5 +1,7 @@ package org.jetbrains.jet.completion; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -73,14 +75,14 @@ public class ExpectedCompletionUtils { ArrayList result = new ArrayList(); for (String line : findLinesWithPrefixRemoved(prefix, fileText)) { - String[] completions = line.split(","); + String[] variants = line.split(","); - for (String completion : completions) { - result.add(completion.trim()); + for (String variant : variants) { + result.add(StringUtil.unquoteString(variant.trim())); } } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } @NotNull diff --git a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java index ee8814099de..a7d031e6b17 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java +++ b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java @@ -61,6 +61,10 @@ public class JetBasicCompletionTest extends JetCompletionTestBase { doTest(); } + public void testNoEmptyNamespace() { + doTest(); + } + public void testOverloadFunctions() { doTest(); }