Extract delegate class action moved to lang-impl (take 2)

This commit is contained in:
Kirill.Safonov
2010-09-24 14:16:33 +04:00
parent 1aa4b59eb2
commit 05dfaa43de
6 changed files with 39 additions and 15 deletions
@@ -27,6 +27,7 @@ import com.intellij.refactoring.changeSignature.JavaChangeSignatureHandler;
import com.intellij.refactoring.extractInterface.ExtractInterfaceHandler;
import com.intellij.refactoring.extractMethod.ExtractMethodHandler;
import com.intellij.refactoring.extractSuperclass.ExtractSuperclassHandler;
import com.intellij.refactoring.extractclass.ExtractClassHandler;
import com.intellij.refactoring.introduceField.IntroduceConstantHandler;
import com.intellij.refactoring.introduceField.IntroduceFieldHandler;
import com.intellij.refactoring.introduceParameter.IntroduceParameterHandler;
@@ -91,6 +92,11 @@ public class JavaRefactoringSupportProvider extends RefactoringSupportProvider {
return new JavaChangeSignatureHandler();
}
@Override
public RefactoringActionHandler getExtractClassHandler() {
return new ExtractClassHandler();
}
public static boolean mayRenameInplace(PsiElement elementToRename, final PsiElement nameSuggestionContext) {
if (!(elementToRename instanceof PsiVariable)) return false;
if (nameSuggestionContext != null && nameSuggestionContext.getContainingFile() != elementToRename.getContainingFile()) return false;
@@ -25,16 +25,21 @@ import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactorJBundle;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.lang.ElementsHandler;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import org.jetbrains.annotations.NotNull;
public class ExtractClassHandler implements RefactoringActionHandler {
public class ExtractClassHandler implements ElementsHandler {
protected static String getHelpID() {
return HelpID.ExtractClass;
}
@Override
public boolean isEnabledOnElements(PsiElement[] elements) {
return elements.length == 1 && PsiTreeUtil.getParentOfType(elements[0], PsiClass.class, false) != null;
}
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
final ScrollingModel scrollingModel = editor.getScrollingModel();
scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE);
@@ -124,4 +124,13 @@ public abstract class RefactoringSupportProvider {
public ChangeSignatureHandler getChangeSignatureHandler() { return null; }
public boolean isInplaceRenameAvailable(PsiElement element, PsiElement context) { return false; }
/**
* @return handler for extracting [delegate] class in this language
* @see com.intellij.refactoring.RefactoringActionHandler
*/
@Nullable
public RefactoringActionHandler getExtractClassHandler() {
return null;
}
}
@@ -15,24 +15,31 @@
*/
package com.intellij.refactoring.actions;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.psi.PsiClass;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageRefactoringSupport;
import com.intellij.lang.refactoring.RefactoringSupportProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.RefactoringActionHandler;
import com.intellij.refactoring.extractclass.ExtractClassHandler;
import com.intellij.refactoring.lang.ElementsHandler;
import org.jetbrains.annotations.NotNull;
public class ExtractClassAction extends BaseRefactoringAction{
public class ExtractClassAction extends BasePlatformRefactoringAction {
protected RefactoringActionHandler getHandler(DataContext context){
return new ExtractClassHandler();
}
@Override
protected RefactoringActionHandler getRefactoringHandler(@NotNull RefactoringSupportProvider provider) {
return provider.getExtractClassHandler();
}
public boolean isAvailableInEditorOnly(){
return false;
}
public boolean isEnabledOnElements(PsiElement[] elements) {
return elements.length == 1 && PsiTreeUtil.getParentOfType(elements[0], PsiClass.class, false) != null;
if (elements.length > 0) {
final Language language = elements[0].getLanguage();
final RefactoringActionHandler handler = getRefactoringHandler(LanguageRefactoringSupport.INSTANCE.forLanguage(language));
return handler instanceof ElementsHandler && ((ElementsHandler)handler).isEnabledOnElements(elements);
}
return false;
}
}
@@ -282,6 +282,7 @@
<action id="SafeDelete" class="com.intellij.refactoring.actions.SafeDeleteAction"/>
<separator/>
<action id="ExtractMethod" class="com.intellij.refactoring.actions.ExtractMethodAction"/>
<action id="ExtractClass" class="com.intellij.refactoring.actions.ExtractClassAction"/>
<action id="IntroduceVariable" class="com.intellij.refactoring.actions.IntroduceVariableAction"/>
<action id="IntroduceConstant" class="com.intellij.refactoring.actions.IntroduceConstantAction"/>
<action id="IntroduceField" class="com.intellij.refactoring.actions.IntroduceFieldAction"/>
-4
View File
@@ -186,10 +186,6 @@
<add-to-group group-id="RefactoringMenu" anchor="after" relative-to-action="ExtractMethod"/>
</action>
<action id="ExtractClass" class="com.intellij.refactoring.actions.ExtractClassAction">
<add-to-group group-id="RefactoringMenu" anchor="after" relative-to-action="ReplaceMethodWithMethodObject"/>
</action>
<group id="BuildMenu" popup="true">
<action id="CompileDirty" class="com.intellij.compiler.actions.CompileDirtyAction" icon="/actions/compile.png"/>
<action id="MakeModule" class="com.intellij.compiler.actions.MakeModuleAction"/>