public VisitorsBridge(Iterable visitors, List<File> projectClasspath, @Nullable SonarComponents sonarComponents, SymbolicExecutionMode symbolicExecutionMode) { this.allScanners = new ArrayList<>(); for (Object visitor : visitors) { if (visitor instanceof JavaFileScanner) { allScanners.add((JavaFileScanner) visitor); } } this.executableScanners = allScanners.stream().filter(isIssuableSubscriptionVisitor.negate()).collect(Collectors.toList()); this.scannerRunner = new ScannerRunner(allScanners); this.sonarComponents = sonarComponents; this.classLoader = ClassLoaderBuilder.create(projectClasspath); this.symbolicExecutionEnabled = symbolicExecutionMode.isEnabled(); this.behaviorCache = new BehaviorCache(classLoader, symbolicExecutionMode.isCrossFileEnabled()); }
scannerRunner.run(javaFileScannerContext); if (semanticModel != null) { classesNotFound.addAll(semanticModel.classesNotFound());
private void visit(Tree tree) { Consumer<SubscriptionVisitor> callback; boolean isToken = tree.kind() == Tree.Kind.TOKEN; if (isToken) { callback = s -> { SyntaxToken syntaxToken = (SyntaxToken) tree; s.visitToken(syntaxToken); }; } else { callback = s -> s.visitNode(tree); } List<SubscriptionVisitor> subscribed = checks.getOrDefault(tree.kind(), Collections.emptyList()); subscribed.forEach(callback); if (isToken) { checks.getOrDefault(Tree.Kind.TRIVIA, Collections.emptyList()).forEach(s -> ((SyntaxToken) tree).trivias().forEach(s::visitTrivia)); } else { visitChildren(tree); } if(!isToken) { subscribed.forEach(s -> s.leaveNode(tree)); } } }
scannerRunner.run(javaFileScannerContext); if (semanticModel != null) { classesNotFound.addAll(semanticModel.classesNotFound());
private void visit(Tree tree) { Consumer<SubscriptionVisitor> callback; boolean isToken = tree.kind() == Tree.Kind.TOKEN; if (isToken) { callback = s -> { SyntaxToken syntaxToken = (SyntaxToken) tree; s.visitToken(syntaxToken); }; } else { callback = s -> s.visitNode(tree); } List<SubscriptionVisitor> subscribed = checks.getOrDefault(tree.kind(), Collections.emptyList()); subscribed.forEach(callback); if (isToken) { checks.getOrDefault(Tree.Kind.TRIVIA, Collections.emptyList()).forEach(s -> ((SyntaxToken) tree).trivias().forEach(s::visitTrivia)); } else { visitChildren(tree); } if(!isToken) { subscribed.forEach(s -> s.leaveNode(tree)); } } }
public VisitorsBridge(Iterable visitors, List<File> projectClasspath, @Nullable SonarComponents sonarComponents, SymbolicExecutionMode symbolicExecutionMode) { this.allScanners = new ArrayList<>(); for (Object visitor : visitors) { if (visitor instanceof JavaFileScanner) { allScanners.add((JavaFileScanner) visitor); } } this.executableScanners = allScanners.stream().filter(isIssuableSubscriptionVisitor.negate()).collect(Collectors.toList()); this.scannerRunner = new ScannerRunner(allScanners); this.sonarComponents = sonarComponents; this.classLoader = ClassLoaderBuilder.create(projectClasspath); this.symbolicExecutionEnabled = symbolicExecutionMode.isEnabled(); this.behaviorCache = new BehaviorCache(classLoader, symbolicExecutionMode.isCrossFileEnabled()); }
private void visitChildren(Tree tree) { JavaTree javaTree = (JavaTree) tree; if (!javaTree.isLeaf()) { for (Tree next : javaTree.getChildren()) { if (next != null) { visit(next); } } } }
public void setJavaVersion(JavaVersion javaVersion) { this.javaVersion = javaVersion; List<JavaFileScanner> scannersForJavaVersion = executableScanners(allScanners, javaVersion); this.executableScanners = scannersForJavaVersion.stream().filter(isIssuableSubscriptionVisitor.negate()).collect(Collectors.toList()); this.scannerRunner = new ScannerRunner(scannersForJavaVersion); }
public void run(JavaFileScannerContext javaFileScannerContext) { subscriptionVisitors.forEach(s -> s.setContext(javaFileScannerContext)); visit(javaFileScannerContext.getTree()); subscriptionVisitors.forEach(s -> s.leaveFile(javaFileScannerContext)); }
public void setJavaVersion(JavaVersion javaVersion) { this.javaVersion = javaVersion; List<JavaFileScanner> scannersForJavaVersion = executableScanners(allScanners, javaVersion); this.executableScanners = scannersForJavaVersion.stream().filter(isIssuableSubscriptionVisitor.negate()).collect(Collectors.toList()); this.scannerRunner = new ScannerRunner(scannersForJavaVersion); }
public void run(JavaFileScannerContext javaFileScannerContext) { subscriptionVisitors.forEach(s -> s.setContext(javaFileScannerContext)); visit(javaFileScannerContext.getTree()); subscriptionVisitors.forEach(s -> s.leaveFile(javaFileScannerContext)); }
private void visitChildren(Tree tree) { JavaTree javaTree = (JavaTree) tree; if (!javaTree.isLeaf()) { for (Tree next : javaTree.getChildren()) { if (next != null) { visit(next); } } } }