JDK的Parser来解析Java源代码详解

时间:2025-03-22 14:28:08
public class JavaParser {
  
  private static final String path = "" ;
  
  private JavacFileManager fileManager;
  private JavacTool javacTool;
  
  public JavaParser() {
   Context context = new Context();
   fileManager = new JavacFileManager(context, true , ());
   javacTool = new JavacTool();
  }
  
  public void parseJavaFiles() {
   Iterable<!--? extends JavaFileObject--> files = (path);
   compilationTask = ( null , fileManager, null , null , null , files);
   JavacTask javacTask = (JavacTask) compilationTask;
   try {
    Iterable<!--? extends CompilationUnitTree--> result = ();
    for (CompilationUnitTree tree : result) {
     ( new SourceVisitor(), null );
  
    }
   } catch (IOException e) {
    ();
   }
  }
  
  static class SourceVisitor extends TreeScanner< void , void = "" > {
  
   private String currentPackageName = null ;
  
   @Override
   public Void visitCompilationUnit(CompilationUnitTree node, Void aVoid) { 
    return super .visitCompilationUnit(node, aVoid);
   }
  
   @Override
   public Void visitVariable(VariableTree node, Void aVoid) {
    formatPtrln( "variable name: %s, type: %s, kind: %s, package: %s" ,
      (), (), (), currentPackageName);
    return null ;
   }
  }
  
  public static void formatPtrln(String format, Object... args) {
   ((format, args));
  }
  
  public static void main(String[] args) {
  
   new JavaParser().parseJavaFiles();
  }
}</ void ,>