1.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Aug 12 07:54:30 2009 -0700 1.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Aug 12 10:34:13 2009 -0700 1.3 @@ -136,6 +136,8 @@ 1.4 */ 1.5 Source source; 1.6 1.7 + private ClassLoader processorClassLoader; 1.8 + 1.9 /** 1.10 * JavacMessages object used for localization 1.11 */ 1.12 @@ -203,7 +205,7 @@ 1.13 JavaFileManager fileManager = context.get(JavaFileManager.class); 1.14 try { 1.15 // If processorpath is not explicitly set, use the classpath. 1.16 - ClassLoader processorCL = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH) 1.17 + processorClassLoader = fileManager.hasLocation(ANNOTATION_PROCESSOR_PATH) 1.18 ? fileManager.getClassLoader(ANNOTATION_PROCESSOR_PATH) 1.19 : fileManager.getClassLoader(CLASS_PATH); 1.20 1.21 @@ -213,9 +215,9 @@ 1.22 * provider mechanism to create the processor iterator. 1.23 */ 1.24 if (processorNames != null) { 1.25 - processorIterator = new NameProcessIterator(processorNames, processorCL, log); 1.26 + processorIterator = new NameProcessIterator(processorNames, processorClassLoader, log); 1.27 } else { 1.28 - processorIterator = new ServiceIterator(processorCL, log); 1.29 + processorIterator = new ServiceIterator(processorClassLoader, log); 1.30 } 1.31 } catch (SecurityException e) { 1.32 /* 1.33 @@ -1019,9 +1021,11 @@ 1.34 /** 1.35 * Free resources related to annotation processing. 1.36 */ 1.37 - public void close() { 1.38 + public void close() throws IOException { 1.39 filer.close(); 1.40 discoveredProcs = null; 1.41 + if (processorClassLoader != null && processorClassLoader instanceof Closeable) 1.42 + ((Closeable) processorClassLoader).close(); 1.43 } 1.44 1.45 private List<ClassSymbol> getTopLevelClasses(List<? extends JCCompilationUnit> units) {