diff --git a/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java b/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java index a6068358e7d2..478860f23851 100644 --- a/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java +++ b/java/java-impl/src/com/intellij/codeInspection/RemoveAssignmentFix.java @@ -46,13 +46,14 @@ public class RemoveAssignmentFix extends RemoveInitializerFix { PsiAssignmentExpression parentExpr = (PsiAssignmentExpression)parent; PsiElement parentParentExpr = parentExpr.getParent(); - PsiExpression rExpr = getRExpression(parentExpr); - if (mayBeFixedWithoutSideEffect(parentParentExpr, rExpr)) { + PsiExpression initializer = getInitializer(parentExpr); + if (mayBeFixedWithoutSideEffect(parentParentExpr, initializer)) { + if (!FileModificationService.getInstance().prepareFileForWrite(parentParentExpr.getContainingFile())) return; WriteAction.run(() -> { if (parentParentExpr instanceof PsiParenthesizedExpression) { - parentParentExpr.replace(rExpr); + parentParentExpr.replace(initializer); } else { - parentExpr.replace(rExpr); + parentExpr.replace(initializer); } }); return; @@ -61,10 +62,11 @@ public class RemoveAssignmentFix extends RemoveInitializerFix { PsiElement resolve = resolveExpression(element, parentExpr); if (!(resolve instanceof PsiVariable)) return; - sideEffectAwareRemove(project, rExpr, parent, (PsiVariable)resolve); + sideEffectAwareRemove(project, initializer, parent, (PsiVariable)resolve); } - private @Nullable PsiExpression getRExpression(@NotNull PsiAssignmentExpression assignmentExpr) { + @Nullable + private static PsiExpression getInitializer(@NotNull PsiAssignmentExpression assignmentExpr) { final IElementType operationSign = assignmentExpr.getOperationTokenType(); PsiExpression result = assignmentExpr.getRExpression(); if (JavaTokenType.EQ != operationSign && result != null) { @@ -73,16 +75,14 @@ public class RemoveAssignmentFix extends RemoveInitializerFix { return result; } - private boolean mayBeFixedWithoutSideEffect(@NotNull PsiElement expr, @Nullable PsiExpression rExpr) { - if (rExpr == null) return false; - if (expr instanceof PsiExpression || expr instanceof PsiExpressionList || expr instanceof PsiReturnStatement - || expr instanceof PsiLocalVariable) { - return FileModificationService.getInstance().prepareFileForWrite(expr.getContainingFile()); - } - return false; + private static boolean mayBeFixedWithoutSideEffect(@NotNull PsiElement expr, @Nullable PsiExpression initializer) { + if (initializer == null) return false; + return expr instanceof PsiExpression || expr instanceof PsiExpressionList || expr instanceof PsiReturnStatement + || expr instanceof PsiLocalVariable; } - private @Nullable PsiElement resolveExpression(@NotNull PsiElement expr, @NotNull PsiAssignmentExpression parentExpr) { + @Nullable + private static PsiElement resolveExpression(@NotNull PsiElement expr, @NotNull PsiAssignmentExpression parentExpr) { PsiElement result = null; if (expr instanceof PsiReferenceExpression) { result = ((PsiReferenceExpression)expr).resolve(); diff --git a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.after.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterFieldChainAssignment.java similarity index 82% rename from java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.after.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterFieldChainAssignment.java index 22713dcea801..d473d7d06bf3 100644 --- a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.after.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterFieldChainAssignment.java @@ -1,3 +1,4 @@ +// "Remove redundant assignment" "true" class Foo { int sent; diff --git a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.after.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterLocalVarChainAssignment.java similarity index 81% rename from java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.after.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterLocalVarChainAssignment.java index 6b15e90036cc..b395e1e3a175 100644 --- a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.after.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/afterLocalVarChainAssignment.java @@ -1,3 +1,4 @@ +// "Remove redundant assignment" "true" class Foo { void bar(int begin) { int current; diff --git a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeFieldChainAssignment.java similarity index 83% rename from java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeFieldChainAssignment.java index 27af27802558..c407e8fab990 100644 --- a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfMemberField.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeFieldChainAssignment.java @@ -1,3 +1,4 @@ +// "Remove redundant assignment" "true" class Foo { int sent; diff --git a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeLocalVarChainAssignment.java similarity index 82% rename from java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.java rename to java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeLocalVarChainAssignment.java index 075899a3fd84..27aa0297e7f4 100644 --- a/java/java-tests/testData/codeInspection/removeAssignmentFix/AssignmentOfLocalVariable.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/unusedAssignment/beforeLocalVarChainAssignment.java @@ -1,3 +1,4 @@ +// "Remove redundant assignment" "true" class Foo { void bar(int begin) { int current; diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/RemoveAssignmentFixTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/RemoveAssignmentFixTest.java deleted file mode 100644 index bf195bb3c33f..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/RemoveAssignmentFixTest.java +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.intellij.java.codeInspection; - -import com.intellij.JavaTestUtil; -import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInspection.defUse.DefUseInspection; -import com.intellij.java.JavaBundle; -import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase; - -public class RemoveAssignmentFixTest extends LightJavaCodeInsightFixtureTestCase { - - public void testAssignmentOfLocalVariable() { - doTest(); - } - - public void testAssignmentOfMemberField() { - doTest(); - } - - private void doTest() { - myFixture.configureByFile(getTestName(false) + ".java"); - myFixture.enableInspections(DefUseInspection.class); - final IntentionAction intention = myFixture.findSingleIntention(JavaBundle.message("inspection.unused.assignment.remove.assignment.quickfix")); - assertNotNull(intention); - myFixture.launchAction(intention); - myFixture.checkResultByFile(getTestName(false) + ".after.java"); - } - - @Override - protected String getTestDataPath() { - return JavaTestUtil.getJavaTestDataPath() + "/codeInspection/removeAssignmentFix"; - } -}