From c6fbcb86a3f3a78d77b4ab357c181019cc41894d Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 10 Dec 2014 17:06:04 +0100 Subject: [PATCH] introduce: postpone warning that selection is invalid --- .../BaseExpressionToFieldHandler.java | 9 +++++++- .../introduceField/ElementToWorkOn.java | 23 ++++++++++--------- .../IntroduceParameterHandler.java | 12 +++++++--- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java index 75473959ddcc..862cd019fc48 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/BaseExpressionToFieldHandler.java @@ -452,7 +452,14 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase @Override public void pass(final ElementToWorkOn elementToWorkOn) { - if (elementToWorkOn == null) return; + if (elementToWorkOn == null) { + return; + } + + if (elementToWorkOn.getExpression() == null && elementToWorkOn.getLocalVariable() == null) { + ElementToWorkOn.showNothingSelectedErrorMessage(editor, getRefactoringName(), getHelpID(), project); + return; + } final boolean hasRunTemplate = LookupManager.getActiveLookup(editor) == null; if (elementToWorkOn.getExpression() == null) { diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/ElementToWorkOn.java b/java/java-impl/src/com/intellij/refactoring/introduceField/ElementToWorkOn.java index fbcdae7f796c..b1449bc92340 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/ElementToWorkOn.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/ElementToWorkOn.java @@ -171,22 +171,23 @@ public class ElementToWorkOn { expr = IntroduceVariableBase.getSelectedExpression(project, file, startOffset, endOffset); } - if (localVar == null) { - if (expr != null) { - final String errorMessage = IntroduceVariableBase.getErrorMessage(expr); - if (errorMessage != null) { - CommonRefactoringUtil.showErrorHint(project, editor, errorMessage, refactoringName, helpId); - return null; - } - } - if (expr == null) { - String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")); - CommonRefactoringUtil.showErrorHint(project, editor, message, refactoringName, helpId); + if (localVar == null && expr != null) { + final String errorMessage = IntroduceVariableBase.getErrorMessage(expr); + if (errorMessage != null) { + CommonRefactoringUtil.showErrorHint(project, editor, errorMessage, refactoringName, helpId); return null; } } return new ElementToWorkOn(localVar, expr); } + + public static void showNothingSelectedErrorMessage(final Editor editor, + final String refactoringName, + final String helpId, + final Project project) { + String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")); + CommonRefactoringUtil.showErrorHint(project, editor, message, refactoringName, helpId); + } public interface ElementsProcessor { boolean accept(ElementToWorkOn el); diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java index c31a29cfb90f..fec92750c507 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java @@ -24,6 +24,7 @@ */ package com.intellij.refactoring.introduceParameter; +import com.google.common.annotations.VisibleForTesting; import com.intellij.codeInsight.CodeInsightUtil; import com.intellij.codeInsight.FunctionalInterfaceSuggester; import com.intellij.codeInsight.completion.JavaCompletionUtil; @@ -83,7 +84,6 @@ import gnu.trove.TIntArrayList; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -114,7 +114,13 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase { @Override public void pass(final ElementToWorkOn elementToWorkOn) { if (elementToWorkOn == null) { - introduceStrategy(project, editor, file); + return; + } + + if (elementToWorkOn.getLocalVariable() == null && elementToWorkOn.getExpression() == null) { + if (!introduceStrategy(project, editor, file)) { + ElementToWorkOn.showNothingSelectedErrorMessage(editor, REFACTORING_NAME, HelpID.INTRODUCE_PARAMETER, project); + } return; } @@ -507,7 +513,7 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase { return myInplaceIntroduceParameterPopup; } - @TestOnly + @VisibleForTesting public boolean introduceStrategy(final Project project, final Editor editor, PsiFile file) { final SelectionModel selectionModel = editor.getSelectionModel(); if (selectionModel.hasSelection()) {