IDEA-70589 autocomplete in interfaces thinks that everything is a constant

This commit is contained in:
peter
2011-09-08 16:15:57 +02:00
parent 633f98cacf
commit c6343bf710
4 changed files with 28 additions and 26 deletions
@@ -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) {
@@ -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 {}
@@ -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();