IDEA-84025 A class in different package interferes with code completion

not needed anymore since space/dot don't select the autopopup item by default
This commit is contained in:
peter
2013-02-20 23:42:54 +01:00
parent 6edc546e65
commit 6e35695d09
4 changed files with 5 additions and 104 deletions
@@ -32,9 +32,7 @@ import com.intellij.lang.java.JavaLanguage;
import com.intellij.patterns.PsiJavaPatterns;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
public class JavaCharFilter extends CharFilter {
@@ -43,45 +41,6 @@ public class JavaCharFilter extends CharFilter {
return psiElement != null && psiElement.getParent() instanceof PsiLiteralExpression;
}
public static boolean isNonImportedClassEntered(LookupImpl lookup, boolean orPackage) {
if (lookup.isSelectionTouched()) return false;
CompletionProcess process = CompletionService.getCompletionService().getCurrentCompletion();
if (process != null && !process.isAutopopupCompletion()) return false;
LookupElement item = lookup.getCurrentItem();
if (item == null) return false;
PsiFile file = lookup.getPsiFile();
if (file == null) return false;
final String prefix = lookup.itemPattern(item);
for (PsiClass aClass : PsiShortNamesCache.getInstance(file.getProject()).getClassesByName(prefix, file.getResolveScope())) {
if (!isObfuscated(aClass) && PsiUtil.isAccessible(aClass, file, null)) {
return true;
}
}
if (orPackage && prefix.length() > 1 && JavaPsiFacade.getInstance(file.getProject()).findPackage(prefix) != null) {
return true;
}
return false;
}
private static boolean isObfuscated(PsiClass psiClass) {
if (!(psiClass instanceof PsiCompiledElement)) {
return false;
}
String name = psiClass.getName();
if (name == null) {
return false;
}
return name.length() <= 2 && Character.isLowerCase(name.charAt(0));
}
@Override
public Result acceptChar(char c, final int prefixLength, final Lookup lookup) {
if (!lookup.getPsiFile().getLanguage().isKindOf(JavaLanguage.INSTANCE)) {
@@ -116,11 +75,7 @@ public class JavaCharFilter extends CharFilter {
return Result.HIDE_LOOKUP;
}
if ((c == '[' || c == '<' || c == '.' || c == ' ' || c == '(' || c == ',') &&
isNonImportedClassEntered((LookupImpl)lookup, c == '.')) {
return Result.HIDE_LOOKUP;
}
if (c == '[') return CharFilter.Result.SELECT_ITEM_AND_FINISH_LOOKUP;
if (c == '<' && o instanceof PsiClass) return Result.SELECT_ITEM_AND_FINISH_LOOKUP;
if (c == '(') {
@@ -977,14 +977,6 @@ class Foo {
assert myFixture.lookupElementStrings.containsAll(['private', 'protected'])
}
public void testArrays() {
myFixture.configureByText "a.java", "class Foo {{ <caret> }}"
type 'Arrays.'
myFixture.checkResult "class Foo {{ Arrays.<caret> }}"
assert 'Arrays.asList' in myFixture.lookupElementStrings
}
public void testExactMatchesFirst() {
myFixture.configureByText("a.java", """
public class UTest {
@@ -1068,26 +1060,6 @@ public class UTest {
assert myFixture.lookupElementStrings == ['iterator']
}
public void testTypingNonImportedClassName() {
myFixture.addClass("package foo; public class Foo239 {} ")
myFixture.addClass("class Foo239Util {} ")
myFixture.addClass("class Foo239Util2 {} ")
myFixture.configureByText "a.java", "class Foo {{ <caret> }}"
type 'Foo239 '
assert myFixture.file.text.contains('Foo239 ')
myFixture.configureByText "a.java", "class Foo {{ <caret> }}"
type 'Foo239'
edt { myFixture.performEditorAction IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN }
type ' '
assert myFixture.file.text.contains('Foo239Util2 ')
myFixture.configureByText "a.java", "class Foo {{ <caret> }}"
type 'new Foo239('
assert myFixture.file.text.contains('new Foo239()')
}
public void testTypingFirstVarargDot() {
myFixture.configureByText "a.java", "class Foo { void foo(Foo<caret>[] a) { }; class Bar {}}"
type '.'
@@ -1219,6 +1191,8 @@ class Foo {{
}
public void testPackageQualifier() {
CodeInsightSettings.instance.SELECT_AUTOPOPUP_SUGGESTIONS_BY_CHARS = false
myFixture.addClass("package com.too; public class Util {}")
myFixture.configureByText 'a.java', 'class Foo { void foo(Object command) { <caret> }}'
type 'com.t'
@@ -1312,14 +1286,6 @@ class Foo {
myFixture.checkResult('class <caret>')
}
public void "test check for class existing globally when typing comma"() {
myFixture.addClass('package p; public class XYZ {}')
myFixture.addClass('public class XYZAspect {}')
myFixture.configureByText 'a.java', 'class Foo extends Map<caret>'
type '<XYZ, XYZ>'
myFixture.checkResult 'class Foo extends Map<XYZ, XYZ><caret>'
}
void joinCompletion() {
myTester.joinCompletion()
}
@@ -47,11 +47,6 @@ public class GroovyReferenceCharFilter extends CharFilter {
return Result.ADD_TO_PREFIX;
}
if ((c == '[' || c == '<' || c == '.' || c == ' ' || c == '(' || c == ',') &&
JavaCharFilter.isNonImportedClassEntered((LookupImpl)lookup, c == '.')) {
return Result.HIDE_LOOKUP;
}
int caret = lookup.getEditor().getCaretModel().getOffset();
if (c == '.' && prefixLength == 0 && !lookup.isSelectionTouched() && caret > 0 &&
lookup.getEditor().getDocument().getCharsSequence().charAt(caret - 1) == '.') {
@@ -120,16 +120,6 @@ class GroovyAutoPopupTest extends CompletionAutoPopupTestCase {
}
public void testTypingNonImportedClassName() {
setFocusLookup()
myFixture.addClass("package foo; public class Foo239 {} ")
myFixture.addClass("class Foo239Util {} ")
myFixture.configureByText "a.groovy", "<caret>"
type 'Foo239 '
myFixture.checkResult 'Foo239 <caret>'
}
private def setFocusLookup() {
CodeInsightSettings.instance.AUTOPOPUP_FOCUS_POLICY = CodeInsightSettings.ALWAYS
}
@@ -251,13 +241,6 @@ class GroovyAutoPopupTest extends CompletionAutoPopupTestCase {
myFixture.checkResult '[has:<caret>]'
}
public void testTypingFqn() {
CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
myFixture.configureByText 'a.groovy', '<caret>'
type 'java.'
myFixture.checkResult 'java.<caret>'
}
public void testPreferRightCasedVariant() {
CodeInsightSettings.instance.COMPLETION_CASE_SENSITIVE = CodeInsightSettings.NONE
myFixture.configureByText 'a.groovy', '<caret>'
@@ -268,6 +251,8 @@ class GroovyAutoPopupTest extends CompletionAutoPopupTestCase {
}
public void testPackageQualifier() {
CodeInsightSettings.instance.SELECT_AUTOPOPUP_SUGGESTIONS_BY_CHARS = false
myFixture.addClass("package com.too; public class Util {}")
myFixture.configureByText 'a.groovy', 'void foo(Object command) { <caret> }'
type 'com.t'