mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-30 02:09:59 +07:00
IDEA-79591 Suggest field name in construction parameter name completion
This commit is contained in:
@@ -137,6 +137,9 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
PsiElement parent = PsiTreeUtil.getParentOfType(var, PsiCodeBlock.class);
|
||||
if(parent == null) parent = PsiTreeUtil.getParentOfType(var, PsiMethod.class);
|
||||
addLookupItems(set, suggestedNameInfo, matcher, project, getUnresolvedReferences(parent, false));
|
||||
if (var instanceof PsiParameter && parent instanceof PsiMethod) {
|
||||
addSuggestionsInspiredByFieldNames(set, matcher, var, project, codeStyleManager);
|
||||
}
|
||||
|
||||
PsiExpression initializer = var.getInitializer();
|
||||
if (initializer != null) {
|
||||
@@ -145,11 +148,33 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
}
|
||||
|
||||
private static void addSuggestionsInspiredByFieldNames(Set<LookupElement> set,
|
||||
PrefixMatcher matcher,
|
||||
PsiVariable var,
|
||||
Project project,
|
||||
JavaCodeStyleManager codeStyleManager) {
|
||||
PsiClass psiClass = PsiTreeUtil.getParentOfType(var, PsiClass.class);
|
||||
if (psiClass == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (PsiField field : psiClass.getFields()) {
|
||||
if (field.getType().isAssignableFrom(var.getType())) {
|
||||
String prop = codeStyleManager.variableNameToPropertyName(field.getName(), VariableKind.FIELD);
|
||||
addLookupItems(set, null, matcher, project, codeStyleManager.propertyNameToVariableName(prop, VariableKind.PARAMETER));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] getOverlappedNameVersions(final String prefix, final String[] suggestedNames, String suffix) {
|
||||
final List<String> newSuggestions = new ArrayList<String>();
|
||||
int longestOverlap = 0;
|
||||
|
||||
for (String suggestedName : suggestedNames) {
|
||||
if (suggestedName.length() < 3) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (suggestedName.toUpperCase().startsWith(prefix.toUpperCase())) {
|
||||
newSuggestions.add(suggestedName);
|
||||
longestOverlap = prefix.length();
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
class Car {
|
||||
private final String color;
|
||||
Car(String co<caret>x) { }
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class Car {
|
||||
private final String myColor;
|
||||
private final int myColor2;
|
||||
Car(String pCo<caret>x) { }
|
||||
}
|
||||
@@ -149,7 +149,7 @@ public class VariablesCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testInitializerMatters() throws Exception {
|
||||
myFixture.configureByText(JavaFileType.INSTANCE, "class Foo {{ String f<caret>x = getFoo(); }; String getFoo() {}; }");
|
||||
complete();
|
||||
assertStringItems("foo", "fS");
|
||||
assertStringItems("foo");
|
||||
}
|
||||
|
||||
public void testFieldInitializerMatters() throws Exception {
|
||||
@@ -159,13 +159,37 @@ public class VariablesCompletionTest extends LightFixtureCompletionTestCase {
|
||||
}
|
||||
|
||||
public void testNoKeywordsInForLoopVariableName() throws Throwable {
|
||||
configureByFile(FILE_PREFIX + getTestName(false) + ".java");
|
||||
configure()
|
||||
assertStringItems("stringBuffer", "buffer");
|
||||
}
|
||||
|
||||
public void testDuplicateSuggestionsFromUsage() {
|
||||
configureByFile(FILE_PREFIX + getTestName(false) + ".java");
|
||||
configure();
|
||||
assertStringItems("preferencePolicy", "policy");
|
||||
}
|
||||
|
||||
public void configure() {
|
||||
configureByFile(FILE_PREFIX + getTestName(false) + ".java")
|
||||
}
|
||||
|
||||
public void testConstructorParameterName() {
|
||||
configure()
|
||||
assertStringItems("color");
|
||||
}
|
||||
|
||||
public void testConstructorParameterNameWithPrefix() {
|
||||
CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
|
||||
String oldField = settings.FIELD_NAME_PREFIX;
|
||||
String oldParam = settings.PARAMETER_NAME_PREFIX;
|
||||
settings.FIELD_NAME_PREFIX = "my";
|
||||
settings.PARAMETER_NAME_PREFIX = "p";
|
||||
|
||||
configure()
|
||||
|
||||
settings.FIELD_NAME_PREFIX = oldField
|
||||
settings.PARAMETER_NAME_PREFIX = oldParam
|
||||
|
||||
assertStringItems("pColor");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user