Java 类com.intellij.psi.PsiIfStatement 实例源码

项目:intellij-ce-playground    文件:IfToSwitchPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;
  if (token.getTokenType() != JavaTokenType.IF_KEYWORD) {
    return false;
  }
  final PsiElement parent = element.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement statement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(statement)) {
    return false;
  }
  return SwitchUtils.getSwitchExpression(statement, 0) != null;
}
项目:intellij-ce-playground    文件:SimplifyIfElseIntention.java   
@NotNull
public PsiElementPredicate getElementPredicate() {
  return new PsiElementPredicate() {
    public boolean satisfiedBy(PsiElement element) {
      if (!(element instanceof PsiJavaToken)) {
        return false;
      }
      final PsiJavaToken token = (PsiJavaToken)element;
      final PsiElement parent = token.getParent();
      if (!(parent instanceof PsiIfStatement)) {
        return false;
      }
      return TrivialIfInspection.isTrivial((PsiIfStatement)parent);
    }
  };
}
项目:tools-idea    文件:IfStatementWithTooManyBranchesInspection.java   
@Override
public void visitIfStatement(@NotNull PsiIfStatement statement) {
  super.visitIfStatement(statement);
  final PsiElement parent = statement.getParent();
  if (parent instanceof PsiIfStatement) {
    final PsiIfStatement parentStatement = (PsiIfStatement)parent;
    final PsiStatement elseBranch = parentStatement.getElseBranch();
    if (statement.equals(elseBranch)) {
      return;
    }
  }
  final int branchCount = calculateBranchCount(statement);
  if (branchCount <= m_limit) {
    return;
  }
  registerStatementError(statement, Integer.valueOf(branchCount));
}
项目:tools-idea    文件:IfToSwitchPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;
  if (token.getTokenType() != JavaTokenType.IF_KEYWORD) {
    return false;
  }
  final PsiElement parent = element.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement statement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(statement)) {
    return false;
  }
  return SwitchUtils.getSwitchExpression(statement, 0) != null;
}
项目:consulo-java    文件:IfToSwitchPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;
  if (token.getTokenType() != JavaTokenType.IF_KEYWORD) {
    return false;
  }
  final PsiElement parent = element.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement statement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(statement)) {
    return false;
  }
  return SwitchUtils.getSwitchExpression(statement) != null;
}
项目:consulo-java    文件:IfStatementWithTooManyBranchesInspection.java   
@Override
public void visitIfStatement(@NotNull PsiIfStatement statement) {
  super.visitIfStatement(statement);
  final PsiElement parent = statement.getParent();
  if (parent instanceof PsiIfStatement) {
    final PsiIfStatement parentStatement = (PsiIfStatement)parent;
    final PsiStatement elseBranch = parentStatement.getElseBranch();
    if (statement.equals(elseBranch)) {
      return;
    }
  }
  final int branchCount = calculateBranchCount(statement);
  if (branchCount <= m_limit) {
    return;
  }
  registerStatementError(statement, Integer.valueOf(branchCount));
}
项目:consulo-java    文件:TrivialIfInspection.java   
private static void replaceSimplifiableAssignment(
  PsiIfStatement statement)
  throws IncorrectOperationException {
  final PsiExpression condition = statement.getCondition();
  if (condition == null) {
    return;
  }
  final String conditionText = condition.getText();
  final PsiStatement thenBranch = statement.getThenBranch();
  final PsiExpressionStatement assignmentStatement =
    (PsiExpressionStatement)
      ControlFlowUtils.stripBraces(thenBranch);
  final PsiAssignmentExpression assignmentExpression =
    (PsiAssignmentExpression)assignmentStatement.getExpression();
  final PsiJavaToken operator =
    assignmentExpression.getOperationSign();
  final String operand = operator.getText();
  final PsiExpression lhs = assignmentExpression.getLExpression();
  final String lhsText = lhs.getText();
  replaceStatement(statement,
                   lhsText + operand + conditionText + ';');
}
项目:consulo-java    文件:TrivialIfInspection.java   
private static void replaceSimplifiableImplicitReturnNegated(
  PsiIfStatement statement)
  throws IncorrectOperationException {
  final PsiExpression condition = statement.getCondition();
  if (condition == null) {
    return;
  }
  final String conditionText =
    BoolUtils.getNegatedExpressionText(condition);
  final PsiElement nextStatement =
    PsiTreeUtil.skipSiblingsForward(statement,
                                    PsiWhiteSpace.class);
  if (nextStatement == null) {
    return;
  }
  @NonNls final String newStatement = "return " + conditionText + ';';
  replaceStatement(statement, newStatement);
  deleteElement(nextStatement);
}
项目:consulo-java    文件:TrivialIfInspection.java   
private static void replaceSimplifiableAssignmentNegated(
  PsiIfStatement statement)
  throws IncorrectOperationException {
  final PsiExpression condition = statement.getCondition();
  if (condition == null) {
    return;
  }
  final String conditionText =
    BoolUtils.getNegatedExpressionText(condition);
  final PsiStatement thenBranch = statement.getThenBranch();
  final PsiExpressionStatement assignmentStatement =
    (PsiExpressionStatement)
      ControlFlowUtils.stripBraces(thenBranch);
  final PsiAssignmentExpression assignmentExpression =
    (PsiAssignmentExpression)
      assignmentStatement.getExpression();
  final PsiJavaToken operator =
    assignmentExpression.getOperationSign();
  final String operand = operator.getText();
  final PsiExpression lhs = assignmentExpression.getLExpression();
  final String lhsText = lhs.getText();
  replaceStatement(statement,
                   lhsText + operand + conditionText + ';');
}
项目:consulo-java    文件:TrivialIfInspection.java   
public static boolean isSimplifiableImplicitReturn(
  PsiIfStatement ifStatement) {
  if (ifStatement.getElseBranch() != null) {
    return false;
  }
  PsiStatement thenBranch = ifStatement.getThenBranch();
  thenBranch = ControlFlowUtils.stripBraces(thenBranch);
  final PsiElement nextStatement =
    PsiTreeUtil.skipSiblingsForward(ifStatement,
                                    PsiWhiteSpace.class);
  if (!(nextStatement instanceof PsiStatement)) {
    return false;
  }

  final PsiStatement elseBranch = (PsiStatement)nextStatement;
  return ConditionalUtils.isReturn(thenBranch, PsiKeyword.TRUE)
         && ConditionalUtils.isReturn(elseBranch, PsiKeyword.FALSE);
}
项目:consulo-java    文件:TrivialIfInspection.java   
public static boolean isSimplifiableImplicitReturnNegated(
  PsiIfStatement ifStatement) {
  if (ifStatement.getElseBranch() != null) {
    return false;
  }
  PsiStatement thenBranch = ifStatement.getThenBranch();
  thenBranch = ControlFlowUtils.stripBraces(thenBranch);

  final PsiElement nextStatement =
    PsiTreeUtil.skipSiblingsForward(ifStatement,
                                    PsiWhiteSpace.class);
  if (!(nextStatement instanceof PsiStatement)) {
    return false;
  }
  final PsiStatement elseBranch = (PsiStatement)nextStatement;
  return ConditionalUtils.isReturn(thenBranch, PsiKeyword.FALSE)
         && ConditionalUtils.isReturn(elseBranch, PsiKeyword.TRUE);
}
项目:Android_Lint_SRP_Practice_Example    文件:MultiFunctionFlagStructureDetector.java   
@Override
public List<Class<? extends PsiElement>> getApplicablePsiTypes() {
    return Arrays.asList(
            PsiClass.class,
            PsiMethod.class,
            PsiIfStatement.class);
}
项目:intellij-ce-playground    文件:JavaElseUnwrapperBase.java   
@Override
public void collectElementsToIgnore(PsiElement element, Set<PsiElement> result) {
  PsiElement parent = element.getParent();

  while (parent instanceof PsiIfStatement) {
    result.add(parent);
    parent = parent.getParent();
  }
}
项目:intellij-ce-playground    文件:JavaIfUnwrapper.java   
@Override
protected void doUnwrap(PsiElement element, Context context) throws IncorrectOperationException {
  PsiStatement then = ((PsiIfStatement)element).getThenBranch();
  context.extractFromBlockOrSingleStatement(then, element);

  context.delete(element);
}
项目:intellij-ce-playground    文件:JavaElseUnwrapper.java   
@Override
protected void unwrapElseBranch(PsiStatement branch, PsiElement parent, Context context) throws IncorrectOperationException {
  // if we have 'else if' then we have to extract statements from the 'if' branch
  if (branch instanceof PsiIfStatement) {
    branch = ((PsiIfStatement)branch).getThenBranch();
  }

  parent = findTopmostIfStatement(parent);

  context.extractFromBlockOrSingleStatement(branch, parent);
  context.delete(parent);
}
项目:intellij-ce-playground    文件:IfStatementSelectioner.java   
@Override
public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) {
  List<TextRange> result = new ArrayList<TextRange>();
  result.addAll(expandToWholeLine(editorText, e.getTextRange(), false));

  PsiIfStatement statement = (PsiIfStatement)e;

  final PsiKeyword elseKeyword = statement.getElseElement();
  if (elseKeyword != null) {
    final PsiStatement then = statement.getThenBranch();
    if (then != null) {
      final TextRange thenRange = new TextRange(statement.getTextRange().getStartOffset(), then.getTextRange().getEndOffset());
      if (thenRange.contains(cursorOffset)) {
        result.addAll(expandToWholeLine(editorText, thenRange, false));
      }
    }

    result.addAll(expandToWholeLine(editorText,
                                    new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                  statement.getTextRange().getEndOffset()),
                                    false));

    final PsiStatement branch = statement.getElseBranch();
    if (branch instanceof PsiIfStatement) {
      PsiIfStatement elseIf = (PsiIfStatement)branch;
      final PsiKeyword element = elseIf.getElseElement();
      if (element != null) {
        final PsiStatement elseThen = elseIf.getThenBranch();
        if (elseThen != null) {
          result.addAll(expandToWholeLine(editorText,
                                          new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                        elseThen.getTextRange().getEndOffset()),
                                          false));
        }
      }
    }
  }

  return result;
}
项目:intellij-ce-playground    文件:IfStatementWithTooManyBranchesInspection.java   
@Override
public void visitIfStatement(@NotNull PsiIfStatement statement) {
  super.visitIfStatement(statement);
  if (ControlFlowUtils.isElseIf(statement)) {
    return;
  }
  final int branchCount = calculateBranchCount(statement);
  if (branchCount <= m_limit) {
    return;
  }
  registerStatementError(statement, Integer.valueOf(branchCount));
}
项目:intellij-ce-playground    文件:IfStatementWithTooManyBranchesInspection.java   
private int calculateBranchCount(PsiIfStatement statement) {
  final PsiStatement branch = statement.getElseBranch();
  if (branch == null) {
    return 1;
  }
  if (!(branch instanceof PsiIfStatement)) {
    return 2;
  }
  return 1 + calculateBranchCount((PsiIfStatement)branch);
}
项目:intellij-ce-playground    文件:SplitElseIfIntention.java   
public void processIntention(PsiElement element)
  throws IncorrectOperationException {
  final PsiJavaToken token = (PsiJavaToken)element;
  final PsiIfStatement parentStatement =
    (PsiIfStatement)token.getParent();
  if (parentStatement == null) {
    return;
  }
  final PsiStatement elseBranch = parentStatement.getElseBranch();
  if (elseBranch == null) {
    return;
  }
  final String newStatement = '{' + elseBranch.getText() + '}';
  PsiReplacementUtil.replaceStatement(elseBranch, newStatement);
}
项目:intellij-ce-playground    文件:MergeIfAndPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;

  final PsiElement parent = token.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement ifStatement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(ifStatement)) {
    return false;
  }
  PsiStatement thenBranch = ifStatement.getThenBranch();
  thenBranch = ControlFlowUtils.stripBraces(thenBranch);
  PsiStatement elseBranch = ifStatement.getElseBranch();
  elseBranch = ControlFlowUtils.stripBraces(elseBranch);
  if (thenBranch == null) {
    return false;
  }
  if (elseBranch != null) {
    return false;
  }
  if (!(thenBranch instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement childIfStatement = (PsiIfStatement)thenBranch;
  return childIfStatement.getElseBranch() == null;
}
项目:tools-idea    文件:JavaElseUnwrapperBase.java   
@Override
public void collectElementsToIgnore(PsiElement element, Set<PsiElement> result) {
  PsiElement parent = element.getParent();

  while (parent instanceof PsiIfStatement) {
    result.add(parent);
    parent = parent.getParent();
  }
}
项目:tools-idea    文件:JavaIfUnwrapper.java   
@Override
protected void doUnwrap(PsiElement element, Context context) throws IncorrectOperationException {
  PsiStatement then = ((PsiIfStatement)element).getThenBranch();
  context.extractFromBlockOrSingleStatement(then, element);

  context.delete(element);
}
项目:tools-idea    文件:JavaElseUnwrapper.java   
@Override
protected void unwrapElseBranch(PsiStatement branch, PsiElement parent, Context context) throws IncorrectOperationException {
  // if we have 'else if' then we have to extract statements from the 'if' branch
  if (branch instanceof PsiIfStatement) {
    branch = ((PsiIfStatement)branch).getThenBranch();
  }

  parent = findTopmostIfStatement(parent);

  context.extractFromBlockOrSingleStatement(branch, parent);
  context.delete(parent);
}
项目:tools-idea    文件:IfStatementSelectioner.java   
@Override
public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) {
  List<TextRange> result = new ArrayList<TextRange>();
  result.addAll(expandToWholeLine(editorText, e.getTextRange(), false));

  PsiIfStatement statement = (PsiIfStatement)e;

  final PsiKeyword elseKeyword = statement.getElseElement();
  if (elseKeyword != null) {
    result.addAll(expandToWholeLine(editorText,
                                    new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                  statement.getTextRange().getEndOffset()),
                                    false));

    final PsiStatement branch = statement.getElseBranch();
    if (branch instanceof PsiIfStatement) {
      PsiIfStatement elseIf = (PsiIfStatement)branch;
      final PsiKeyword element = elseIf.getElseElement();
      if (element != null) {
        result.addAll(expandToWholeLine(editorText,
                                        new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                      elseIf.getThenBranch().getTextRange().getEndOffset()),
                                        false));
      }
    }
  }

  return result;
}
项目:tools-idea    文件:IfStatementWithTooManyBranchesInspection.java   
private int calculateBranchCount(PsiIfStatement statement) {
  final PsiStatement branch = statement.getElseBranch();
  if (branch == null) {
    return 1;
  }
  if (!(branch instanceof PsiIfStatement)) {
    return 2;
  }
  return 1 + calculateBranchCount((PsiIfStatement)branch);
}
项目:tools-idea    文件:SplitElseIfIntention.java   
public void processIntention(PsiElement element)
  throws IncorrectOperationException {
  final PsiJavaToken token = (PsiJavaToken)element;
  final PsiIfStatement parentStatement =
    (PsiIfStatement)token.getParent();
  if (parentStatement == null) {
    return;
  }
  final PsiStatement elseBranch = parentStatement.getElseBranch();
  if (elseBranch == null) {
    return;
  }
  final String newStatement = '{' + elseBranch.getText() + '}';
  replaceStatement(newStatement, elseBranch);
}
项目:tools-idea    文件:MergeIfAndPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;

  final PsiElement parent = token.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement ifStatement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(ifStatement)) {
    return false;
  }
  PsiStatement thenBranch = ifStatement.getThenBranch();
  thenBranch = ConditionalUtils.stripBraces(thenBranch);
  PsiStatement elseBranch = ifStatement.getElseBranch();
  elseBranch = ConditionalUtils.stripBraces(elseBranch);
  if (thenBranch == null) {
    return false;
  }
  if (elseBranch != null) {
    return false;
  }
  if (!(thenBranch instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement childIfStatement = (PsiIfStatement)thenBranch;
  return childIfStatement.getElseBranch() == null;
}
项目:consulo-java    文件:DeleteSideEffectsAwareFix.java   
public DeleteSideEffectsAwareFix(PsiExpressionStatement statement)
{
    myPointer = SmartPointerManager.getInstance(statement.getProject()).createSmartPsiElementPointer(statement);
    PsiExpression expression = statement.getExpression();
    List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(expression);
    if(sideEffects.isEmpty())
    {
        myMessage = JavaQuickFixBundle.message("delete.element.fix.text");
    }
    else if(sideEffects.size() == 1 && sideEffects.get(0) == PsiUtil.skipParenthesizedExprDown(expression))
    {
        // "Remove unnecessary parentheses" action is already present which will do the same
        myMessage = "";
    }
    else
    {
        PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, expression);
        if(statements.length == 1)
        {
            if(statements[0] instanceof PsiIfStatement)
            {
                myMessage = JavaQuickFixBundle.message("extract.side.effects.convert.to.if");
            }
            else
            {
                myMessage = JavaQuickFixBundle.message("extract.side.effects.single");
            }
        }
        else
        {
            myMessage = JavaQuickFixBundle.message("extract.side.effects.multiple");
        }
    }
}
项目:consulo-java    文件:JavaElseUnwrapperBase.java   
@Override
public void collectElementsToIgnore(PsiElement element, Set<PsiElement> result) {
  PsiElement parent = element.getParent();

  while (parent instanceof PsiIfStatement) {
    result.add(parent);
    parent = parent.getParent();
  }
}
项目:consulo-java    文件:JavaIfUnwrapper.java   
@Override
protected void doUnwrap(PsiElement element, Context context) throws IncorrectOperationException {
  PsiStatement then = ((PsiIfStatement)element).getThenBranch();
  context.extractFromBlockOrSingleStatement(then, element);

  context.delete(element);
}
项目:consulo-java    文件:JavaElseUnwrapper.java   
@Override
protected void unwrapElseBranch(PsiStatement branch, PsiElement parent, Context context) throws IncorrectOperationException {
  // if we have 'else if' then we have to extract statements from the 'if' branch
  if (branch instanceof PsiIfStatement) {
    branch = ((PsiIfStatement)branch).getThenBranch();
  }

  parent = findTopmostIfStatement(parent);

  context.extractFromBlockOrSingleStatement(branch, parent);
  context.delete(parent);
}
项目:consulo-java    文件:IfConditionFixer.java   
@Override
public void apply(Editor editor, JavaSmartEnterProcessor processor, PsiElement psiElement) throws IncorrectOperationException
{
    if(psiElement instanceof PsiIfStatement)
    {
        final Document doc = editor.getDocument();
        final PsiIfStatement ifStatement = (PsiIfStatement) psiElement;
        final PsiJavaToken rParen = ifStatement.getRParenth();
        final PsiJavaToken lParen = ifStatement.getLParenth();
        final PsiExpression condition = ifStatement.getCondition();

        if(condition == null)
        {
            if(lParen == null || rParen == null)
            {
                int stopOffset = doc.getLineEndOffset(doc.getLineNumber(ifStatement.getTextRange().getStartOffset()));
                final PsiStatement then = ifStatement.getThenBranch();
                if(then != null)
                {
                    stopOffset = Math.min(stopOffset, then.getTextRange().getStartOffset());
                }
                stopOffset = Math.min(stopOffset, ifStatement.getTextRange().getEndOffset());

                doc.replaceString(ifStatement.getTextRange().getStartOffset(), stopOffset, "if ()");

                processor.registerUnresolvedError(ifStatement.getTextRange().getStartOffset() + "if (".length());
            }
            else
            {
                processor.registerUnresolvedError(lParen.getTextRange().getEndOffset());
            }
        }
        else if(rParen == null)
        {
            doc.insertString(condition.getTextRange().getEndOffset(), ")");
        }
    }
}
项目:consulo-java    文件:IfStatementSelectioner.java   
@Override
public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) {
  List<TextRange> result = new ArrayList<TextRange>();
  result.addAll(expandToWholeLine(editorText, e.getTextRange(), false));

  PsiIfStatement statement = (PsiIfStatement)e;

  final PsiKeyword elseKeyword = statement.getElseElement();
  if (elseKeyword != null) {
    result.addAll(expandToWholeLine(editorText,
                                    new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                  statement.getTextRange().getEndOffset()),
                                    false));

    final PsiStatement branch = statement.getElseBranch();
    if (branch instanceof PsiIfStatement) {
      PsiIfStatement elseIf = (PsiIfStatement)branch;
      final PsiKeyword element = elseIf.getElseElement();
      if (element != null) {
        result.addAll(expandToWholeLine(editorText,
                                        new TextRange(elseKeyword.getTextRange().getStartOffset(),
                                                      elseIf.getThenBranch().getTextRange().getEndOffset()),
                                        false));
      }
    }
  }

  return result;
}
项目:consulo-java    文件:SplitElseIfIntention.java   
public void processIntention(PsiElement element)
  throws IncorrectOperationException {
  final PsiJavaToken token = (PsiJavaToken)element;
  final PsiIfStatement parentStatement =
    (PsiIfStatement)token.getParent();
  if (parentStatement == null) {
    return;
  }
  final PsiStatement elseBranch = parentStatement.getElseBranch();
  if (elseBranch == null) {
    return;
  }
  final String newStatement = '{' + elseBranch.getText() + '}';
  replaceStatement(newStatement, elseBranch);
}
项目:consulo-java    文件:MergeIfOrPredicate.java   
public static boolean isMergableExplicitIf(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;
  final PsiElement parent = token.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement ifStatement = (PsiIfStatement)parent;
  final PsiStatement thenBranch = ifStatement.getThenBranch();
  final PsiStatement elseBranch = ifStatement.getElseBranch();
  if (thenBranch == null) {
    return false;
  }
  if (elseBranch == null) {
    return false;
  }
  if (!(elseBranch instanceof PsiIfStatement)) {
    return false;
  }
  if (ErrorUtil.containsError(ifStatement)) {
    return false;
  }
  final PsiIfStatement childIfStatement = (PsiIfStatement)elseBranch;
  final PsiStatement childThenBranch = childIfStatement.getThenBranch();
  return EquivalenceChecker.statementsAreEquivalent(thenBranch, childThenBranch);
}
项目:consulo-java    文件:MergeIfOrPredicate.java   
private static boolean isMergableImplicitIf(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;

  final PsiElement parent = token.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement ifStatement = (PsiIfStatement)parent;
  final PsiStatement thenBranch = ifStatement.getThenBranch();
  if (thenBranch == null) {
    return false;
  }
  final PsiStatement elseBranch = ifStatement.getElseBranch();
  if (elseBranch != null) {
    return false;
  }
  if (ControlFlowUtils.statementMayCompleteNormally(thenBranch)) {
    return false;
  }
  final PsiElement nextStatement = PsiTreeUtil.skipSiblingsForward(ifStatement, PsiWhiteSpace.class);
  if (!(nextStatement instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement nextIfStatement = (PsiIfStatement)nextStatement;
  final PsiStatement nextThenBranch = nextIfStatement.getThenBranch();
  return EquivalenceChecker.statementsAreEquivalent(thenBranch, nextThenBranch);
}
项目:consulo-java    文件:MergeIfAndPredicate.java   
public boolean satisfiedBy(PsiElement element) {
  if (!(element instanceof PsiJavaToken)) {
    return false;
  }
  final PsiJavaToken token = (PsiJavaToken)element;

  final PsiElement parent = token.getParent();
  if (!(parent instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement ifStatement = (PsiIfStatement)parent;
  if (ErrorUtil.containsError(ifStatement)) {
    return false;
  }
  PsiStatement thenBranch = ifStatement.getThenBranch();
  thenBranch = ConditionalUtils.stripBraces(thenBranch);
  PsiStatement elseBranch = ifStatement.getElseBranch();
  elseBranch = ConditionalUtils.stripBraces(elseBranch);
  if (thenBranch == null) {
    return false;
  }
  if (elseBranch != null) {
    return false;
  }
  if (!(thenBranch instanceof PsiIfStatement)) {
    return false;
  }
  final PsiIfStatement childIfStatement = (PsiIfStatement)thenBranch;
  return childIfStatement.getElseBranch() == null;
}
项目:consulo-java    文件:IfStatementWithIdenticalBranchesInspection.java   
private void checkIfStatementWithoutElseBranch(
  PsiIfStatement ifStatement) {
  final PsiStatement thenBranch = ifStatement.getThenBranch();
  if (ControlFlowUtils.statementMayCompleteNormally(thenBranch)) {
    return;
  }
  PsiStatement nextStatement = getNextStatement(ifStatement);
  if (thenBranch instanceof PsiBlockStatement) {
    final PsiBlockStatement blockStatement =
      (PsiBlockStatement)thenBranch;
    final PsiCodeBlock codeBlock = blockStatement.getCodeBlock();
    final PsiStatement[] statements = codeBlock.getStatements();
    final PsiStatement lastStatement =
      statements[statements.length - 1];
    for (PsiStatement statement : statements) {
      if (nextStatement == null) {
        if (statement == lastStatement &&
            statement instanceof PsiReturnStatement) {
          final PsiReturnStatement returnStatement =
            (PsiReturnStatement)statement;
          if (returnStatement.getReturnValue() == null) {
            registerStatementError(ifStatement);
          }
        }
        return;
      }
      else if (!EquivalenceChecker.getCanonicalPsiEquivalence().statementsAreEquivalent(
        statement, nextStatement)) {
        return;
      }
      nextStatement = getNextStatement(nextStatement);
    }
  }
  else if (!EquivalenceChecker.getCanonicalPsiEquivalence().statementsAreEquivalent(
    thenBranch, nextStatement)) {
    return;
  }
  registerStatementError(ifStatement);
}
项目:consulo-java    文件:IfStatementWithIdenticalBranchesInspection.java   
@Nullable
private static PsiStatement getNextStatement(PsiStatement statement) {
  PsiStatement nextStatement =
    PsiTreeUtil.getNextSiblingOfType(statement,
                                     PsiStatement.class);
  while (nextStatement == null) {
    //noinspection AssignmentToMethodParameter
    statement = PsiTreeUtil.getParentOfType(statement,
                                            PsiStatement.class);
    if (statement == null) {
      return null;
    }
    if (statement instanceof PsiLoopStatement) {
      // return in a loop statement is not the same as continuing
      // looping.
      return statement;
    }
    nextStatement = PsiTreeUtil.getNextSiblingOfType(statement,
                                                     PsiStatement.class);
    if (nextStatement == null) {
      continue;
    }
    final PsiElement statementParent = statement.getParent();
    if (!(statementParent instanceof PsiIfStatement)) {
      continue;
    }
    // nextStatement should not be the else part of an if statement
    final PsiElement nextStatementParent =
      nextStatement.getParent();
    if (statementParent.equals(nextStatementParent)) {
      nextStatement = null;
    }
  }
  return nextStatement;
}
项目:consulo-java    文件:IfStatementWithTooManyBranchesInspection.java   
private int calculateBranchCount(PsiIfStatement statement) {
  final PsiStatement branch = statement.getElseBranch();
  if (branch == null) {
    return 1;
  }
  if (!(branch instanceof PsiIfStatement)) {
    return 2;
  }
  return 1 + calculateBranchCount((PsiIfStatement)branch);
}