mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-70589 autocomplete in interfaces thinks that everything is a constant
This commit is contained in:
@@ -124,15 +124,15 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
|
||||
public static void completeVariableNameForRefactoring(Project project, Set<LookupElement> set, String prefix, PsiType varType, VariableKind varKind) {
|
||||
JavaMemberNameCompletionContributor.completeVariableNameForRefactoring(project, set, new CamelHumpMatcher(prefix), varType, varKind,
|
||||
true);
|
||||
final CamelHumpMatcher camelHumpMatcher = new CamelHumpMatcher(prefix);
|
||||
JavaMemberNameCompletionContributor.completeVariableNameForRefactoring(project, set, camelHumpMatcher, varType, varKind, true, false);
|
||||
}
|
||||
|
||||
public static String[] completeVariableNameForRefactoring(JavaCodeStyleManager codeStyleManager, final PsiType varType,
|
||||
final VariableKind varKind,
|
||||
SuggestedNameInfo suggestedNameInfo) {
|
||||
return JavaMemberNameCompletionContributor
|
||||
.completeVariableNameForRefactoring(codeStyleManager, new CamelHumpMatcher(""), varType, varKind, suggestedNameInfo, true);
|
||||
.completeVariableNameForRefactoring(codeStyleManager, new CamelHumpMatcher(""), varType, varKind, suggestedNameInfo, true, false);
|
||||
}
|
||||
|
||||
public static PsiType eliminateWildcards(PsiType type) {
|
||||
@@ -183,18 +183,6 @@ public class JavaCompletionUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static PsiClass findClassByName(PsiClass defResult, PsiClass[] classes) {
|
||||
String name = defResult.getName();
|
||||
if (name == null) return defResult;
|
||||
|
||||
for (PsiClass candidate : classes) {
|
||||
if (name.equals(candidate.getName())) {
|
||||
return candidate;
|
||||
}
|
||||
}
|
||||
return defResult;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
@NotNull
|
||||
public static <T extends PsiType> T originalize(@NotNull T type) {
|
||||
|
||||
+14
-10
@@ -42,6 +42,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.util.*;
|
||||
|
||||
import static com.intellij.patterns.PlatformPatterns.psiElement;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiClass;
|
||||
import static com.intellij.patterns.PsiJavaPatterns.psiField;
|
||||
import static com.intellij.patterns.StandardPatterns.or;
|
||||
|
||||
/**
|
||||
@@ -227,10 +229,8 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
final VariableKind variableKind = JavaCodeStyleManager.getInstance(var.getProject()).getVariableKind(var);
|
||||
|
||||
final String prefix = matcher.getPrefix();
|
||||
if (PsiType.VOID.equals(var.getType()) || prefix.startsWith(JavaCompletionUtil.IS_PREFIX) ||
|
||||
prefix.startsWith(JavaCompletionUtil.GET_PREFIX) ||
|
||||
prefix.startsWith(JavaCompletionUtil.SET_PREFIX)) {
|
||||
completeVariableNameForRefactoring(var.getProject(), set, matcher, var.getType(), variableKind, includeOverlapped);
|
||||
if (PsiType.VOID.equals(var.getType()) || psiField().inClass(psiClass().isInterface()).accepts(var)) {
|
||||
completeVariableNameForRefactoring(var.getProject(), set, matcher, var.getType(), variableKind, includeOverlapped, true);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -266,11 +266,11 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
Set<LookupElement> set,
|
||||
PrefixMatcher matcher,
|
||||
PsiType varType,
|
||||
VariableKind varKind, final boolean includeOverlapped) {
|
||||
VariableKind varKind, final boolean includeOverlapped, final boolean methodPrefix) {
|
||||
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project);
|
||||
SuggestedNameInfo suggestedNameInfo = codeStyleManager.suggestVariableName(varKind, null, null, varType);
|
||||
final String[] strings = completeVariableNameForRefactoring(codeStyleManager, matcher, varType, varKind, suggestedNameInfo,
|
||||
includeOverlapped);
|
||||
includeOverlapped, methodPrefix);
|
||||
tunePreferencePolicy(LookupItemUtil.addLookupItems(set, strings, matcher), suggestedNameInfo);
|
||||
}
|
||||
|
||||
@@ -278,7 +278,8 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
final PrefixMatcher matcher,
|
||||
final PsiType varType,
|
||||
final VariableKind varKind,
|
||||
SuggestedNameInfo suggestedNameInfo, final boolean includeOverlapped) {
|
||||
SuggestedNameInfo suggestedNameInfo,
|
||||
final boolean includeOverlapped, final boolean methodPrefix) {
|
||||
Set<String> result = new LinkedHashSet<String>();
|
||||
final String[] suggestedNames = suggestedNameInfo.names;
|
||||
for (final String suggestedName : suggestedNames) {
|
||||
@@ -291,9 +292,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
// use suggested names as suffixes
|
||||
final String requiredSuffix = codeStyleManager.getSuffixByVariableKind(varKind);
|
||||
final String prefix = matcher.getPrefix();
|
||||
final boolean isMethodPrefix = prefix.startsWith(JavaCompletionUtil.IS_PREFIX) || prefix.startsWith(JavaCompletionUtil.GET_PREFIX) || prefix.startsWith(
|
||||
JavaCompletionUtil.SET_PREFIX);
|
||||
if (varKind != VariableKind.STATIC_FINAL_FIELD || isMethodPrefix) {
|
||||
if (varKind != VariableKind.STATIC_FINAL_FIELD || methodPrefix) {
|
||||
for (int i = 0; i < suggestedNames.length; i++) {
|
||||
suggestedNames[i] = codeStyleManager.variableNameToPropertyName(suggestedNames[i], varKind);
|
||||
}
|
||||
@@ -306,6 +305,11 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
return ArrayUtil.toStringArray(result);
|
||||
}
|
||||
|
||||
private static boolean isMethodPrefix(String prefix) {
|
||||
return prefix.startsWith(JavaCompletionUtil.IS_PREFIX) || prefix.startsWith(JavaCompletionUtil.GET_PREFIX) || prefix.startsWith(
|
||||
JavaCompletionUtil.SET_PREFIX);
|
||||
}
|
||||
|
||||
private static void completeMethodName(Set<LookupElement> set, PsiElement element, final PrefixMatcher matcher){
|
||||
if(element instanceof PsiMethod) {
|
||||
final PsiMethod method = (PsiMethod)element;
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
interface Foo {
|
||||
GooBarDoo calc<caret>
|
||||
}
|
||||
|
||||
interface GooBarDoo {}
|
||||
+6
-1
@@ -39,6 +39,11 @@ public class VariablesCompletionTest extends CompletionTestCase {
|
||||
doTest("TestSource1.java", "TestResult1.java");
|
||||
}
|
||||
|
||||
public void testInterfaceMethod() throws Exception {
|
||||
configureByFile(FILE_PREFIX + "locals/" + "InterfaceMethod.java");
|
||||
assertStringItems("calcGooBarDoo", "calcBarDoo", "calcDoo");
|
||||
}
|
||||
|
||||
public void testLocals2() throws Exception {
|
||||
configureByFile(FILE_PREFIX + "locals/" + "TestSource2.java");
|
||||
compareLookup(FILE_PREFIX + "locals/test2-lst.txt");
|
||||
@@ -117,7 +122,7 @@ public class VariablesCompletionTest extends CompletionTestCase {
|
||||
complete();
|
||||
checkResultByFile(FILE_PREFIX + "locals/" + "TestFieldOutOfAnonymousResult.java");
|
||||
}
|
||||
|
||||
|
||||
public void testUnresolvedMethodName() throws Exception {
|
||||
configureByFile(FILE_PREFIX + "locals/" + "UnresolvedMethodName.java");
|
||||
complete();
|
||||
|
||||
Reference in New Issue
Block a user