From b708f2006e052aa26b5495be5073c0a84cc47810 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 14 Apr 2014 20:21:52 +0200 Subject: [PATCH] remove unused assignment: do not move the transformed statement up as it could change the semantic and is not evident (IDEA-123841) --- .../codeInspection/defUse/DefUseInspection.java | 9 +++++++-- .../unusedAssignment/afterSideEffect.java | 15 +++++++++++++++ .../unusedAssignment/beforeSideEffect.java | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterSideEffect.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeSideEffect.java diff --git a/java/java-impl/src/com/intellij/codeInspection/defUse/DefUseInspection.java b/java/java-impl/src/com/intellij/codeInspection/defUse/DefUseInspection.java index a017bd1d11c5..edd718b0bd7f 100644 --- a/java/java-impl/src/com/intellij/codeInspection/defUse/DefUseInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/defUse/DefUseInspection.java @@ -118,8 +118,13 @@ public class DefUseInspection extends DefUseInspectionBase { else if (res == RemoveUnusedVariableUtil.MAKE_STATEMENT) { final PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory(); final PsiStatement statementFromText = factory.createStatementFromText(psiInitializer.getText() + ";", null); - declaration.getParent().addAfter(statementFromText, declaration); - elementToDelete.delete(); + final PsiElement parent = elementToDelete.getParent(); + if (parent instanceof PsiExpressionStatement) { + parent.replace(statementFromText); + } else { + declaration.getParent().addAfter(statementFromText, declaration); + elementToDelete.delete(); + } } } catch (IncorrectOperationException e) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterSideEffect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterSideEffect.java new file mode 100644 index 000000000000..acbbf18820de --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterSideEffect.java @@ -0,0 +1,15 @@ +// "Remove redundant assignment" "true" +class A { + A a = null; + String m(String str) { + return str; + } + + { + String ss = ""; + + System.out.println(); + + a.m(ss); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeSideEffect.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeSideEffect.java new file mode 100644 index 000000000000..014f3fcb3358 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeSideEffect.java @@ -0,0 +1,15 @@ +// "Remove redundant assignment" "true" +class A { + A a = null; + String m(String str) { + return str; + } + + { + String ss = ""; + + System.out.println(); + + ss = a.m(ss); + } +} \ No newline at end of file