mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
Java inspection: In "Join Declaration and Assignment" intention action warn about side effects of the initializer being removed (IDEA-157727)
This commit is contained in:
+7
-3
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.editorActions.DeclarationJoinLinesHandler;
|
||||
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
|
||||
import com.intellij.codeInspection.RemoveInitializerFix;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -70,7 +71,7 @@ public class JoinDeclarationAndAssignmentAction extends PsiElementBaseIntentionA
|
||||
if (ReferencesSearch.search(variable, new LocalSearchScope(rExpression), false).findFirst() != null) {
|
||||
return null;
|
||||
}
|
||||
return Pair.create(variable, assignmentExpression);
|
||||
return Pair.createNonNull(variable, assignmentExpression);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,12 +105,15 @@ public class JoinDeclarationAndAssignmentAction extends PsiElementBaseIntentionA
|
||||
if (!FileModificationService.getInstance().preparePsiElementForWrite(element)) return;
|
||||
|
||||
final Pair<PsiLocalVariable, PsiAssignmentExpression> pair = getPair(element);
|
||||
if (pair == null) return;
|
||||
final PsiLocalVariable variable = pair.getFirst();
|
||||
final PsiAssignmentExpression assignmentExpression = pair.getSecond();
|
||||
final PsiExpression initializer = variable.getInitializer();
|
||||
if (initializer != null && assignmentExpression.getOperationTokenType() == JavaTokenType.EQ) {
|
||||
RemoveInitializerFix.sideEffectAwareRemove(project, initializer, initializer, variable);
|
||||
}
|
||||
final PsiExpression initializerExpression = DeclarationJoinLinesHandler.getInitializerExpression(variable, assignmentExpression);
|
||||
variable.setInitializer(initializerExpression);
|
||||
assignmentExpression.delete();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -49,10 +49,10 @@ public class RemoveInitializerFix implements LocalQuickFix {
|
||||
sideEffectAwareRemove(project, (PsiExpression)psiInitializer, psiInitializer, variable);
|
||||
}
|
||||
|
||||
protected static void sideEffectAwareRemove(Project project,
|
||||
PsiExpression psiInitializer,
|
||||
PsiElement elementToDelete,
|
||||
PsiVariable variable) {
|
||||
public static void sideEffectAwareRemove(Project project,
|
||||
PsiExpression psiInitializer,
|
||||
PsiElement elementToDelete,
|
||||
PsiVariable variable) {
|
||||
if (!FileModificationService.getInstance().prepareFileForWrite(elementToDelete.getContainingFile())) return;
|
||||
|
||||
final PsiElement declaration = variable.getParent();
|
||||
@@ -82,7 +82,7 @@ public class RemoveInitializerFix implements LocalQuickFix {
|
||||
if (parent instanceof PsiExpressionStatement) {
|
||||
parent.replace(statementFromText);
|
||||
} else {
|
||||
declaration.getParent().addAfter(statementFromText, declaration);
|
||||
declaration.getParent().addBefore(statementFromText, declaration);
|
||||
elementToDelete.delete();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user