IDEA-42131

This commit is contained in:
Alexey Kudravtsev
2010-08-27 17:13:48 +04:00
parent 1403da14a0
commit 03a403cd29
17 changed files with 179 additions and 20 deletions

View File

@@ -90,7 +90,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
}
}
}
if (array.size() > 0){
if (!array.isEmpty()){
if (array.size() == 1){
baseConstructors = new PsiMethod[]{array.get(0)};
}
@@ -105,7 +105,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
chooser.setTitle(CodeInsightBundle.message("generate.constructor.super.constructor.chooser.title"));
chooser.show();
List<PsiMethodMember> elements = chooser.getSelectedElements();
if (elements == null || elements.size() == 0) return null;
if (elements == null || elements.isEmpty()) return null;
baseConstructors = new PsiMethod[elements.size()];
for(int i = 0; i < elements.size(); i++){
final ClassMember member = elements.get(i);
@@ -139,15 +139,15 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
@NotNull
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] members) throws IncorrectOperationException {
ArrayList<PsiMethod> baseConstructors = new ArrayList<PsiMethod>();
ArrayList<PsiElement> fieldsVector = new ArrayList<PsiElement>();
List<PsiMethod> baseConstructors = new ArrayList<PsiMethod>();
List<PsiField> fieldsVector = new ArrayList<PsiField>();
for (ClassMember member1 : members) {
PsiElement member = ((PsiElementClassMember)member1).getElement();
if (member instanceof PsiMethod) {
baseConstructors.add((PsiMethod)member);
}
else {
fieldsVector.add(member);
fieldsVector.add((PsiField)member);
}
}
PsiField[] fields = fieldsVector.toArray(new PsiField[fieldsVector.size()]);
@@ -193,8 +193,8 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
}
}
@NonNls StringBuffer buffer = new StringBuffer();
buffer.append("{\n");
@NonNls StringBuilder body = new StringBuilder();
body.append("{\n");
if (baseConstructor != null){
PsiClass superClass = aClass.getSuperClass();
@@ -209,15 +209,15 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
constructor.getParameterList().add(parm);
}
if (parms.length > 0){
buffer.append("super(");
body.append("super(");
for(int j = 0; j < parms.length; j++) {
PsiParameter parm = parms[j];
if (j > 0){
buffer.append(",");
body.append(",");
}
buffer.append(parm.getName());
body.append(parm.getName());
}
buffer.append(");\n");
body.append(");\n");
}
}
}
@@ -228,6 +228,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
String fieldName = field.getName();
String name = javaStyle.variableNameToPropertyName(fieldName, VariableKind.FIELD);
String parmName = javaStyle.propertyNameToVariableName(name, VariableKind.PARAMETER);
parmName = javaStyle.suggestUniqueVariableName(parmName, constructor, true);
PsiParameter parm = factory.createParameter(parmName, field.getType());
@@ -238,17 +239,17 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
constructor.getParameterList().add(parm);
if (fieldName.equals(parmName)) {
buffer.append("this.");
body.append("this.");
}
buffer.append(fieldName);
buffer.append("=");
buffer.append(parmName);
buffer.append(";\n");
body.append(fieldName);
body.append("=");
body.append(parmName);
body.append(";\n");
}
buffer.append("}");
PsiCodeBlock body = factory.createCodeBlockFromText(buffer.toString(), null);
constructor.getBody().replace(body);
body.append("}");
PsiCodeBlock bodyBlock = factory.createCodeBlockFromText(body.toString(), null);
constructor.getBody().replace(bodyBlock);
constructor = (PsiMethod)codeStyleManager.reformat(constructor);
return constructor;
}

View File

@@ -169,7 +169,7 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan
}
@Nullable
protected final ClassMember[] chooseMembers(ClassMember[] members, boolean allowEmptySelection, boolean copyJavadocCheckbox, Project project) {
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);

View File

@@ -0,0 +1,4 @@
public abstract class Test {
protected Test() {<caret>
}
}

View File

@@ -0,0 +1,9 @@
public class Foo {
public Foo() {<caret>
}
// Method comment
public String getSomeGetter() {
return null;
}
}

View File

@@ -0,0 +1,11 @@
public class Foo {
public Foo() {<caret>
}
// Method comment
public String getSomeGetter() {
return null;
}
}

View File

@@ -0,0 +1,5 @@
class A
{
A() {
}
}

View File

@@ -0,0 +1,4 @@
class Test {
Test() {<caret>
}
}

View File

@@ -0,0 +1,6 @@
class Test {
private class Foo {
private Foo() {<caret>
}
}
}

View File

@@ -0,0 +1,16 @@
public class Clas extends Clas2{
int foo;
public Clas(int foo, int foo1) {<caret>
super(foo);
foo = foo1;
}
}
class Clas2 {
int foo;
Clas2(int foo) {
this.foo = foo;
}
}

View File

@@ -0,0 +1,3 @@
public abstract class Test {
<caret>
}

View File

@@ -0,0 +1,9 @@
public class Foo {
<caret>
// Method comment
public String getSomeGetter() {
return null;
}
}

View File

@@ -0,0 +1,10 @@
public class Foo {
<caret>
// Method comment
public String getSomeGetter() {
return null;
}
}

View File

@@ -0,0 +1,3 @@
class A
{<caret>
}

View File

@@ -0,0 +1,3 @@
class Test {
<caret>
}

View File

@@ -0,0 +1,5 @@
class Test {
private class Foo {
<caret>
}
}

View File

@@ -0,0 +1,12 @@
public class Clas extends Clas2{
int foo;
<caret>
}
class Clas2 {
int foo;
Clas2(int foo) {
this.foo = foo;
}
}

View File

@@ -0,0 +1,58 @@
/*
* @author ven
*/
package com.intellij.codeInsight;
import com.intellij.codeInsight.generation.ClassMember;
import com.intellij.codeInsight.generation.GenerateConstructorHandler;
import com.intellij.openapi.project.Project;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.testFramework.LightCodeInsightTestCase;
public class GenerateConstructorTest extends LightCodeInsightTestCase {
public void testAbstractClass() throws Exception { doTest(); }
public void testPackageLocalClass() throws Exception { doTest(); }
public void testPrivateClass() throws Exception { doTest(); }
public void testBoundComments() throws Exception { doTest(); }
public void testSameNamedFields() throws Exception { doTest(); }
public void testImmediatelyAfterRBrace() throws Exception { // IDEADEV-28811
final CodeStyleSettings settings = CodeStyleSettingsManager.getInstance(getProject()).getCurrentSettings();
final int old = settings.CLASS_BRACE_STYLE;
settings.CLASS_BRACE_STYLE = CodeStyleSettings.NEXT_LINE;
try {
doTest();
}
finally {
settings.CLASS_BRACE_STYLE = old;
}
}
public void testBoundCommentsKeepsBlankLine() throws Exception {
CodeStyleSettingsManager styleSettingsManager = CodeStyleSettingsManager.getInstance(getProject());
final CodeStyleSettings settings = styleSettingsManager.getCurrentSettings();
settings.BLANK_LINES_AFTER_CLASS_HEADER = 1;
doTest();
}
private void doTest() 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) {
return members;
}
}.invoke(getProject(), getEditor(), getFile());
checkResultByFile("/codeInsight/generateConstructor/after" +
name +
".java");
}
}