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() {