diff -r f9ee66e780f4 -r d4e34b76b0c3 langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java --- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Aug 12 07:54:30 2009 -0700 +++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Aug 12 10:34:13 2009 -0700 @@ -136,6 +136,8 @@ */ Source source; + private ClassLoader processorClassLoader; + /** * JavacMessages object used for localization */ @@ -203,7 +205,7 @@ JavaFileManager fileManager = context.get(JavaFileManager.class); try { // If processorpath is not explicitly set, use the classpath. - ClassLoader processorCL = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH) + processorClassLoader = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH) ? fileManager.getClassLoader(ANNOTATION_PROCESSOR_PATH) : fileManager.getClassLoader(CLASS_PATH); @@ -213,9 +215,9 @@ * provider mechanism to create the processor iterator. */ if (processorNames != null) { - processorIterator = new NameProcessIterator(processorNames, processorCL, log); + processorIterator = new NameProcessIterator(processorNames, processorClassLoader, log); } else { - processorIterator = new ServiceIterator(processorCL, log); + processorIterator = new ServiceIterator(processorClassLoader, log); } } catch (SecurityException e) { /* @@ -1019,9 +1021,11 @@ /** * Free resources related to annotation processing. */ - public void close() { + public void close() throws IOException { filer.close(); discoveredProcs = null; + if (processorClassLoader != null && processorClassLoader instanceof Closeable) + ((Closeable) processorClassLoader).close(); } private List getTopLevelClasses(List units) {