From 0ff8a661736ea457dc50bd31d84387a1b34c4dc8 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 5 Jan 2018 12:59:00 +0100 Subject: [PATCH] allow to configure prefix/suffix for test/implementation (IDEA-86808/IDEA-161300) --- .../CodeStyleGenerationConfigurable.form | 54 ++++++++++++++++++- .../CodeStyleGenerationConfigurable.java | 16 ++++++ .../intention/impl/CreateSubclassAction.java | 19 +++++-- .../psi/codeStyle/JavaCodeStyleSettings.java | 4 ++ .../createTest/CreateTestDialog.java | 7 ++- 5 files changed, 93 insertions(+), 7 deletions(-) diff --git a/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.form b/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.form index 305498ba756f..d230242f2d3e 100644 --- a/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.form +++ b/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.form @@ -40,7 +40,7 @@ - + @@ -112,7 +112,9 @@ - + + + @@ -162,6 +164,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.java b/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.java index 4ce5092d2592..ab273103518b 100644 --- a/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.java +++ b/java/java-impl/src/com/intellij/application/options/CodeStyleGenerationConfigurable.java @@ -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 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); diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java index 5dc93389a049..8b8bf484f653 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java @@ -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); } diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/JavaCodeStyleSettings.java b/java/java-impl/src/com/intellij/psi/codeStyle/JavaCodeStyleSettings.java index 4d514a438b26..ae23e49e0619 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/JavaCodeStyleSettings.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/JavaCodeStyleSettings.java @@ -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; diff --git a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java index dfcf46afc401..05d42b47c927 100644 --- a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java +++ b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestDialog.java @@ -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() {