mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
preselect final fields on constructor generation (IDEA-78512)
This commit is contained in:
+26
@@ -134,6 +134,32 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
return members;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MemberChooser<ClassMember> createMembersChooser(ClassMember[] members,
|
||||
boolean allowEmptySelection,
|
||||
boolean copyJavadocCheckbox,
|
||||
Project project) {
|
||||
final MemberChooser<ClassMember> chooser = super.createMembersChooser(members, allowEmptySelection, copyJavadocCheckbox, project);
|
||||
final List<ClassMember> preselection = preselect(members);
|
||||
if (!preselection.isEmpty()) {
|
||||
chooser.selectElements(preselection.toArray(new ClassMember[preselection.size()]));
|
||||
}
|
||||
return chooser;
|
||||
}
|
||||
|
||||
protected static List<ClassMember> preselect(ClassMember[] members) {
|
||||
final List<ClassMember> preselection = new ArrayList<ClassMember>();
|
||||
for (ClassMember member : members) {
|
||||
if (member instanceof PsiFieldMember) {
|
||||
final PsiField psiField = ((PsiFieldMember)member).getElement();
|
||||
if (psiField != null && psiField.hasModifierProperty(PsiModifier.FINAL)) {
|
||||
preselection.add(member);
|
||||
}
|
||||
}
|
||||
}
|
||||
return preselection;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] members) throws IncorrectOperationException {
|
||||
List<PsiMethod> baseConstructors = new ArrayList<PsiMethod>();
|
||||
|
||||
+11
-3
@@ -183,15 +183,23 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan
|
||||
|
||||
@Nullable
|
||||
protected ClassMember[] chooseMembers(ClassMember[] members, boolean allowEmptySelection, boolean copyJavadocCheckbox, Project project) {
|
||||
MemberChooser<ClassMember> chooser = new MemberChooser<ClassMember>(members, allowEmptySelection, true, project);
|
||||
chooser.setTitle(myChooserTitle);
|
||||
chooser.setCopyJavadocVisible(copyJavadocCheckbox);
|
||||
MemberChooser<ClassMember> chooser = createMembersChooser(members, allowEmptySelection, copyJavadocCheckbox, project);
|
||||
chooser.show();
|
||||
myToCopyJavaDoc = chooser.isCopyJavadoc();
|
||||
final List<ClassMember> list = chooser.getSelectedElements();
|
||||
return list == null ? null : list.toArray(new ClassMember[list.size()]);
|
||||
}
|
||||
|
||||
protected MemberChooser<ClassMember> createMembersChooser(ClassMember[] members,
|
||||
boolean allowEmptySelection,
|
||||
boolean copyJavadocCheckbox,
|
||||
Project project) {
|
||||
MemberChooser<ClassMember> chooser = new MemberChooser<ClassMember>(members, allowEmptySelection, true, project);
|
||||
chooser.setTitle(myChooserTitle);
|
||||
chooser.setCopyJavadocVisible(copyJavadocCheckbox);
|
||||
return chooser;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] members) throws IncorrectOperationException {
|
||||
ArrayList<GenerationInfo> array = new ArrayList<GenerationInfo>();
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class Test {
|
||||
private int a;
|
||||
private final int b;
|
||||
private int c;
|
||||
private final int d;
|
||||
|
||||
Test(int b, int d) {
|
||||
this.b = b;
|
||||
this.d = d;
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
class Test {
|
||||
private int a;
|
||||
private final int b;
|
||||
private int c;
|
||||
private final int d;
|
||||
}
|
||||
@@ -10,6 +10,8 @@ import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
import com.intellij.testFramework.LightCodeInsightTestCase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GenerateConstructorTest extends LightCodeInsightTestCase {
|
||||
public void testAbstractClass() throws Exception { doTest(); }
|
||||
public void testPackageLocalClass() throws Exception { doTest(); }
|
||||
@@ -38,6 +40,22 @@ public class GenerateConstructorTest extends LightCodeInsightTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testFinalFieldPreselection() throws Exception {
|
||||
String name = getTestName(false);
|
||||
configureByFile("/codeInsight/generateConstructor/before" + name + ".java");
|
||||
new GenerateConstructorHandler() {
|
||||
@Override
|
||||
protected ClassMember[] chooseMembers(ClassMember[] members,
|
||||
boolean allowEmptySelection,
|
||||
boolean copyJavadocCheckbox,
|
||||
Project project) {
|
||||
final List<ClassMember> preselection = GenerateConstructorHandler.preselect(members);
|
||||
return preselection.toArray(new ClassMember[preselection.size()]);
|
||||
}
|
||||
}.invoke(getProject(), getEditor(), getFile());
|
||||
checkResultByFile("/codeInsight/generateConstructor/after" + name +".java");
|
||||
}
|
||||
|
||||
private void doTest() throws Exception {
|
||||
String name = getTestName(false);
|
||||
configureByFile("/codeInsight/generateConstructor/before" +
|
||||
|
||||
Reference in New Issue
Block a user