KT-985 Don't show the default package in the completion list

This commit is contained in:
Nikolay Krasko
2012-02-13 19:00:38 +04:00
parent 8b9403ac0f
commit be5eeb2546
4 changed files with 48 additions and 15 deletions
@@ -5,7 +5,11 @@ import com.google.common.collect.Collections2;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull; 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.JetExpression;
import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetImportDirective;
import org.jetbrains.jet.lang.psi.JetNamespaceHeader; 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.NamespaceType;
import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.Variance;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import static org.jetbrains.jet.lang.resolve.calls.inference.ConstraintType.RECEIVER; import static org.jetbrains.jet.lang.resolve.calls.inference.ConstraintType.RECEIVER;
@@ -48,7 +49,7 @@ public final class TipsManager {
if (expressionType != null && resolutionScope != null) { if (expressionType != null && resolutionScope != null) {
return includeExternalCallableExtensions( return includeExternalCallableExtensions(
expressionType.getMemberScope().getAllDescriptors(), excludePrivateDescriptors(expressionType.getMemberScope().getAllDescriptors()),
resolutionScope, new ExpressionReceiver(receiverExpression, expressionType)); resolutionScope, new ExpressionReceiver(receiverExpression, expressionType));
} }
} else { } else {
@@ -57,7 +58,7 @@ public final class TipsManager {
if (expression.getParent() instanceof JetImportDirective || expression.getParent() instanceof JetNamespaceHeader) { if (expression.getParent() instanceof JetImportDirective || expression.getParent() instanceof JetNamespaceHeader) {
return excludeNonPackageDescriptors(resolutionScope.getAllDescriptors()); return excludeNonPackageDescriptors(resolutionScope.getAllDescriptors());
} else { } else {
java.util.HashSet<DeclarationDescriptor> descriptorsSet = Sets.newHashSet(); HashSet<DeclarationDescriptor> descriptorsSet = Sets.newHashSet();
ArrayList<ReceiverDescriptor> result = new ArrayList<ReceiverDescriptor>(); ArrayList<ReceiverDescriptor> result = new ArrayList<ReceiverDescriptor>();
resolutionScope.getImplicitReceiversHierarchy(result); resolutionScope.getImplicitReceiversHierarchy(result);
@@ -68,10 +69,7 @@ public final class TipsManager {
} }
descriptorsSet.addAll(resolutionScope.getAllDescriptors()); descriptorsSet.addAll(resolutionScope.getAllDescriptors());
return excludeNotCallableExtensions(excludePrivateDescriptors(descriptorsSet), resolutionScope);
ClassDescriptor anInt = context.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, "Int");
return excludeNotCallableExtensions(descriptorsSet, resolutionScope);
} }
} }
} }
@@ -79,6 +77,30 @@ public final class TipsManager {
return Collections.emptyList(); return Collections.emptyList();
} }
public static Collection<DeclarationDescriptor> excludePrivateDescriptors(
@NotNull Collection<DeclarationDescriptor> descriptors) {
return Collections2.filter(descriptors, new Predicate<DeclarationDescriptor>() {
@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<DeclarationDescriptor> excludeNotCallableExtensions( public static Collection<DeclarationDescriptor> excludeNotCallableExtensions(
@NotNull Collection<? extends DeclarationDescriptor> descriptors, @NotNull final JetScope scope @NotNull Collection<? extends DeclarationDescriptor> descriptors, @NotNull final JetScope scope
) { ) {
@@ -0,0 +1,5 @@
fun test() {
<caret>
}
// ABSENT: ""
@@ -1,5 +1,7 @@
package org.jetbrains.jet.completion; 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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -73,14 +75,14 @@ public class ExpectedCompletionUtils {
ArrayList<String> result = new ArrayList<String>(); ArrayList<String> result = new ArrayList<String>();
for (String line : findLinesWithPrefixRemoved(prefix, fileText)) { for (String line : findLinesWithPrefixRemoved(prefix, fileText)) {
String[] completions = line.split(","); String[] variants = line.split(",");
for (String completion : completions) { for (String variant : variants) {
result.add(completion.trim()); result.add(StringUtil.unquoteString(variant.trim()));
} }
} }
return result.toArray(new String[result.size()]); return ArrayUtil.toStringArray(result);
} }
@NotNull @NotNull
@@ -61,6 +61,10 @@ public class JetBasicCompletionTest extends JetCompletionTestBase {
doTest(); doTest();
} }
public void testNoEmptyNamespace() {
doTest();
}
public void testOverloadFunctions() { public void testOverloadFunctions() {
doTest(); doTest();
} }