From c4d28fafbc4b53330091848546e7ce9293b6de1e Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 17 Aug 2010 19:14:33 +0400 Subject: [PATCH] mxml & xslt refactorings --- .../refactoring/RefactoringSupportProvider.java | 3 ++- .../actions/BasePlatformRefactoringAction.java | 16 ++++++++++++++-- .../XsltRefactoringSupportProvider.java | 8 ++++++++ plugins/xpath/xpath-view/src/META-INF/plugin.xml | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/platform/lang-api/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java b/platform/lang-api/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java index e4cb70c4a2b0..631069baf557 100644 --- a/platform/lang-api/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java +++ b/platform/lang-api/src/com/intellij/lang/refactoring/RefactoringSupportProvider.java @@ -18,6 +18,7 @@ package com.intellij.lang.refactoring; import com.intellij.psi.PsiElement; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.changeSignature.ChangeSignatureHandler; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -33,7 +34,7 @@ public abstract class RefactoringSupportProvider { * @param context refactoring context * @return true if refactoring support is available in given context */ - public boolean isAvailable(PsiElement context) { return true; } + public boolean isAvailable(@NotNull PsiElement context) { return true; } /** * Checks if the Safe Delete refactoring can be applied to the specified element diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java index 3620d1b59301..f97d7f6c8b61 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java @@ -22,10 +22,13 @@ import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.extensions.ExtensionPointListener; import com.intellij.openapi.extensions.PluginDescriptor; +import com.intellij.psi.PsiElement; import com.intellij.refactoring.RefactoringActionHandler; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + /** * @author yole */ @@ -48,8 +51,17 @@ public abstract class BasePlatformRefactoringAction extends BaseRefactoringActio protected final RefactoringActionHandler getHandler(DataContext dataContext) { final Language language = LangDataKeys.LANGUAGE.getData(dataContext); if (language != null) { - RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forLanguage(language); - return provider == null ? null : getRefactoringHandler(provider); + List providers = LanguageRefactoringSupport.INSTANCE.allForLanguage(language); + if (providers.isEmpty()) return null; + if (providers.size() == 1) return getRefactoringHandler(providers.get(0)); + PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext); + if (element != null) { + for (RefactoringSupportProvider provider : providers) { + if (provider.isAvailable(element)) { + return getRefactoringHandler(provider); + } + } + } } return null; } diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/XsltRefactoringSupportProvider.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/XsltRefactoringSupportProvider.java index 32989ba86e23..d938addccf3a 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/XsltRefactoringSupportProvider.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/refactoring/XsltRefactoringSupportProvider.java @@ -16,14 +16,22 @@ package org.intellij.lang.xpath.xslt.refactoring; import com.intellij.lang.refactoring.RefactoringSupportProvider; +import com.intellij.psi.PsiElement; import com.intellij.refactoring.RefactoringActionHandler; +import org.intellij.lang.xpath.xslt.XsltSupport; import org.intellij.lang.xpath.xslt.refactoring.introduceParameter.XsltIntroduceParameterAction; +import org.jetbrains.annotations.NotNull; /** * @author Dmitry Avdeev */ public class XsltRefactoringSupportProvider extends RefactoringSupportProvider { + @Override + public boolean isAvailable(@NotNull PsiElement context) { + return XsltSupport.isXsltFile(context.getContainingFile()); + } + @Override public RefactoringActionHandler getIntroduceParameterHandler() { return new XsltIntroduceParameterAction(); diff --git a/plugins/xpath/xpath-view/src/META-INF/plugin.xml b/plugins/xpath/xpath-view/src/META-INF/plugin.xml index f8d0cf860e6a..ae61779d7e12 100644 --- a/plugins/xpath/xpath-view/src/META-INF/plugin.xml +++ b/plugins/xpath/xpath-view/src/META-INF/plugin.xml @@ -90,6 +90,7 @@ + org.intellij.lang.xpath.xslt.intentions.AddOptionalArgumentsIntention