import java.nio.file.*;
import javax.tools.*;
import com.sun.source.util.*;
import java.util.*;
public class ParseJava { public static void main(String[] args)throws Exception {
 var compiler=ToolProvider.getSystemJavaCompiler(); var diagnostics=new DiagnosticCollector<JavaFileObject>();
 try(var manager=compiler.getStandardFileManager(diagnostics,null,null)) {
 var paths=Files.walk(Path.of(args[0])).filter(p->p.toString().endsWith(".java")).map(Path::toFile).toList();
 JavacTask task=(JavacTask)compiler.getTask(null,manager,diagnostics,List.of("-proc:none"),null,manager.getJavaFileObjectsFromFiles(paths)); task.parse();
 for(var d:diagnostics.getDiagnostics())System.out.println(d);
 System.out.println("Parsed "+paths.size()+" Java files; errors="+diagnostics.getDiagnostics().stream().filter(d->d.getKind()==Diagnostic.Kind.ERROR).count());
 if(diagnostics.getDiagnostics().stream().anyMatch(d->d.getKind()==Diagnostic.Kind.ERROR)) System.exit(1);
 }}}
