use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement in project intellij-community by JetBrains.
the class InvertIfIntention method isTailAfterIf.
private static boolean isTailAfterIf(@NotNull GrIfStatement ifStatement, @NotNull GrStatementOwner owner) {
final GrControlFlowOwner flowOwner = ControlFlowUtils.findControlFlowOwner(ifStatement);
if (flowOwner == null)
return false;
final Instruction[] flow = flowOwner.getControlFlow();
final GrStatement[] statements = owner.getStatements();
final int index = ArrayUtilRt.find(statements, ifStatement);
if (index == statements.length - 1)
return false;
final GrStatement then = ifStatement.getThenBranch();
for (Instruction i : flow) {
final PsiElement element = i.getElement();
if (element == null || !PsiTreeUtil.isAncestor(then, element, true))
continue;
for (Instruction succ : i.allSuccessors()) {
if (succ instanceof IfEndInstruction) {
return false;
}
}
}
return true;
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement in project intellij-community by JetBrains.
the class MergeElseIfIntention method processIntention.
@Override
public void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
final GrIfStatement parentStatement = (GrIfStatement) element;
GrBlockStatement elseBlockStatement = (GrBlockStatement) parentStatement.getElseBranch();
assert elseBlockStatement != null;
final GrOpenBlock elseBranch = elseBlockStatement.getBlock();
final GrStatement elseBranchContents = elseBranch.getStatements()[0];
PsiImplUtil.replaceStatement("if(" + parentStatement.getCondition().getText() + ")" + parentStatement.getThenBranch().getText() + "else " + elseBranchContents.getText(), parentStatement);
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement in project intellij-community by JetBrains.
the class MergeIfAndIntention method processIntention.
@Override
public void processIntention(@NotNull PsiElement element, @NotNull Project project, Editor editor) throws IncorrectOperationException {
final GrIfStatement parentStatement = (GrIfStatement) element;
final GrStatement parentThenBranch = parentStatement.getThenBranch();
final GrIfStatement childStatement = (GrIfStatement) ConditionalUtils.stripBraces(parentThenBranch);
final GrExpression childCondition = childStatement.getCondition();
final String childConditionText;
if (ParenthesesUtils.getPrecedence(childCondition) > ParenthesesUtils.AND_PRECEDENCE) {
childConditionText = '(' + childCondition.getText() + ')';
} else {
childConditionText = childCondition.getText();
}
final GrExpression parentCondition = parentStatement.getCondition();
final String parentConditionText;
if (ParenthesesUtils.getPrecedence(parentCondition) > ParenthesesUtils.AND_PRECEDENCE) {
parentConditionText = '(' + parentCondition.getText() + ')';
} else {
parentConditionText = parentCondition.getText();
}
final GrStatement childThenBranch = childStatement.getThenBranch();
@NonNls final String statement = "if(" + parentConditionText + "&&" + childConditionText + ')' + childThenBranch.getText();
PsiImplUtil.replaceStatement(statement, parentStatement);
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement in project intellij-community by JetBrains.
the class MergeIfAndPredicate method satisfiedBy.
@Override
public boolean satisfiedBy(PsiElement element) {
if (!(element instanceof GrIfStatement)) {
return false;
}
final GrIfStatement ifStatement = (GrIfStatement) element;
if (ErrorUtil.containsError(ifStatement)) {
return false;
}
GrStatement thenBranch = ifStatement.getThenBranch();
if (thenBranch == null) {
return false;
}
thenBranch = ConditionalUtils.stripBraces(thenBranch);
if (!(thenBranch instanceof GrIfStatement)) {
return false;
}
GrStatement elseBranch = ifStatement.getElseBranch();
if (elseBranch != null) {
elseBranch = ConditionalUtils.stripBraces(elseBranch);
if (elseBranch != null) {
return false;
}
}
final GrIfStatement childIfStatement = (GrIfStatement) thenBranch;
return childIfStatement.getElseBranch() == null;
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement in project intellij-community by JetBrains.
the class SplitIfIntention method processIntention.
@Override
protected void processIntention(@NotNull PsiElement andElement, @NotNull Project project, Editor editor) throws IncorrectOperationException {
GrBinaryExpression binaryExpression = (GrBinaryExpression) andElement.getParent();
GrIfStatement ifStatement = (GrIfStatement) binaryExpression.getParent();
GrExpression leftOperand = binaryExpression.getLeftOperand();
GrExpression rightOperand = binaryExpression.getRightOperand();
GrStatement thenBranch = ifStatement.getThenBranch();
assert thenBranch != null;
assert rightOperand != null;
GrStatement newSplittedIfs = GroovyPsiElementFactory.getInstance(project).createStatementFromText("if(" + leftOperand.getText() + ") { \n" + " if(" + rightOperand.getText() + ")" + thenBranch.getText() + "\n" + "}");
ifStatement.replaceWithStatement(newSplittedIfs);
}
Aggregations