diff -r d3d578d22cc7 -r f58f0ce45802 langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Aug 27 17:21:17 2010 -0700 +++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Fri Aug 27 17:59:08 2010 -0700 @@ -67,6 +67,8 @@ import com.sun.tools.javac.util.Abort; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Convert; +import com.sun.tools.javac.util.FatalError; +import com.sun.tools.javac.util.JCDiagnostic; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.JavacMessages; @@ -131,6 +133,10 @@ */ Log log; + /** Diagnostic factory. + */ + JCDiagnostic.Factory diags; + /** * Source level of the compile. */ @@ -146,10 +152,11 @@ private Context context; public JavacProcessingEnvironment(Context context, Iterable processors) { - options = Options.instance(context); this.context = context; log = Log.instance(context); source = Source.instance(context); + diags = JCDiagnostic.Factory.instance(context); + options = Options.instance(context); printProcessorInfo = options.get("-XprintProcessorInfo") != null; printRounds = options.get("-XprintRounds") != null; verbose = options.get("-verbose") != null; @@ -848,8 +855,7 @@ /** Create a new round. */ private Round(Round prev, - Set newSourceFiles, Map newClassFiles) - throws IOException { + Set newSourceFiles, Map newClassFiles) { this(prev.nextContext(), prev.number+1, prev.compiler.log.nwarnings); this.genClassFiles = prev.genClassFiles; @@ -882,8 +888,7 @@ } /** Create the next round to be used. */ - Round next(Set newSourceFiles, Map newClassFiles) - throws IOException { + Round next(Set newSourceFiles, Map newClassFiles) { try { return new Round(this, newSourceFiles, newClassFiles); } finally { @@ -1083,8 +1088,7 @@ public JavaCompiler doProcessing(Context context, List roots, List classSymbols, - Iterable pckSymbols) - throws IOException { + Iterable pckSymbols) { TaskListener taskListener = context.get(TaskListener.class); log = Log.instance(context); @@ -1184,13 +1188,19 @@ /** * Free resources related to annotation processing. */ - public void close() throws IOException { + public void close() { filer.close(); if (discoveredProcs != null) // Make calling close idempotent discoveredProcs.close(); discoveredProcs = null; - if (processorClassLoader != null && processorClassLoader instanceof Closeable) - ((Closeable) processorClassLoader).close(); + if (processorClassLoader != null && processorClassLoader instanceof Closeable) { + try { + ((Closeable) processorClassLoader).close(); + } catch (IOException e) { + JCDiagnostic msg = diags.fragment("fatal.err.cant.close.loader"); + throw new FatalError(msg, e); + } + } } private List getTopLevelClasses(List units) {