mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
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:
committed by
intellij-monorepo-bot
parent
2cce738f33
commit
80ee8725fd
@@ -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();
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// "Remove redundant assignment" "true"
|
||||
class Foo {
|
||||
int sent;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// "Remove redundant assignment" "true"
|
||||
class Foo {
|
||||
void bar(int begin) {
|
||||
int current;
|
||||
@@ -1,3 +1,4 @@
|
||||
// "Remove redundant assignment" "true"
|
||||
class Foo {
|
||||
int sent;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// "Remove redundant assignment" "true"
|
||||
class Foo {
|
||||
void bar(int begin) {
|
||||
int current;
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user