mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
when "if" or a loop body is deleted, replace it with an empty code block
to preserve PSI-text consistency
This commit is contained in:
@@ -88,8 +88,8 @@ public class DeleteCatchFix implements IntentionAction {
|
||||
}
|
||||
}
|
||||
else {
|
||||
tryParent.addBefore(tryBlock, tryStatement);
|
||||
lastAddedStatement = tryBlock;
|
||||
tryStatement.replace(tryBlock);
|
||||
return tryBlock;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,12 +244,15 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement {
|
||||
}
|
||||
|
||||
private static PsiBlockStatement wrapWithCodeBlock(PsiStatement replacement) {
|
||||
PsiBlockStatement newBlock = (PsiBlockStatement)
|
||||
JavaPsiFacade.getElementFactory(replacement.getProject()).createStatementFromText("{}", null);
|
||||
PsiBlockStatement newBlock = createBlockStatement(replacement.getProject());
|
||||
newBlock.getCodeBlock().add(replacement);
|
||||
return newBlock;
|
||||
}
|
||||
|
||||
private static PsiBlockStatement createBlockStatement(Project project) {
|
||||
return (PsiBlockStatement)JavaPsiFacade.getElementFactory(project).createStatementFromText("{}", null);
|
||||
}
|
||||
|
||||
private static void inlineBlockStatements(@NotNull PsiStatement orig, @NotNull PsiBlockStatement statement, PsiElement parent) {
|
||||
// See IDEADEV-24277
|
||||
// Code block can only be inlined into another (parent) code block.
|
||||
|
||||
@@ -19,15 +19,14 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.TreeUtil;
|
||||
import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.TreeUtil;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PsiDoWhileStatementImpl extends CompositePsiElement implements PsiDoWhileStatement, Constants {
|
||||
public class PsiDoWhileStatementImpl extends PsiLoopStatementImpl implements PsiDoWhileStatement, Constants {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.tree.java.PsiDoWhileStatementImpl");
|
||||
|
||||
public PsiDoWhileStatementImpl() {
|
||||
|
||||
@@ -19,19 +19,16 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
|
||||
import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.TreeElement;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.scope.util.PsiScopesUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PsiForStatementImpl extends CompositePsiElement implements PsiForStatement, Constants {
|
||||
public class PsiForStatementImpl extends PsiLoopStatementImpl implements PsiForStatement, Constants {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.tree.java.PsiForStatementImpl");
|
||||
|
||||
public PsiForStatementImpl() {
|
||||
@@ -174,16 +171,8 @@ public class PsiForStatementImpl extends CompositePsiElement implements PsiForSt
|
||||
|
||||
@Override
|
||||
public void deleteChildInternal(@NotNull ASTNode child) {
|
||||
final boolean isForInitialization = getChildRole(child) == ChildRole.FOR_INITIALIZATION;
|
||||
|
||||
if (isForInitialization) {
|
||||
try {
|
||||
final PsiStatement emptyStatement = JavaPsiFacade.getInstance(getProject()).getElementFactory().createStatementFromText(";", null);
|
||||
super.replaceChildInternal(child, (TreeElement)SourceTreeToPsiMap.psiElementToTree(emptyStatement));
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
if (getChildRole(child) == ChildRole.FOR_INITIALIZATION) {
|
||||
replaceChildInternal(child, (TreeElement)JavaPsiFacade.getElementFactory(getProject()).createStatementFromText(";", null));
|
||||
}
|
||||
else {
|
||||
super.deleteChildInternal(child);
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
@@ -30,7 +29,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
/**
|
||||
* @author dsl
|
||||
*/
|
||||
public class PsiForeachStatementImpl extends CompositePsiElement implements PsiForeachStatement, Constants {
|
||||
public class PsiForeachStatementImpl extends PsiLoopStatementImpl implements PsiForeachStatement, Constants {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.tree.java.PsiForeachStatementImpl");
|
||||
public PsiForeachStatementImpl() {
|
||||
super(FOREACH_STATEMENT);
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.ElementType;
|
||||
import com.intellij.psi.impl.source.tree.TreeElement;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -42,7 +43,10 @@ public class PsiIfStatementImpl extends CompositePsiElement implements PsiIfStat
|
||||
|
||||
@Override
|
||||
public void deleteChildInternal(@NotNull ASTNode child) {
|
||||
if (child == getElseBranch()) {
|
||||
if (child == getThenBranch()) {
|
||||
replaceChildInternal(child, (TreeElement)JavaPsiFacade.getElementFactory(getProject()).createStatementFromText("{}", null));
|
||||
return;
|
||||
} else if (child == getElseBranch()) {
|
||||
ASTNode elseKeyword = findChildByRole(ChildRole.ELSE_KEYWORD);
|
||||
if (elseKeyword != null) {
|
||||
super.deleteChildInternal(elseKeyword);
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright 2000-2018 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.psi.impl.source.tree.java;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.PsiLoopStatement;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.tree.TreeElement;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
abstract class PsiLoopStatementImpl extends CompositePsiElement implements PsiLoopStatement {
|
||||
protected PsiLoopStatementImpl(IElementType type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteChildInternal(@NotNull ASTNode child) {
|
||||
if (child == getBody()) {
|
||||
replaceChildInternal(child, (TreeElement)JavaPsiFacade.getElementFactory(getProject()).createStatementFromText("{}", null));
|
||||
} else {
|
||||
super.deleteChildInternal(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,14 +19,13 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.impl.source.tree.CompositePsiElement;
|
||||
import com.intellij.psi.impl.source.Constants;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.tree.ChildRoleBase;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class PsiWhileStatementImpl extends CompositePsiElement implements PsiWhileStatement, Constants {
|
||||
public class PsiWhileStatementImpl extends PsiLoopStatementImpl implements PsiWhileStatement, Constants {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.tree.java.PsiWhileStatementImpl");
|
||||
|
||||
public PsiWhileStatementImpl() {
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Remove 'if' statement" "true"
|
||||
class X {
|
||||
int m(String s) {
|
||||
for (int i = 0; i < 100; i++) {
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Remove 'if' statement" "true"
|
||||
class X {
|
||||
int m(String s) {
|
||||
if (s.equals("abc")) {
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Remove 'if' statement" "true"
|
||||
class X {
|
||||
int m(String s) {
|
||||
for (int i = 0; i < 100; i++)
|
||||
if (s i<caret>nstanceof Integer) {
|
||||
System.out.println();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Remove 'if' statement" "true"
|
||||
class X {
|
||||
int m(String s) {
|
||||
if (s.equals("abc"))
|
||||
if (s i<caret>nstanceof Integer) {
|
||||
System.out.println();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user