diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java index 4cb731eaf449..34369427a4f3 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassKind.java @@ -43,12 +43,12 @@ public enum CreateClassKind implements ClassKind { @Override public String getDescription() { - return myKind.getNominativeName(); + return myKind.nominative(); } @Override public String getDescriptionAccusative() { - return myKind.getAccusativeName(); + return myKind.accusative(); } @NotNull diff --git a/java/java-analysis-impl/src/com/intellij/lang/jvm/actions/commonActionTypes.kt b/java/java-analysis-impl/src/com/intellij/lang/jvm/actions/commonActionTypes.kt index 5d0a44a1aa15..f3ab58344d9f 100644 --- a/java/java-analysis-impl/src/com/intellij/lang/jvm/actions/commonActionTypes.kt +++ b/java/java-analysis-impl/src/com/intellij/lang/jvm/actions/commonActionTypes.kt @@ -2,51 +2,53 @@ package com.intellij.lang.jvm.actions import com.intellij.codeInsight.daemon.QuickFixBundle.message +import com.intellij.codeInspection.CommonQuickFixBundle +import com.intellij.psi.util.JavaElementKind object CreateMethodActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.method.from.usage.text", requireNotNull(data?.entityName)) + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.METHOD.accusative(), data?.entityName!!) } } object CreateAbstractMethodActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.abstract.method.from.usage.text", requireNotNull(data?.entityName)) + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.ABSTRACT_METHOD.accusative(), data?.entityName!!) } } object CreateFieldActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.field.from.usage.text", requireNotNull(data?.entityName)) + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.FIELD.accusative(), data?.entityName!!) } } object CreateConstantActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.constant.from.usage.text", requireNotNull(data?.entityName)) + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.CONSTANT.accusative(), data?.entityName!!) } } object CreateEnumConstantActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.enum.constant.from.usage.text", requireNotNull(data?.entityName)) + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.ENUM_CONSTANT.accusative(), data?.entityName!!) } } object CreatePropertyActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.property.from.usage.text", requireNotNull(data?.entityName)) + return message("create.property.from.usage.text", data?.entityName!!) } } object CreateReadOnlyPropertyActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.read.only.property.from.usage.text", requireNotNull(data?.entityName)) + return message("create.read.only.property.from.usage.text", data?.entityName!!) } } object CreateWriteOnlyPropertyActionGroup : JvmActionGroup { override fun getDisplayText(data: JvmActionGroup.RenderData?): String { - return message("create.write.only.property.from.usage.text", requireNotNull(data?.entityName)) + return message("create.write.only.property.from.usage.text", data?.entityName!!) } } diff --git a/java/java-analysis-impl/src/messages/QuickFixBundle.properties b/java/java-analysis-impl/src/messages/QuickFixBundle.properties index 3d2543d151f0..05f15d8a85aa 100644 --- a/java/java-analysis-impl/src/messages/QuickFixBundle.properties +++ b/java/java-analysis-impl/src/messages/QuickFixBundle.properties @@ -66,9 +66,7 @@ create.class.from.usage.family=Create Class from Usage create.class.from.usage.text=Create {0} ''{1}'' create.inner.class.from.usage.text=Create inner {0} ''{1}'' create.constant.from.usage.family=Create Constant From Usage -create.constant.from.usage.text=Create constant field ''{0}'' create.constant.from.usage.full.text=Create constant field ''{0}'' in ''{1}'' -create.enum.constant.from.usage.text=Create enum constant ''{0}'' create.constructor.from.new.family=Create Constructor from New create.constructor.from.new.text=Create constructor create.constructor.from.super.call.family=Create Constructor From super() Call @@ -78,10 +76,8 @@ create.constructor.text=Create constructor in ''{0}'' create.constructor.matching.super=Create constructor matching super super.class.constructors.chooser.title=Choose Super Class Constructors create.field.from.usage.family=Create field from Usage -create.field.from.usage.text=Create field ''{0}'' create.field.from.usage.full.text=Create field ''{0}'' in ''{1}'' target.class.chooser.title=Choose Target Class -create.class.title=Create {0} new.method.body.template.error.text=Please Correct "New Method Body" Template new.method.body.template.error.title=File Template Error cannot.create.java.file.error.text=Cannot create {0}.java in {1}: {2} @@ -93,7 +89,6 @@ create.getter.for.field=Create getter for ''{0}'' create.setter.for.field=Create setter for ''{0}'' create.getter.and.setter.for.field=Create getter and setter for ''{0}'' create.local.from.usage.family=Create Local from Usage -create.local.from.usage.text=Create local variable ''{0}'' create.local.from.instanceof.usage.family=Create Local Var from instanceof Usage create.local.from.instanceof.usage.text=Insert ''({0}){1}'' declaration create.member.from.usage.family=Create member from usage @@ -103,10 +98,8 @@ create.method.from.usage.full.text=Create method ''{0}'' in ''{1}'' create.type.parameter.from.usage.family=Create type parameter from usage create.type.parameter.from.usage.text=Create type parameter ''{0}'' create.type.parameter.from.usage.chooser.title=Place to add type parameter -create.abstract.method.from.usage.text=Create abstract method ''{0}'' create.abstract.method.from.usage.full.text=Create abstract method ''{0}'' in ''{1}'' create.parameter.from.usage.family=Create parameter from Usage -create.parameter.from.usage.text=Create parameter ''{0}'' create.property.from.usage.family=Create property From Usage create.property.from.usage.text=Create property ''{0}'' create.property.from.usage.full.text=Create property ''{0}'' in ''{1}'' @@ -124,8 +117,6 @@ delete.catch.family=Delete Catch delete.catch.text=Delete catch for ''{0}'' delete.body.text=Delete method body enable.optimize.imports.on.the.fly=Enable 'Settings | Editor | General | Auto Import | Optimize imports on the fly' -generalize.catch.family=Generalize Catch -generalize.catch.text=Generalize catch for ''{0}'' to ''{1}'' generify.family=Generify File generify.text=Try to generify ''{0}'' implement.methods.fix=Implement methods @@ -172,10 +163,7 @@ negation.broader.scope.text=Change to ''!({0})'' optimize.imports.fix=Optimize imports remove.qualifier.fix=Remove qualifier remove.unused.parameter.family=Remove unused parameter -remove.unused.parameter.text=Remove parameter ''{0}'' remove.unused.variable.family=Remove unused variable -remove.unused.variable=Remove variable ''{0}'' -remove.unused.field=Remove field ''{0}'' rename.wrong.reference.family=Rename Wrong Reference rename.wrong.reference.text=Rename reference reuse.variable.declaration.family=Reuse variable declaration @@ -222,9 +210,6 @@ add.interface.to.implements.list=Make ''{0}'' implement ''{1}'' remove.interface.from.implements.list=Make ''{0}'' not implement ''{1}'' convert.method.to.constructor=Make method constructor -create.class.text=Create class {0} -create.interface.text=Create interface {0} -create.package.text=Create package {0} create.field.text=Create field {0} create.property.text=Create property {0} add.constructor.parameter.name=Add constructor parameter diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromNewFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromNewFix.java index 55ccdd66e015..d6e50294e866 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromNewFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromNewFix.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.ExpectedTypesProvider; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.template.Template; import com.intellij.codeInsight.template.TemplateBuilderImpl; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.editor.Editor; @@ -245,7 +246,7 @@ public class CreateClassFromNewFix extends CreateFromUsageBaseFix { } protected String getText(final String varName) { - return QuickFixBundle.message("create.class.from.usage.text", getKind().getDescriptionAccusative(), varName); + return CommonQuickFixBundle.message("fix.create.title.x", getKind().getDescriptionAccusative(), varName); } protected static PsiJavaCodeReferenceElement getReferenceElement(PsiNewExpression expression) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageFix.java index 5a110093543d..517b1413293b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateClassFromUsageFix.java @@ -16,7 +16,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.FileModificationService; -import com.intellij.codeInsight.daemon.QuickFixBundle; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.ide.util.PsiNavigationSupport; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; @@ -41,7 +41,7 @@ public class CreateClassFromUsageFix extends CreateClassFromUsageBaseFix { @Override public String getText(String varName) { - return QuickFixBundle.message("create.class.from.usage.text", myKind.getDescriptionAccusative(), varName); + return CommonQuickFixBundle.message("fix.create.title.x", myKind.getDescriptionAccusative(), varName); } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java index 7fd672417444..2000a0c7fb3e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFieldFromUsageFix.java @@ -19,11 +19,13 @@ import com.intellij.codeInsight.ExpectedTypeInfo; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.template.Template; import com.intellij.codeInsight.template.TemplateEditingAdapter; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; @@ -42,7 +44,7 @@ public class CreateFieldFromUsageFix extends CreateVarFromUsageFix { @Override protected String getText(String varName) { - return QuickFixBundle.message("create.field.from.usage.text", varName); + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.FIELD.accusative(), varName); } protected boolean createConstantField() { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java index d525faab2f12..f48ae80c6c4d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java @@ -27,6 +27,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.codeInsight.lookup.LookupFocusDegree; import com.intellij.codeInsight.template.ExpressionUtil; import com.intellij.codeInsight.template.*; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.fileTemplates.FileTemplateUtil; @@ -363,7 +364,7 @@ public class CreateFromUsageUtils { final PsiDirectory targetDirectory; if (!ApplicationManager.getApplication().isUnitTestMode()) { Project project = manager.getProject(); - String title = QuickFixBundle.message("create.class.title", StringUtil.capitalize(classKind.getDescriptionAccusative())); + String title = CommonQuickFixBundle.message("fix.create.title", StringUtil.capitalize(classKind.getDescriptionAccusative())); CreateClassDialog dialog = new CreateClassDialog(project, title, name, qualifierName, classKind, false, module){ @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateLocalFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateLocalFromUsageFix.java index af93a09a2442..5c3e5c74f2b8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateLocalFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateLocalFromUsageFix.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.intention.impl.TypeExpression; import com.intellij.codeInsight.template.Template; import com.intellij.codeInsight.template.TemplateBuilderImpl; import com.intellij.codeInsight.template.TemplateEditingAdapter; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; @@ -30,6 +31,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.introduceParameter.AbstractJavaInplaceIntroducer; @@ -50,7 +52,12 @@ public class CreateLocalFromUsageFix extends CreateVarFromUsageFix { @Override public String getText(String varName) { - return QuickFixBundle.message("create.local.from.usage.text", varName); + return getMessage(varName); + } + + public @NotNull + static String getMessage(String varName) { + return CommonQuickFixBundle.message("fix.create.title.x.from.usage", JavaElementKind.LOCAL_VARIABLE.accusative(), varName); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java index 07457da36424..75083991b7ef 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateParameterFromUsageFix.java @@ -16,6 +16,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.daemon.QuickFixBundle; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.ide.util.SuperMethodWarningUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.WriteCommandAction; @@ -25,6 +26,7 @@ import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.psi.*; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.RefactoringBundle; @@ -66,7 +68,7 @@ public class CreateParameterFromUsageFix extends CreateVarFromUsageFix { @Override public String getText(String varName) { - return QuickFixBundle.message("create.parameter.from.usage.text", varName); + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.PARAMETER.accusative(), varName); } @Nullable diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedParameterFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedParameterFix.java index 42f343bf474b..c904a3bdc8be 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedParameterFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedParameterFix.java @@ -6,6 +6,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -13,6 +14,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiParameter; +import com.intellij.psi.util.JavaElementKind; import com.intellij.refactoring.changeSignature.ChangeSignatureProcessor; import com.intellij.refactoring.changeSignature.ParameterInfoImpl; import org.jetbrains.annotations.NotNull; @@ -29,7 +31,7 @@ public class RemoveUnusedParameterFix extends LocalQuickFixAndIntentionActionOnP @NotNull @Override public String getText() { - return QuickFixBundle.message("remove.unused.parameter.text", myName); + return CommonQuickFixBundle.message("fix.remove.title.x", JavaElementKind.PARAMETER.accusative(), myName); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableFix.java index 608587954def..b80fbce270e0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveUnusedVariableFix.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.highlighting.HighlightManager; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; @@ -28,6 +29,7 @@ import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiExpressionTrimRenderer; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtilCore; @@ -49,8 +51,7 @@ public class RemoveUnusedVariableFix implements IntentionAction { @Override @NotNull public String getText() { - return QuickFixBundle.message(myVariable instanceof PsiField ? "remove.unused.field" : "remove.unused.variable", - myVariable.getName()); + return CommonQuickFixBundle.message("fix.remove.title.x", JavaElementKind.fromElement(myVariable).accusative(), myVariable.getName()); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java index 57e1a8e6cf0b..f8dcd977a61c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/quickFix/CreateClassOrPackageFix.java @@ -15,9 +15,9 @@ */ package com.intellij.codeInsight.daemon.quickFix; -import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind; import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; import com.intellij.ide.util.DirectoryChooserUtil; import com.intellij.openapi.application.ApplicationManager; @@ -34,11 +34,15 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.ClassKind; import com.intellij.psi.util.CreateClassUtil; +import com.intellij.psi.util.JavaElementKind; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.StringTokenizer; /** * @author peter @@ -106,9 +110,9 @@ public class CreateClassOrPackageFix extends LocalQuickFixAndIntentionActionOnPs @Override @NotNull public String getText() { - return QuickFixBundle.message( - myClassKind == ClassKind.INTERFACE ? "create.interface.text" : myClassKind != null ? "create.class.text" : "create.package.text", - myPresentation); + return CommonQuickFixBundle.message("fix.create.title.x", + (myClassKind == null ? JavaElementKind.PACKAGE : myClassKind.getElementKind()).accusative(), + myPresentation); } @Override diff --git a/java/java-impl/src/com/intellij/lang/java/actions/CreateEnumConstantAction.kt b/java/java-impl/src/com/intellij/lang/java/actions/CreateEnumConstantAction.kt index ced0d7248f14..5fa5f3e8cafa 100644 --- a/java/java-impl/src/com/intellij/lang/java/actions/CreateEnumConstantAction.kt +++ b/java/java-impl/src/com/intellij/lang/java/actions/CreateEnumConstantAction.kt @@ -3,11 +3,11 @@ package com.intellij.lang.java.actions import com.intellij.codeInsight.CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement import com.intellij.codeInsight.ExpectedTypeUtil -import com.intellij.codeInsight.daemon.QuickFixBundle import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageBaseFix.positionCursor import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageBaseFix.startTemplate import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression import com.intellij.codeInsight.template.TemplateBuilderImpl +import com.intellij.codeInspection.CommonQuickFixBundle import com.intellij.lang.jvm.actions.CreateEnumConstantActionGroup import com.intellij.lang.jvm.actions.CreateFieldRequest import com.intellij.lang.jvm.actions.ExpectedTypes @@ -18,6 +18,7 @@ import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiClass import com.intellij.psi.PsiEnumConstant import com.intellij.psi.PsiFile +import com.intellij.psi.util.JavaElementKind import com.intellij.psi.util.PsiTreeUtil internal class CreateEnumConstantAction( @@ -27,7 +28,7 @@ internal class CreateEnumConstantAction( override fun getActionGroup(): JvmActionGroup = CreateEnumConstantActionGroup - override fun getText(): String = QuickFixBundle.message("create.enum.constant.from.usage.text", request.fieldName) + override fun getText(): String = CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.ENUM_CONSTANT.accusative(), request.fieldName) override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val name = request.fieldName diff --git a/java/java-psi-api/src/com/intellij/psi/util/ClassKind.java b/java/java-psi-api/src/com/intellij/psi/util/ClassKind.java index d7429eb53a27..31c474939f06 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/ClassKind.java +++ b/java/java-psi-api/src/com/intellij/psi/util/ClassKind.java @@ -19,5 +19,15 @@ package com.intellij.psi.util; * @author peter */ public enum ClassKind { - CLASS, INTERFACE, ENUM, ANNOTATION + CLASS(JavaElementKind.CLASS), INTERFACE(JavaElementKind.INTERFACE), ENUM(JavaElementKind.ENUM), ANNOTATION(JavaElementKind.ANNOTATION); + + private final JavaElementKind myElementKind; + + ClassKind(JavaElementKind kind) { + myElementKind = kind; + } + + public JavaElementKind getElementKind() { + return myElementKind; + } } diff --git a/java/java-psi-api/src/com/intellij/psi/util/JavaElementKind.java b/java/java-psi-api/src/com/intellij/psi/util/JavaElementKind.java index 05d1e833704d..72677bc14c91 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/JavaElementKind.java +++ b/java/java-psi-api/src/com/intellij/psi/util/JavaElementKind.java @@ -13,6 +13,7 @@ import java.util.Locale; * The main purpose of this enum is to be able to display localized element name in UI */ public enum JavaElementKind { + ABSTRACT_METHOD, ANNOTATION, CLASS, CONSTANT, @@ -33,13 +34,19 @@ public enum JavaElementKind { UNKNOWN, VARIABLE; + /** + * @return human-readable name of the item in nominative case + */ @Nls - public String getNominativeName() { + public @NotNull String nominative() { return JavaCoreBundle.message("element." + name().toLowerCase(Locale.ROOT), 0); } + /** + * @return human-readable name of the item in accusative case + */ @Nls - public String getAccusativeName() { + public @NotNull String accusative() { return JavaCoreBundle.message("element." + name().toLowerCase(Locale.ROOT), 1); } @@ -64,6 +71,9 @@ public enum JavaElementKind { if (((PsiMethod)element).isConstructor()) { return CONSTRUCTOR; } + if (((PsiMethod)element).hasModifierProperty(PsiModifier.ABSTRACT)) { + return ABSTRACT_METHOD; + } return METHOD; } if (element instanceof PsiField) { diff --git a/java/java-psi-api/src/messages/JavaCoreBundle.properties b/java/java-psi-api/src/messages/JavaCoreBundle.properties index 2a1a1cdefa70..9c65e3ec4bcd 100644 --- a/java/java-psi-api/src/messages/JavaCoreBundle.properties +++ b/java/java-psi-api/src/messages/JavaCoreBundle.properties @@ -17,18 +17,20 @@ jdk.14.language.level.description=14 - Switch expressions jdk.14.preview.language.level.description=14 (Preview) - Records, patterns, text blocks jdk.X.language.level.description=X - Experimental features +# These constants are used from JavaElementKind element.class=class element.interface=interface element.record=record element.initializer=initializer element.field=field element.constant=constant field -element.enum.constant=enum constant -element.record.component=record component +element.enum_constant=enum constant +element.record_component=record component element.parameter=parameter -element.pattern.variable=pattern variable -element.local.variable=local variable +element.pattern_variable=pattern variable +element.local_variable=local variable element.variable=variable +element.abstract_method=abstract method element.method=method element.constructor=constructor element.package=package diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateFromUsageOrderTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateFromUsageOrderTest.kt index 93e63b345d34..e289e8d71d67 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateFromUsageOrderTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/CreateFromUsageOrderTest.kt @@ -2,7 +2,10 @@ package com.intellij.java.codeInsight.daemon.quickFix import com.intellij.codeInsight.daemon.QuickFixBundle.message +import com.intellij.codeInsight.daemon.impl.quickfix.CreateLocalFromUsageFix +import com.intellij.codeInspection.CommonQuickFixBundle import com.intellij.psi.codeStyle.JavaCodeStyleSettings +import com.intellij.psi.util.JavaElementKind import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase class CreateFromUsageOrderTest : LightJavaCodeInsightFixtureTestCase() { @@ -10,7 +13,7 @@ class CreateFromUsageOrderTest : LightJavaCodeInsightFixtureTestCase() { fun `test local variable first with default settings`() { myFixture.configureByText("_.java", "class A { void usage() { foo(lllbar); } }") val action = myFixture.availableIntentions.first() - assertEquals(message("create.local.from.usage.text", "lllbar"), action.text) + assertEquals(CreateLocalFromUsageFix.getMessage("lllbar"), action.text) } fun `test constant first when uppercase`() { @@ -24,7 +27,7 @@ class CreateFromUsageOrderTest : LightJavaCodeInsightFixtureTestCase() { settings.LOCAL_VARIABLE_NAME_PREFIX = "lll" myFixture.configureByText("_.java", "class A { void usage() { foo(lllbar); } }") val action = myFixture.availableIntentions.first() - assertEquals(message("create.local.from.usage.text", "lllbar"), action.text) + assertEquals(CreateLocalFromUsageFix.getMessage("lllbar"), action.text) } } @@ -33,7 +36,7 @@ class CreateFromUsageOrderTest : LightJavaCodeInsightFixtureTestCase() { settings.PARAMETER_NAME_PREFIX = "ppp" myFixture.configureByText("_.java", "class A { void usage() { foo(pppbar); } }") val action = myFixture.availableIntentions.first() - assertEquals(message("create.parameter.from.usage.text", "pppbar"), action.text) + assertEquals(CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.PARAMETER.accusative(), "pppbar"), action.text) } } diff --git a/platform/platform-resources-en/src/messages/CommonQuickFixBundle.properties b/platform/platform-resources-en/src/messages/CommonQuickFixBundle.properties index b5916e330367..8eb888899579 100644 --- a/platform/platform-resources-en/src/messages/CommonQuickFixBundle.properties +++ b/platform/platform-resources-en/src/messages/CommonQuickFixBundle.properties @@ -8,6 +8,7 @@ fix.unwrap=Unwrap ''{0}'' fix.unwrap.statement=Unwrap ''{0}'' statement fix.remove=Remove ''{0}'' +fix.remove.title.x=Remove {0} ''{1}'' fix.remove.redundant=Remove redundant ''{0}'' fix.remove.statement=Remove ''{0}'' statement @@ -18,4 +19,8 @@ fix.use=Use ''{0}'' fix.call=Call ''{0}'' -fix.simplify=Simplify \ No newline at end of file +fix.simplify=Simplify + +fix.create.title=Create {0} +fix.create.title.x=Create {0} ''{1}'' +fix.create.title.x.from.usage=Create {0} ''{1}'' from usage \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties index 44b93475c3c5..bbe6e85f0c6d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/resources/messages/InspectionGadgetsBundle.properties @@ -1405,9 +1405,9 @@ loop.variable.not.updated.inside.loop.option.nonlocal=Ignore possible non-local utility.class.without.private.constructor.option=Ignore classes with only a main method super.class.logger.option=Ignore classes with an accessible logger declared in a superclass static.method.only.used.in.one.class.display.name=Static member only used from one other class -static.method.only.used.in.one.class.problem.descriptor=Static {0, choice, 1#method|2#field} #ref{0, choice, 1#()|2#} is only used from class ''{1}'' #loc -static.method.only.used.in.one.anonymous.class.problem.descriptor=Static {0, choice, 1#method|2#field} #ref{0, choice, 1#()|2#} is only used from an anonymous class derived from ''{1}'' #loc -static.method.only.used.in.one.class.quickfix=Move {0, choice, 1#method|2#field} to usage class +static.method.only.used.in.one.class.problem.descriptor=Static {0} #ref is only used from class ''{1}'' #loc +static.method.only.used.in.one.anonymous.class.problem.descriptor=Static {0} #ref is only used from an anonymous class derived from ''{1}'' #loc +static.method.only.used.in.one.class.quickfix=Move {0} to usage class static.method.only.used.in.one.class.ignore.test.option=Ignore when only used from a test class static.method.only.used.in.one.class.ignore.anonymous.option=Ignore when only used from an anonymous class static.method.only.used.in.one.class.ignore.on.conflicts=Ignore when the method cannot be moved without conflicts diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java index e906bb556e2e..48aa8f5843f0 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/StaticMethodOnlyUsedInOneClassInspection.java @@ -14,6 +14,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.psi.*; import com.intellij.psi.search.searches.MethodReferencesSearch; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.RefactoringActionHandler; @@ -328,32 +329,32 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti @Override @NotNull protected String buildErrorString(Object... infos) { - final PsiMember member = (PsiMember)infos[0]; + final JavaElementKind kind = (JavaElementKind)infos[0]; final PsiClass usageClass = (PsiClass)infos[1]; return (usageClass instanceof PsiAnonymousClass) ? InspectionGadgetsBundle.message("static.method.only.used.in.one.anonymous.class.problem.descriptor", - (member instanceof PsiMethod) ? 1 : 2, + kind.nominative(), ((PsiAnonymousClass)usageClass).getBaseClassReference().getText()) : InspectionGadgetsBundle.message("static.method.only.used.in.one.class.problem.descriptor", - (member instanceof PsiMethod) ? 1 : 2, + kind.nominative(), usageClass.getName()); } @Override @Nullable protected InspectionGadgetsFix buildFix(Object... infos) { - final PsiMember member = (PsiMember)infos[0]; + final JavaElementKind kind = (JavaElementKind)infos[0]; final PsiClass usageClass = (PsiClass)infos[1]; - return new StaticMethodOnlyUsedInOneClassFix(usageClass, member instanceof PsiMethod); + return new StaticMethodOnlyUsedInOneClassFix(usageClass, kind); } private static class StaticMethodOnlyUsedInOneClassFix extends RefactoringInspectionGadgetsFix { private final SmartPsiElementPointer myUsageClass; - private final boolean myMethod; + private final JavaElementKind myKind; - StaticMethodOnlyUsedInOneClassFix(PsiClass usageClass, boolean method) { - myMethod = method; + StaticMethodOnlyUsedInOneClassFix(PsiClass usageClass, JavaElementKind kind) { + myKind = kind; final SmartPointerManager pointerManager = SmartPointerManager.getInstance(usageClass.getProject()); myUsageClass = pointerManager.createSmartPsiElementPointer(usageClass); } @@ -361,7 +362,7 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti @Override @NotNull public String getFamilyName() { - return InspectionGadgetsBundle.message("static.method.only.used.in.one.class.quickfix", myMethod ? 1 : 2); + return InspectionGadgetsBundle.message("static.method.only.used.in.one.class.quickfix", myKind.accusative()); } @NotNull @@ -392,7 +393,7 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti if (DeclarationSearchUtils.isTooExpensiveToSearch(field, true)) return; final PsiClass usageClass = getUsageClass(field); if (usageClass == null) return; - registerFieldError(field, field, usageClass); + registerFieldError(field, JavaElementKind.FIELD, usageClass); } @Override @@ -409,7 +410,7 @@ public class StaticMethodOnlyUsedInOneClassInspection extends BaseGlobalInspecti if (DeclarationSearchUtils.isTooExpensiveToSearch(method, true)) return; final PsiClass usageClass = getUsageClass(method); if (usageClass == null) return; - registerMethodError(method, method, usageClass); + registerMethodError(method, JavaElementKind.METHOD, usageClass); } private PsiClass getUsageClass(PsiMember member) { diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/CreateClassFixTest.java b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/CreateClassFixTest.java index b38911db6784..fcef52932a1e 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/CreateClassFixTest.java +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/CreateClassFixTest.java @@ -3,10 +3,12 @@ package org.jetbrains.idea.devkit.codeInsight; import com.intellij.codeInsight.daemon.QuickFixBundle; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInspection.CommonQuickFixBundle; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.JavaElementKind; import com.intellij.testFramework.EdtTestUtil; import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.builders.JavaModuleFixtureBuilder; @@ -81,7 +83,8 @@ public class CreateClassFixTest extends UsefulTestCase { public void runSingle() { EdtTestUtil.runInEdtAndWait(() -> { IntentionAction resultAction = null; - final String createAction = QuickFixBundle.message(myCreateClass ? "create.class.text" : "create.interface.text", myTestName); + final String createAction = CommonQuickFixBundle.message( + "fix.create.title.x", (myCreateClass ? JavaElementKind.CLASS : JavaElementKind.INTERFACE).accusative(), myTestName); final List actions = myFixture.getAvailableIntentions(getSourceRoot() + "/plugin" + myTestName + ".xml"); for (IntentionAction action : actions) { if (Comparing.strEqual(action.getText(), createAction)) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/elements/CreateEnumConstantAction.kt b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/elements/CreateEnumConstantAction.kt index f0fed68d01ef..67556dcdef69 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/elements/CreateEnumConstantAction.kt +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/elements/CreateEnumConstantAction.kt @@ -2,11 +2,11 @@ package org.jetbrains.plugins.groovy.annotator.intentions.elements import com.intellij.codeInsight.CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement -import com.intellij.codeInsight.daemon.QuickFixBundle import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageBaseFix.positionCursor import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageBaseFix.startTemplate import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression import com.intellij.codeInsight.template.TemplateBuilderImpl +import com.intellij.codeInspection.CommonQuickFixBundle import com.intellij.lang.jvm.actions.CreateEnumConstantActionGroup import com.intellij.lang.jvm.actions.CreateFieldRequest import com.intellij.lang.jvm.actions.ExpectedTypes @@ -14,6 +14,7 @@ import com.intellij.lang.jvm.actions.JvmActionGroup import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile +import com.intellij.psi.util.JavaElementKind import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition @@ -26,7 +27,7 @@ internal class CreateEnumConstantAction( override fun getActionGroup(): JvmActionGroup = CreateEnumConstantActionGroup - override fun getText(): String = QuickFixBundle.message("create.enum.constant.from.usage.text", request.fieldName) + override fun getText(): String = CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.ENUM_CONSTANT.accusative(), request.fieldName) override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val name = request.fieldName diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java index 8cf51c55d942..4a6973192cbf 100644 --- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java +++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/codeInsight/inspections/JavaFxUnresolvedFxIdReferenceInspection.java @@ -13,6 +13,7 @@ import com.intellij.lang.LanguageNamesValidation; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleSettings; +import com.intellij.psi.util.JavaElementKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; @@ -100,7 +101,7 @@ public class JavaFxUnresolvedFxIdReferenceInspection extends XmlSuppressableInsp @NotNull @Override public String getName() { - return QuickFixBundle.message("create.field.from.usage.text", myCanonicalName); + return CommonQuickFixBundle.message("fix.create.title.x", JavaElementKind.FIELD.accusative(), myCanonicalName); } @NotNull