private void computeExecutableLines(List<? extends Tree> trees) { if(trees.isEmpty()) { return; } // rely on cfg to get every instructions and get most of the token. CFG cfg = CFG.buildCFG(trees); cfg.blocks() .stream() .flatMap(b->b.elements().stream()) .forEach( t -> { if (t.is(NEW_CLASS)) { NewClassTree newClassTree = (NewClassTree) t; new ExecutableLinesTokenVisitor().scanTree(newClassTree.identifier()); executableLines.add(newClassTree.newKeyword().line()); } else if (t.is(TRY_STATEMENT)) { // add last token of try statements executableLines.add(t.lastToken().line()); } else { executableLines.add(t.firstToken().line()); } } ); }
private void computeExecutableLines(List<? extends Tree> trees) { if(trees.isEmpty()) { return; } // rely on cfg to get every instructions and get most of the token. CFG cfg = CFG.buildCFG(trees); cfg.blocks() .stream() .flatMap(b->b.elements().stream()) .forEach( t -> { if (t.is(NEW_CLASS)) { NewClassTree newClassTree = (NewClassTree) t; new ExecutableLinesTokenVisitor().scanTree(newClassTree.identifier()); executableLines.add(newClassTree.newKeyword().line()); } else if (t.is(TRY_STATEMENT)) { // add last token of try statements executableLines.add(t.lastToken().line()); } else { executableLines.add(t.firstToken().line()); } } ); }
@Override public void visitNewClass(NewClassTree tree) { if (tree.classBody() != null && !isEnumConstantBody) { int lines = getNumberOfLines(tree.classBody()); if (lines > max) { context.reportIssue(this, tree.newKeyword(), tree.identifier(), "Reduce this anonymous class number of lines from " + lines + " to at most " + max + ", or make it a named class."); } } isEnumConstantBody = false; super.visitNewClass(tree); }
@Override public void visitNewClass(NewClassTree tree) { if (tree.classBody() != null && !isEnumConstantBody) { int lines = getNumberOfLines(tree.classBody()); if (lines > max) { context.reportIssue(this, tree.newKeyword(), tree.identifier(), "Reduce this anonymous class number of lines from " + lines + " to at most " + max + ", or make it a named class."); } } isEnumConstantBody = false; super.visitNewClass(tree); }
@Override public void visitClass(ClassTree tree) { if (!isBodyOfEnumConstantTree(tree)) { Type superClass = tree.symbol().superClass(); int dit = 0; while (superClass != null) { String fullyQualifiedName = superClass.fullyQualifiedName(); if (getPatterns().stream().anyMatch(wp -> wp.match(fullyQualifiedName))) { break; } dit++; superClass = superClass.symbol().superClass(); } if (dit > max) { Tree reportTree = tree.simpleName(); if (tree.parent().is(Tree.Kind.NEW_CLASS)) { reportTree = ((NewClassTree) tree.parent()).newKeyword(); } context.reportIssue(this, reportTree, "This class has " + dit + " parents which is greater than " + max + " authorized.", new ArrayList<>(), dit - max); } } super.visitClass(tree); }
@Override public void visitClass(ClassTree tree) { if (!isBodyOfEnumConstantTree(tree)) { Type superClass = tree.symbol().superClass(); int dit = 0; while (superClass != null) { String fullyQualifiedName = superClass.fullyQualifiedName(); if (getPatterns().stream().anyMatch(wp -> wp.match(fullyQualifiedName))) { break; } dit++; superClass = superClass.symbol().superClass(); } if (dit > max) { Tree reportTree = tree.simpleName(); if (tree.parent().is(Tree.Kind.NEW_CLASS)) { reportTree = ((NewClassTree) tree.parent()).newKeyword(); } context.reportIssue(this, reportTree, "This class has " + dit + " parents which is greater than " + max + " authorized.", new ArrayList<>(), dit - max); } } super.visitClass(tree); }