void enterFile(InputFile inputFile) throws IOException { issues.clear(); for (Visitor c : getVisitors()) { c.enterFile(inputFile); } }
/** * This method is called only once by analysis */ public void initialize(EngineContext context) { this.context = context; for (UastNode.Kind kind : kinds) { context.register(kind, this); } }
protected final void reportIssueOnLine(int line, String message) { context.reportIssue(Issue.issueOnLine(this, line, message)); } }
public Engine(Collection<Check> rules, Collection<Validator> validators) { engineContext = new EngineContext(rules); metricsVisitor = new MetricsVisitor(); // should this be parameterized in order to switch ON/OFF validation? // add validators first, to validate before playing any rule validators.forEach(rule -> rule.initialize(engineContext)); rules.forEach(rule -> rule.initialize(engineContext)); }
private void visit(UastNode uast) { metricsVisitor.visitNode(uast); Set<Visitor> visitors = uast.kinds.stream() .flatMap(kind -> engineContext.registeredVisitors(kind).stream()) .collect(Collectors.toSet()); for (Visitor visitor : visitors) { visitor.visitNode(uast); } for (UastNode child : uast.children) { visit(child); } for (Visitor visitor : visitors) { visitor.leaveNode(uast); } }
protected final void reportIssueOnFile(String message) { context.reportIssue(Issue.issueOnFile(this, message)); }
protected final void reportIssue(UastNode node, String message, Issue.Message... secondaryMessages) { context.reportIssue(new Issue(this, new Issue.Message(node, message), null, secondaryMessages)); }
protected final void reportIssue(UastNode node, String message) { context.reportIssue(new Issue(this, new Issue.Message(node, message), null)); }
protected final void reportIssue(UastNode from, UastNode to, String message, Issue.Message... secondaryMessages) { context.reportIssue(new Issue(this, new Issue.Message(from, to, message), null, secondaryMessages)); }
protected final void reportIssue(UastNode from, UastNode to, String message, double effortToFix, Issue.Message... secondaryMessages) { context.reportIssue(new Issue(this, new Issue.Message(from, to, message), effortToFix, secondaryMessages)); }