diff --git a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectDelegate.java b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectDelegate.java index 6dddcc5e4175..4baa821080f1 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectDelegate.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceparameterobject/JavaIntroduceParameterObjectDelegate.java @@ -22,7 +22,9 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.MoveDestination; +import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.changeSignature.*; import com.intellij.refactoring.introduceParameterObject.IntroduceParameterObjectClassDescriptor; import com.intellij.refactoring.introduceParameterObject.IntroduceParameterObjectDelegate; @@ -44,6 +46,16 @@ import java.util.List; public class JavaIntroduceParameterObjectDelegate extends IntroduceParameterObjectDelegate { + @Override + public boolean isEnabledOn(PsiElement element) { + return PsiTreeUtil.getParentOfType(element, PsiMethod.class, false) != null; + } + + @Override + public RefactoringActionHandler getHandler(PsiElement element) { + return new IntroduceParameterObjectHandler(); + } + @Override public ParameterInfoImpl createMergedParameterInfo(JavaIntroduceParameterObjectClassDescriptor descriptor, PsiMethod method, diff --git a/java/java-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java similarity index 50% rename from java/java-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java rename to platform/lang-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java index ec09e1c1fb34..f71a6d5ce08a 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/IntroduceParameterObjectAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,14 @@ */ package com.intellij.refactoring.actions; +import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.PsiNamedElement; import com.intellij.refactoring.RefactoringActionHandler; -import com.intellij.refactoring.introduceparameterobject.IntroduceParameterObjectHandler; +import com.intellij.refactoring.changeSignature.ParameterInfo; +import com.intellij.refactoring.introduceParameterObject.IntroduceParameterObjectClassDescriptor; +import com.intellij.refactoring.introduceParameterObject.IntroduceParameterObjectDelegate; import org.jetbrains.annotations.NotNull; public class IntroduceParameterObjectAction extends BaseRefactoringAction { @@ -30,10 +32,22 @@ public class IntroduceParameterObjectAction extends BaseRefactoringAction { } protected boolean isEnabledOnElements(@NotNull final PsiElement[] elements) { - return elements.length == 1 && PsiTreeUtil.getParentOfType(elements[0], PsiMethod.class, false) != null; + if (elements.length == 1) { + final IntroduceParameterObjectDelegate delegate = IntroduceParameterObjectDelegate.findDelegate(elements[0]); + if (delegate != null && delegate.isEnabledOn(elements[0])) { + return true; + } + } + return false; } protected RefactoringActionHandler getHandler(@NotNull DataContext context) { - return new IntroduceParameterObjectHandler(); + final PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(context); + if (element == null) { + return null; + } + final IntroduceParameterObjectDelegate> + delegate = IntroduceParameterObjectDelegate.findDelegate(element); + return delegate != null ? delegate.getHandler(element) : null; } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduceParameterObject/IntroduceParameterObjectDelegate.java b/platform/lang-impl/src/com/intellij/refactoring/introduceParameterObject/IntroduceParameterObjectDelegate.java index 200dafa1da64..614c2e6b3385 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduceParameterObject/IntroduceParameterObjectDelegate.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduceParameterObject/IntroduceParameterObjectDelegate.java @@ -19,12 +19,14 @@ import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiNamedElement; +import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.changeSignature.ChangeInfo; import com.intellij.refactoring.changeSignature.ParameterInfo; import com.intellij.refactoring.util.FixableUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.List; @@ -47,6 +49,11 @@ public abstract class IntroduceParameterObjectDelegate oldMethodParameters); diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml index c332d188420b..39a6890232b7 100644 --- a/platform/platform-resources/src/idea/LangActions.xml +++ b/platform/platform-resources/src/idea/LangActions.xml @@ -324,6 +324,7 @@ + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceParameterObjectDelegate.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceParameterObjectDelegate.java index 544fd5813447..26fa49c97fe3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceParameterObjectDelegate.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameterObject/GroovyIntroduceParameterObjectDelegate.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.PsiType; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.changeSignature.ChangeInfo; import com.intellij.refactoring.changeSignature.ParameterInfo; import com.intellij.refactoring.introduceParameterObject.IntroduceParameterObjectClassDescriptor; @@ -49,6 +50,16 @@ import java.util.List; public class GroovyIntroduceParameterObjectDelegate extends IntroduceParameterObjectDelegate { + @Override + public boolean isEnabledOn(PsiElement element) { + return false; + } + + @Override + public RefactoringActionHandler getHandler(PsiElement element) { + return null; + } + @Override public GrParameterInfo createMergedParameterInfo(GroovyIntroduceObjectClassDescriptor descriptor, GrMethod method, diff --git a/resources/src/idea/JavaActions.xml b/resources/src/idea/JavaActions.xml index c4da47998a0c..7f2100ed1913 100644 --- a/resources/src/idea/JavaActions.xml +++ b/resources/src/idea/JavaActions.xml @@ -92,10 +92,6 @@ - - - -