mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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 == '(') {
|
||||
|
||||
+2
-36
@@ -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()
|
||||
}
|
||||
|
||||
-5
@@ -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) == '.') {
|
||||
|
||||
+2
-17
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user