diff --git a/java/java-impl/src/META-INF/JavaPlugin.xml b/java/java-impl/src/META-INF/JavaPlugin.xml
index 8458eed7be24..3c416d95f474 100644
--- a/java/java-impl/src/META-INF/JavaPlugin.xml
+++ b/java/java-impl/src/META-INF/JavaPlugin.xml
@@ -233,11 +233,11 @@
-
+
-
+
-
-
diff --git a/plugins/devkit/resources/org/jetbrains/idea/devkit/DevKitBundle.properties b/plugins/devkit/resources/org/jetbrains/idea/devkit/DevKitBundle.properties
index 71a58be911ec..9f5083dd896e 100644
--- a/plugins/devkit/resources/org/jetbrains/idea/devkit/DevKitBundle.properties
+++ b/plugins/devkit/resources/org/jetbrains/idea/devkit/DevKitBundle.properties
@@ -197,7 +197,3 @@ implemented.at.runtime.jamElement=JAM Element implemented at runtime
line.marker.tooltip.extension.declaration={2} declaration in {3}
line.marker.tooltip.extension.point.declaration={2} EP declaration in {3}
inspections.usage.uelement.as.psi=Usage of UElement as PsiElement is not recommended
-
-inspections.rename.dialog.title=Rename Inspection Description File and Change the Short Name
-inspections.rename.dialog.description=Do you want to also rename the inspection description file and change the short name?\nWarning: it may break existing inspection profiles and suppression comments.
-inspections.rename.updating.short.name="Updating inspection short name..."
\ No newline at end of file
diff --git a/plugins/devkit/src/refactoring/InspectionClassRenameProcessor.java b/plugins/devkit/src/refactoring/InspectionClassRenameProcessor.java
deleted file mode 100644
index 76340b7c826e..000000000000
--- a/plugins/devkit/src/refactoring/InspectionClassRenameProcessor.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
- */
-package org.jetbrains.idea.devkit.refactoring;
-
-import com.intellij.ide.util.PropertiesComponent;
-import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.application.Result;
-import com.intellij.openapi.command.WriteCommandAction;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtilCore;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.*;
-import com.intellij.psi.util.InheritanceUtil;
-import com.intellij.refactoring.RefactoringFactory;
-import com.intellij.refactoring.RenameRefactoring;
-import com.intellij.refactoring.listeners.RefactoringElementListener;
-import com.intellij.refactoring.rename.RenameJavaClassProcessor;
-import com.intellij.usageView.UsageInfo;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.idea.devkit.DevKitBundle;
-import org.jetbrains.idea.devkit.inspections.DescriptionType;
-import org.jetbrains.idea.devkit.inspections.InspectionDescriptionInfo;
-import org.jetbrains.idea.devkit.util.PsiUtil;
-
-//TODO support not only Java
-public class InspectionClassRenameProcessor extends RenameJavaClassProcessor {
- private static final String RENAME_DESCRIPTION_AND_SHORT_NAME_DO_NOT_ASK_AGAIN_OPTION =
- "inspection.rename.description.and.short.name.do.not.ask.again";
-
- @Override
- public boolean canProcessElement(@NotNull PsiElement element) {
- return isInspectionPsiClass(element);
- }
-
- @Override
- public void renameElement(PsiElement element, String newName, UsageInfo[] usages,
- @Nullable RefactoringElementListener listener) throws IncorrectOperationException {
- super.renameElement(element, newName, usages, listener);
-
- PsiClass psiClass = (PsiClass)element;
- Module module = ModuleUtilCore.findModuleForPsiElement(psiClass);
- if (module == null) {
- return;
- }
-
- InspectionDescriptionInfo inspectionDescriptionInfo = InspectionDescriptionInfo.create(module, psiClass);
- PsiFile descriptionFile = inspectionDescriptionInfo.getDescriptionFile();
- if (descriptionFile == null) {
- return;
- }
- VirtualFile descriptionVirtualFile = descriptionFile.getVirtualFile();
- if (descriptionVirtualFile == null) {
- return;
- }
-
- String descriptionFileExtension = StringUtil.notNullize(descriptionVirtualFile.getExtension());
- String newDescriptionFileName = StringUtil.trimEnd(newName, "Inspection");
- if (newDescriptionFileName.equals(descriptionFile.getName())) {
- return;
- }
- String newDescriptionFileNameWithExtension = newDescriptionFileName + "." + descriptionFileExtension;
-
- ApplicationManager.getApplication().invokeLater(() -> {
- if (!PropertiesComponent.getInstance().getBoolean(RENAME_DESCRIPTION_AND_SHORT_NAME_DO_NOT_ASK_AGAIN_OPTION)) {
- int dialogExitCode = Messages.showYesNoDialog(
- element.getProject(),
- DevKitBundle.message("inspections.rename.dialog.description"),
- DevKitBundle.message("inspections.rename.dialog.title"),
- Messages.getQuestionIcon(),
- new InspectionClassRenameDoNotAskOption());
- if (dialogExitCode != Messages.YES) {
- return;
- }
- }
-
- //TODO it'd be better to do both atomically (and support undo)
- updateShortNameMethod(inspectionDescriptionInfo.getShortNameMethod(), newDescriptionFileName);
- renameDescriptionFile(descriptionFile, newDescriptionFileNameWithExtension);
- });
- }
-
-
- private static boolean isInspectionPsiClass(@NotNull PsiElement element) {
- if (!(element instanceof PsiClass)) {
- return false;
- }
- if (!PsiUtil.isPluginProject(element.getProject())) {
- return false;
- }
- return InheritanceUtil.isInheritor((PsiClass)element, DescriptionType.INSPECTION.getClassName());
- }
-
- private static void updateShortNameMethod(PsiMethod shortNameMethod, String newName) {
- if (shortNameMethod == null) {
- // getShortName() is not overriden; probably it will be fine after changing the class name
- // (otherwise InspectionDescriptionNotFoundInspection will inform about not found description).
- return;
- }
-
- PsiCodeBlock shortNameMethodBody = shortNameMethod.getBody();
- if (shortNameMethodBody == null) {
- return;
- }
-
- PsiStatement[] statements = shortNameMethodBody.getStatements();
- if (statements.length != 1 || !(statements[0] instanceof PsiReturnStatement)) {
- return;
- }
-
- PsiStatement returnStatement = statements[0];
- Project project = shortNameMethod.getProject();
- PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
- new WriteCommandAction(project,
- DevKitBundle.message("inspections.rename.updating.short.name"),
- shortNameMethod.getContainingFile()) {
- @Override
- protected void run(@NotNull Result result) {
- returnStatement.replace(elementFactory.createStatementFromText("return \"" + newName + "\";", shortNameMethod));
- }
- }.execute();
- }
-
- private static void renameDescriptionFile(PsiFile descriptionFile, String newName) {
- RenameRefactoring rename = RefactoringFactory.getInstance(descriptionFile.getProject()).createRename(descriptionFile, newName);
- rename.run();
- }
-
-
- private static class InspectionClassRenameDoNotAskOption extends DialogWrapper.DoNotAskOption.Adapter {
- @Override
- public void rememberChoice(boolean isSelected, int exitCode) {
- PropertiesComponent.getInstance().setValue(RENAME_DESCRIPTION_AND_SHORT_NAME_DO_NOT_ASK_AGAIN_OPTION, isSelected);
- }
-
- @Override
- public boolean shouldSaveOptionsOnCancel() {
- return true;
- }
- }
-}