From 38e2d2cd6c8aba6f895027e56a9da3105ac3438c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 11 Jun 2015 23:24:33 +0300 Subject: [PATCH] disable replace constructor with builder/factory for enums (IDEA-141299) --- .../ReplaceConstructorWithBuilderAction.java | 2 +- .../ReplaceConstructorWithFactoryAction.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithBuilderAction.java b/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithBuilderAction.java index 0775c65258a8..b71b01bef480 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithBuilderAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithBuilderAction.java @@ -39,7 +39,7 @@ public class ReplaceConstructorWithBuilderAction extends BaseRefactoringAction{ final int offset = editor.getCaretModel().getOffset(); final PsiElement elementAt = file.findElementAt(offset); final PsiClass psiClass = ReplaceConstructorWithBuilderHandler.getParentNamedClass(elementAt); - return psiClass != null && psiClass.getConstructors().length > 0; + return psiClass != null && psiClass.getConstructors().length > 0 && !psiClass.isEnum(); } protected boolean isEnabledOnElements(@NotNull final PsiElement[] elements) { diff --git a/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithFactoryAction.java b/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithFactoryAction.java index 1d32d0ee5183..a464fad6902a 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithFactoryAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/ReplaceConstructorWithFactoryAction.java @@ -17,8 +17,10 @@ package com.intellij.refactoring.actions; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.psi.PsiMethod; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.replaceConstructorWithFactory.ReplaceConstructorWithFactoryHandler; @@ -32,10 +34,25 @@ public class ReplaceConstructorWithFactoryAction extends BaseRefactoringAction { return false; } + @Override protected boolean isEnabledOnElements(@NotNull PsiElement[] elements) { - return elements.length == 1 && - (elements[0] instanceof PsiMethod && ((PsiMethod)elements[0]).isConstructor() || elements[0] instanceof PsiClass) - && elements[0].getLanguage().isKindOf(JavaLanguage.INSTANCE); + return false; + } + + @Override + protected boolean isAvailableOnElementInEditorAndFile(@NotNull PsiElement element, + @NotNull Editor editor, + @NotNull PsiFile file, + @NotNull DataContext context) { + return (element instanceof PsiMethod && + ((PsiMethod)element).isConstructor() && + acceptClass(((PsiMethod)element).getContainingClass()) || + acceptClass(element)) + && element.getLanguage().isKindOf(JavaLanguage.INSTANCE); + } + + private static boolean acceptClass(PsiElement element) { + return element instanceof PsiClass && !((PsiClass)element).isEnum(); } protected RefactoringActionHandler getHandler(@NotNull DataContext dataContext) {