IDEA-238099 - moved test cases to an appropriate place, fixed an error which could lead to unexpected element deletion

GitOrigin-RevId: f79de804e604675868d58715b65fd291da8e5483
This commit is contained in:
Ilyas Selimov
2020-05-21 19:23:58 +07:00
committed by intellij-monorepo-bot
parent 2cce738f33
commit 80ee8725fd
6 changed files with 18 additions and 47 deletions

View File

@@ -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();

View File

@@ -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";
}
}