From 7d96e45dfc50bf415dbb6097cee6527c88bafdea Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 21 Mar 2011 15:54:21 +0100 Subject: [PATCH] forbid introduce refactorings on resource from try-with-resources (IDEA-66788 ) --- .../introduceField/IntroduceConstantHandler.java | 6 ++++++ .../refactoring/introduceField/IntroduceFieldHandler.java | 6 ++++++ .../introduceParameter/IntroduceParameterHandler.java | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantHandler.java index 2a9b3b59603b..78ba6bd436ea 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceConstantHandler.java @@ -70,6 +70,12 @@ public class IntroduceConstantHandler extends BaseExpressionToFieldHandler { } protected boolean invokeImpl(final Project project, final PsiLocalVariable localVariable, final Editor editor) { + final PsiElement parent = localVariable.getParent(); + if (!(parent instanceof PsiDeclarationStatement)) { + String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")); + CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, getHelpID()); + return false; + } final LocalToFieldHandler localToFieldHandler = new LocalToFieldHandler(project, true){ @Override protected Settings showRefactoringDialog(PsiClass aClass, diff --git a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java index fcdbfefdb9e6..5ec92ee88f56 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceField/IntroduceFieldHandler.java @@ -155,6 +155,12 @@ public class IntroduceFieldHandler extends BaseExpressionToFieldHandler { } protected boolean invokeImpl(final Project project, PsiLocalVariable localVariable, final Editor editor) { + final PsiElement parent = localVariable.getParent(); + if (!(parent instanceof PsiDeclarationStatement)) { + String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")); + CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, getHelpID()); + return false; + } LocalToFieldHandler localToFieldHandler = new LocalToFieldHandler(project, false){ @Override protected Settings showRefactoringDialog(PsiClass aClass, 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 beebdf1f3e01..b8d27999117c 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/IntroduceParameterHandler.java @@ -127,6 +127,14 @@ public class IntroduceParameterHandler extends IntroduceHandlerBase implements R return false; } + if (localVar != null) { + final PsiElement parent = localVar.getParent(); + if (!(parent instanceof PsiDeclarationStatement)) { + String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("error.wrong.caret.position.local.or.expression.name")); + showErrorMessage(myProject, message, editor); + return false; + } + } if (method == null) { String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("is.not.supported.in.the.current.context", REFACTORING_NAME));