private static boolean isNontrivial(List<StatementTree> statements) { return statements.stream() .flatMap(statement -> statement.is(Kind.BLOCK) ? ((BlockTree) statement).statements().stream() : Stream.of(statement)) .mapToInt(LineVisitor::linesOfCode) .sum() > 1; }
@Nullable private static SyntaxToken getOpenCurlyIfBlock(List<StatementTree> statements) { if (!statements.isEmpty()) { StatementTree firstStmt = statements.get(0); return firstStmt.is(Tree.Kind.BLOCK) ? ((BlockTree) firstStmt).openCurlyBraceToken() : null; } return null; }
@Nullable private static SyntaxToken getOpenCurlyIfBlock(List<StatementTree> statements) { if (!statements.isEmpty()) { StatementTree firstStmt = statements.get(0); return firstStmt.is(Tree.Kind.BLOCK) ? ((BlockTree) firstStmt).openCurlyBraceToken() : null; } return null; }
private static SyntaxToken getFirstToken(List<StatementTree> statements) { SyntaxToken nextToken = null; for (StatementTree statement : statements) { if (!statement.is(Kind.INLINE_HTML)) { nextToken = getFirstToken(statement); break; } } return nextToken; }
private static SyntaxToken getFirstToken(List<StatementTree> statements) { SyntaxToken nextToken = null; for (StatementTree statement : statements) { if (!statement.is(Kind.INLINE_HTML)) { nextToken = getFirstToken(statement); break; } } return nextToken; }
private static boolean hasJumpStatement(SwitchCaseClauseTree caseClause) { List<StatementTree> statements = caseClause.statements(); if (statements.get(statements.size() - 1).is(Kind.BREAK_STATEMENT)) { return true; } return JumpStatementFinder.hasJumpStatement(caseClause); }
private static boolean hasJumpStatement(SwitchCaseClauseTree caseClause) { List<StatementTree> statements = caseClause.statements(); if (statements.get(statements.size() - 1).is(Kind.BREAK_STATEMENT)) { return true; } return JumpStatementFinder.hasJumpStatement(caseClause); }
private void checkUsesAreBeforeNamespace() { if (check.isUseAfterNamespace && nextStatement.is(Kind.NAMESPACE_STATEMENT)) { reportIssue(USE_AFTER_NAMESPACE_MESSAGE, useStatements.get(0).useToken()); } }
private static boolean returnsBoolean(@Nullable StatementTree statement) { if (statement != null && statement.is(Kind.RETURN_STATEMENT)) { ReturnStatementTree returnStatement = (ReturnStatementTree)statement; if (returnStatement.expression() != null && returnStatement.expression().is(Kind.BOOLEAN_LITERAL)) { return true; } } return false; }
private static boolean returnsBoolean(@Nullable StatementTree statement) { if (statement != null && statement.is(Kind.RETURN_STATEMENT)) { ReturnStatementTree returnStatement = (ReturnStatementTree)statement; if (returnStatement.expression() != null && returnStatement.expression().is(Kind.BOOLEAN_LITERAL)) { return true; } } return false; }
private void setPreviousToken(Tree tree) { StatementTree statementTree = getConditionalStatement(tree); if (statementTree.is(Tree.Kind.BLOCK)) { BlockTree blockTree = (BlockTree) statementTree; if (isMultilineBlock(blockTree)) { previousClosingBracketToken = blockTree.closeCurlyBraceToken(); return; } } previousClosingBracketToken = null; }
@Override public void visitElseClause(ElseClauseTree tree) { if (tree.is(Kind.ELSE_CLAUSE) && tree.statements().get(0).is(Kind.IF_STATEMENT)) { ifStatementWithoutNesting.add((IfStatementTree) tree.statements().get(0)); } else { complexity.addComplexityWithoutNesting(tree.elseToken()); } visitWithNesting(tree.statements()); }
private void checkIndentation(SyntaxToken conditionalFirstToken, List<StatementTree> statements) { if (statements.isEmpty() || (statements.size() == 1 && statements.get(0).is(Tree.Kind.BLOCK))) { return; } StatementTree firstStatement = statements.get(0); SyntaxToken firstStatementToken = ((PHPTree) firstStatement).getFirstToken(); if (conditionalFirstToken.column() == firstStatementToken.column()) { String message = "Use curly braces or indentation to denote the code conditionally executed by this \"" + conditionalFirstToken.text() + "\"."; context() .newIssue(this, conditionalFirstToken, message) .secondary(firstStatementToken, null); } }
@Override public void visitElseClause(ElseClauseTree tree) { if (tree.is(Kind.ELSE_CLAUSE) && tree.statements().get(0).is(Kind.IF_STATEMENT)) { ifStatementWithoutNesting.add((IfStatementTree) tree.statements().get(0)); } else { complexity.addComplexityWithoutNesting(tree.elseToken()); } visitWithNesting(tree.statements()); }
@Override public void visitElseClause(ElseClauseTree tree) { super.visitElseClause(tree); if (tree.is(Tree.Kind.ELSE_CLAUSE) && !tree.statements().get(0).is(Tree.Kind.IF_STATEMENT)) { checkStatement(tree.statements().get(0), tree.elseToken()); } }
private void scanIf(IfStatementTree ifTree) { scan(ifTree.statements()); scan(ifTree.elseifClauses()); ElseClauseTree elseClause = ifTree.elseClause(); if (elseClause != null) { List<StatementTree> elseStatements = elseClause.statements(); if (elseStatements.size() == 1 && elseStatements.get(0).is(Kind.IF_STATEMENT)) { scanIf((IfStatementTree) elseStatements.get(0)); } else { scan(elseClause); } } }
@Test public void test_lines_of_code_number_on_tree() throws Exception { CompilationUnitTree cut = parse("metrics/lines_of_code.php"); Optional<ClassDeclarationTree> firstClassTree = cut.script().statements().stream() .filter(statement -> statement.is(Tree.Kind.CLASS_DECLARATION)) .map(ClassDeclarationTree.class::cast) .findFirst(); assertThat(firstClassTree).isPresent(); assertThat(LineVisitor.linesOfCode(firstClassTree.get())).isEqualTo(4); }
@Test public void test() throws Exception { DoWhileStatementTree tree = parse("do {} while ($a) ;", PHPLexicalGrammar.DO_WHILE_STATEMENT); assertThat(tree.is(Kind.DO_WHILE_STATEMENT)).isTrue(); assertThat(tree.doToken().text()).isEqualTo("do"); assertThat(tree.condition().is(Kind.PARENTHESISED_EXPRESSION)).isTrue(); assertThat(tree.statement().is(Kind.BLOCK)).isTrue(); assertThat(tree.whileToken().text()).isEqualTo("while"); assertThat(tree.eosToken().text()).isEqualTo(";"); }