allow to configure prefix/suffix for test/implementation (IDEA-86808/IDEA-161300)

This commit is contained in:
Anna Kozlova
2018-01-05 15:16:15 +01:00
parent 39e3bc0c96
commit 0ff8a66173
5 changed files with 93 additions and 7 deletions
@@ -40,7 +40,7 @@
<text resource-bundle="messages/ApplicationBundle" key="checkbox.prefer.longer.names"/>
</properties>
</component>
<grid id="dc5b7" layout-manager="GridLayoutManager" row-count="5" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="dc5b7" layout-manager="GridLayoutManager" row-count="7" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="0" anchor="1" fill="3" indent="0" use-parent-layout="false"/>
@@ -112,7 +112,9 @@
<preferred-size width="60" height="-1"/>
</grid>
</constraints>
<properties/>
<properties>
<text value=""/>
</properties>
</component>
<component id="16f1d" class="javax.swing.JTextField" binding="myFieldSuffixField">
<constraints>
@@ -162,6 +164,54 @@
<text resource-bundle="messages/ApplicationBundle" key="label.name.prefix"/>
</properties>
</component>
<component id="551b5" class="javax.swing.JLabel">
<constraints>
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Test class:"/>
</properties>
</component>
<component id="51b03" class="javax.swing.JTextField" binding="myTestClassPrefix" default-binding="true">
<constraints>
<grid row="6" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<component id="e547e" class="javax.swing.JTextField" binding="myTestClassSuffix" default-binding="true">
<constraints>
<grid row="6" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<component id="49afe" class="javax.swing.JLabel">
<constraints>
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text value="Subclass:"/>
</properties>
</component>
<component id="fd25f" class="javax.swing.JTextField" binding="mySubclassPrefix" default-binding="true">
<constraints>
<grid row="5" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
<component id="ed80d" class="javax.swing.JTextField" binding="mySubclassSuffix" default-binding="true">
<constraints>
<grid row="5" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties/>
</component>
</children>
</grid>
</children>
@@ -69,6 +69,10 @@ public class CodeStyleGenerationConfigurable implements CodeStyleConfigurable {
private JBCheckBox myReplaceInstanceOfCb;
private JBCheckBox myReplaceCastCb;
private JBCheckBox myReplaceNullCheckCb;
private JTextField myTestClassPrefix;
private JTextField myTestClassSuffix;
private JTextField mySubclassPrefix;
private JTextField mySubclassSuffix;
private CommenterForm myCommenterForm;
private SortedListModel<String> myRepeatAnnotationsModel;
@@ -110,11 +114,15 @@ public class CodeStyleGenerationConfigurable implements CodeStyleConfigurable {
myStaticFieldPrefixField.setText(javaSettings.STATIC_FIELD_NAME_PREFIX);
myParameterPrefixField.setText(javaSettings.PARAMETER_NAME_PREFIX);
myLocalVariablePrefixField.setText(javaSettings.LOCAL_VARIABLE_NAME_PREFIX);
mySubclassPrefix.setText(javaSettings.SUBCLASS_NAME_PREFIX);
myTestClassPrefix.setText(javaSettings.TEST_NAME_PREFIX);
myFieldSuffixField.setText(javaSettings.FIELD_NAME_SUFFIX);
myStaticFieldSuffixField.setText(javaSettings.STATIC_FIELD_NAME_SUFFIX);
myParameterSuffixField.setText(javaSettings.PARAMETER_NAME_SUFFIX);
myLocalVariableSuffixField.setText(javaSettings.LOCAL_VARIABLE_NAME_SUFFIX);
mySubclassSuffix.setText(javaSettings.SUBCLASS_NAME_SUFFIX);
myTestClassSuffix.setText(javaSettings.TEST_NAME_SUFFIX);
myCbGenerateFinalLocals.setSelected(javaSettings.GENERATE_FINAL_LOCALS);
myCbGenerateFinalParameters.setSelected(javaSettings.GENERATE_FINAL_PARAMETERS);
@@ -145,11 +153,15 @@ public class CodeStyleGenerationConfigurable implements CodeStyleConfigurable {
javaSettings.STATIC_FIELD_NAME_PREFIX = setPrefixSuffix(myStaticFieldPrefixField.getText(), true);
javaSettings.PARAMETER_NAME_PREFIX = setPrefixSuffix(myParameterPrefixField.getText(), true);
javaSettings.LOCAL_VARIABLE_NAME_PREFIX = setPrefixSuffix(myLocalVariablePrefixField.getText(), true);
javaSettings.SUBCLASS_NAME_PREFIX = setPrefixSuffix(mySubclassPrefix.getText(), true);
javaSettings.TEST_NAME_PREFIX = setPrefixSuffix(myTestClassPrefix.getText(), true);
javaSettings.FIELD_NAME_SUFFIX = setPrefixSuffix(myFieldSuffixField.getText(), false);
javaSettings.STATIC_FIELD_NAME_SUFFIX = setPrefixSuffix(myStaticFieldSuffixField.getText(), false);
javaSettings.PARAMETER_NAME_SUFFIX = setPrefixSuffix(myParameterSuffixField.getText(), false);
javaSettings.LOCAL_VARIABLE_NAME_SUFFIX = setPrefixSuffix(myLocalVariableSuffixField.getText(), false);
javaSettings.SUBCLASS_NAME_SUFFIX = setPrefixSuffix(mySubclassSuffix.getText(), false);
javaSettings.TEST_NAME_SUFFIX = setPrefixSuffix(myTestClassSuffix.getText(), false);
javaSettings.GENERATE_FINAL_LOCALS = myCbGenerateFinalLocals.isSelected();
javaSettings.GENERATE_FINAL_PARAMETERS = myCbGenerateFinalParameters.isSelected();
@@ -194,11 +206,15 @@ public class CodeStyleGenerationConfigurable implements CodeStyleConfigurable {
isModified |= isModified(myStaticFieldPrefixField, javaSettings.STATIC_FIELD_NAME_PREFIX);
isModified |= isModified(myParameterPrefixField, javaSettings.PARAMETER_NAME_PREFIX);
isModified |= isModified(myLocalVariablePrefixField, javaSettings.LOCAL_VARIABLE_NAME_PREFIX);
isModified |= isModified(mySubclassPrefix, javaSettings.SUBCLASS_NAME_PREFIX);
isModified |= isModified(myTestClassPrefix, javaSettings.TEST_NAME_PREFIX);
isModified |= isModified(myFieldSuffixField, javaSettings.FIELD_NAME_SUFFIX);
isModified |= isModified(myStaticFieldSuffixField, javaSettings.STATIC_FIELD_NAME_SUFFIX);
isModified |= isModified(myParameterSuffixField, javaSettings.PARAMETER_NAME_SUFFIX);
isModified |= isModified(myLocalVariableSuffixField, javaSettings.LOCAL_VARIABLE_NAME_SUFFIX);
isModified |= isModified(mySubclassSuffix, javaSettings.SUBCLASS_NAME_SUFFIX);
isModified |= isModified(myTestClassSuffix, javaSettings.TEST_NAME_SUFFIX);
isModified |= isModified(myCbGenerateFinalLocals, javaSettings.GENERATE_FINAL_LOCALS);
isModified |= isModified(myCbGenerateFinalParameters, javaSettings.GENERATE_FINAL_PARAMETERS);
@@ -16,6 +16,7 @@
package com.intellij.codeInsight.intention.impl;
import com.intellij.application.options.CodeStyle;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.CodeInsightUtil;
import com.intellij.codeInsight.FileModificationService;
@@ -48,13 +49,13 @@ import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -64,7 +65,6 @@ import java.util.List;
public class CreateSubclassAction extends BaseIntentionAction {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.ImplementAbstractClassAction");
private String myText = CodeInsightBundle.message("intention.implement.abstract.class.default.text");
@NonNls private static final String IMPL_SUFFIX = "Impl";
@Override
@NotNull
@@ -163,7 +163,8 @@ public class CreateSubclassAction extends BaseIntentionAction {
LOG.assertTrue(containingClass != null);
final PsiTypeParameterList oldTypeParameterList = aClass.getTypeParameterList();
PsiClass classFromText = JavaPsiFacade.getElementFactory(aClass.getProject()).createClass(aClass.getName() + IMPL_SUFFIX);
PsiClass classFromText = JavaPsiFacade.getElementFactory(aClass.getProject()).createClass(
suggestTargetClassName(aClass));
classFromText = (PsiClass)containingClass.addAfter(classFromText, aClass);
startTemplate(oldTypeParameterList, aClass.getProject(), aClass, classFromText, true);
}
@@ -179,12 +180,17 @@ public class CreateSubclassAction extends BaseIntentionAction {
@Nullable
public static CreateClassDialog chooseSubclassToCreate(PsiClass psiClass) {
return chooseSubclassToCreate(psiClass, suggestTargetClassName(psiClass));
}
@Nullable
public static CreateClassDialog chooseSubclassToCreate(PsiClass psiClass, final String targetClassName) {
final PsiDirectory sourceDir = psiClass.getContainingFile().getContainingDirectory();
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(psiClass.getProject()).getFileIndex();
final PsiPackage aPackage = sourceDir != null ? JavaDirectoryService.getInstance().getPackage(sourceDir) : null;
final CreateClassDialog dialog = new CreateClassDialog(
psiClass.getProject(), getTitle(psiClass),
psiClass.getName() + IMPL_SUFFIX,
targetClassName,
aPackage != null ? aPackage.getQualifiedName() : "",
CreateClassKind.CLASS, true, ModuleUtilCore.findModuleForPsiElement(psiClass)) {
@Override
@@ -205,6 +211,11 @@ public class CreateSubclassAction extends BaseIntentionAction {
return dialog;
}
public static String suggestTargetClassName(PsiClass psiClass) {
JavaCodeStyleSettings javaSettings = CodeStyle.getSettings(psiClass.getProject()).getCustomSettings(JavaCodeStyleSettings.class);
return javaSettings.SUBCLASS_NAME_PREFIX + psiClass.getName() + javaSettings.SUBCLASS_NAME_SUFFIX;
}
public static PsiClass createSubclass(final PsiClass psiClass, final PsiDirectory targetDirectory, final String className) {
return createSubclass(psiClass, targetDirectory, className, true);
}
@@ -37,11 +37,15 @@ public class JavaCodeStyleSettings extends CustomCodeStyleSettings implements Im
public String STATIC_FIELD_NAME_PREFIX = "";
public String PARAMETER_NAME_PREFIX = "";
public String LOCAL_VARIABLE_NAME_PREFIX = "";
public String TEST_NAME_PREFIX = "";
public String SUBCLASS_NAME_PREFIX = "";
public String FIELD_NAME_SUFFIX = "";
public String STATIC_FIELD_NAME_SUFFIX = "";
public String PARAMETER_NAME_SUFFIX = "";
public String LOCAL_VARIABLE_NAME_SUFFIX = "";
public String TEST_NAME_SUFFIX = "Test";
public String SUBCLASS_NAME_SUFFIX = "Impl";
public boolean PREFER_LONGER_NAMES = true;
@@ -16,6 +16,7 @@
package com.intellij.testIntegration.createTest;
import com.intellij.CommonBundle;
import com.intellij.application.options.CodeStyle;
import com.intellij.codeInsight.CodeInsightBundle;
import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix;
import com.intellij.icons.AllIcons;
@@ -47,6 +48,7 @@ import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.refactoring.PackageWrapper;
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesUtil;
import com.intellij.refactoring.ui.MemberSelectionTable;
@@ -119,7 +121,10 @@ public class CreateTestDialog extends DialogWrapper {
}
protected String suggestTestClassName(PsiClass targetClass) {
return targetClass.getName() + "Test";
JavaCodeStyleSettings customSettings = CodeStyle.getSettings(myProject).getCustomSettings(JavaCodeStyleSettings.class);
String prefix = customSettings.TEST_NAME_PREFIX;
String suffix = customSettings.TEST_NAME_SUFFIX;
return prefix + targetClass.getName() + suffix;
}
private boolean isSuperclassSelectedManually() {