/** Create the next round to be used. */
 Round next(Set<JavaFileObject> newSourceFiles, Map<String, JavaFileObject> newClassFiles) {
   try {
     return new Round(this, newSourceFiles, newClassFiles);
   } finally {
     compiler.close(false);
   }
 }
 @Override
 public void close(boolean disposeNames) {
   if (resourceFileObjects != null) {
     addResources();
     resourceFileObjects = null;
   }
   super.close(disposeNames);
 }
 /** Create the compiler to be used for the final compilation. */
 JavaCompiler finalCompiler(boolean errorStatus) {
   try {
     JavaCompiler c = JavaCompiler.instance(nextContext());
     c.log.nwarnings += compiler.log.nwarnings;
     if (errorStatus) {
       c.log.nerrors += compiler.log.nerrors;
     }
     return c;
   } finally {
     compiler.close(false);
   }
 }
示例#4
0
  public boolean delombok() throws IOException {
    Options options = Options.instance(context);
    options.put(OptionName.ENCODING, charset.name());
    if (classpath != null) options.put(OptionName.CLASSPATH, classpath);
    if (sourcepath != null) options.put(OptionName.SOURCEPATH, sourcepath);
    options.put("compilePolicy", "attr");
    CommentCollectingScanner.Factory.preRegister(context);

    JavaCompiler compiler = new JavaCompiler(context);
    compiler.keepComments = true;
    compiler.genEndPos = true;

    List<JCCompilationUnit> roots = new ArrayList<JCCompilationUnit>();
    Map<JCCompilationUnit, Comments> commentsMap =
        new IdentityHashMap<JCCompilationUnit, Comments>();
    Map<JCCompilationUnit, File> baseMap = new IdentityHashMap<JCCompilationUnit, File>();

    compiler.initProcessAnnotations(Collections.singleton(new lombok.javac.apt.Processor()));

    for (File fileToParse : filesToParse) {
      Comments comments = new Comments();
      context.put(Comments.class, comments);

      @SuppressWarnings("deprecation")
      JCCompilationUnit unit = compiler.parse(fileToParse.getAbsolutePath());

      commentsMap.put(unit, comments);
      baseMap.put(unit, fileToBase.get(fileToParse));
      roots.add(unit);
    }

    if (compiler.errorCount() > 0) {
      // At least one parse error. No point continuing (a real javac run doesn't either).
      return false;
    }

    TrackChangedAsts tca = new TrackChangedAsts();

    context.put(TrackChangedAsts.class, tca);

    JavaCompiler delegate = compiler.processAnnotations(compiler.enterTrees(toJavacList(roots)));
    for (JCCompilationUnit unit : roots) {
      DelombokResult result =
          new DelombokResult(
              commentsMap.get(unit).comments.toList(), unit, force || tca.changed.contains(unit));
      if (verbose)
        feedback.printf(
            "File: %s [%s]\n",
            unit.sourcefile.getName(), result.isChanged() ? "delomboked" : "unchanged");
      Writer rawWriter;
      if (presetWriter != null) rawWriter = presetWriter;
      else if (output == null) rawWriter = createStandardOutWriter();
      else rawWriter = createFileWriter(output, baseMap.get(unit), unit.sourcefile.toUri());
      BufferedWriter writer = new BufferedWriter(rawWriter);
      try {
        result.print(writer);
      } finally {
        writer.close();
      }
    }
    delegate.close();

    return true;
  }