diff --git a/platform/lang-api/src/com/intellij/lang/refactoring/InlineHandler.java b/platform/lang-api/src/com/intellij/lang/refactoring/InlineHandler.java index 5cc16068e480..dfc2fba37a4c 100644 --- a/platform/lang-api/src/com/intellij/lang/refactoring/InlineHandler.java +++ b/platform/lang-api/src/com/intellij/lang/refactoring/InlineHandler.java @@ -41,6 +41,15 @@ public interface InlineHandler { * was triggered should be inlined. */ boolean isOnlyOneReferenceToInline(); + + /** + * Special settings for the case when inline cannot be performed due to already reported (by error hint) problem + */ + Settings CANNOT_INLINE_SETTINGS = new Settings() { + public boolean isOnlyOneReferenceToInline() { + return false; + } + }; } /** @@ -55,7 +64,7 @@ public interface InlineHandler { /** * @param element inlined element */ - void removeDefinition(PsiElement element); + void removeDefinition(PsiElement element, Settings settings); /** * @param element inlined element diff --git a/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java b/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java index ed13b39c8031..f64c066f8252 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java @@ -17,6 +17,7 @@ package com.intellij.refactoring.inline; import com.intellij.codeInsight.TargetElementUtilBase; +import com.intellij.codeInsight.hint.HintManager; import com.intellij.lang.Language; import com.intellij.lang.refactoring.InlineHandler; import com.intellij.lang.refactoring.InlineHandlers; @@ -48,7 +49,9 @@ public class GenericInlineHandler { public static boolean invoke(final PsiElement element, final Editor editor, final InlineHandler languageSpecific) { final PsiReference invocationReference = TargetElementUtilBase.findReference(editor); final InlineHandler.Settings settings = languageSpecific.prepareInlineElement(element, editor, invocationReference != null); - if (settings == null) return false; + if (settings == null || settings == InlineHandler.Settings.CANNOT_INLINE_SETTINGS) { + return settings != null; + } final Collection allReferences = settings.isOnlyOneReferenceToInline() ? Collections.singleton(invocationReference) : ReferencesSearch.search(element).findAll(); @@ -123,7 +126,7 @@ public class GenericInlineHandler { } if (!settings.isOnlyOneReferenceToInline()) { - languageSpecific.removeDefinition(element); + languageSpecific.removeDefinition(element, settings); } } }, RefactoringBundle.message("inline.command", subj), null); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineHandler.java index 6a911c0d287c..8e0e3d0816c5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/inline/GroovyInlineHandler.java @@ -63,7 +63,7 @@ public class GroovyInlineHandler implements InlineHandler { return null; } - public void removeDefinition(final PsiElement element) { + public void removeDefinition(final PsiElement element, Settings settings) { final PsiElement owner = element.getParent().getParent(); if (element instanceof GrVariable && owner instanceof GrVariableDeclarationOwner) {