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<ClassSymbol> getTopLevelClasses(List<? extends JCCompilationUnit> units) {