langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
changeset 31506 4e07f827a794
parent 30066 d74c06a92bd8
child 31751 ec251536a004
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Wed Jul 01 09:51:47 2015 +0200
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Wed Jul 01 09:51:48 2015 +0200
@@ -33,6 +33,7 @@
 import java.net.URL;
 import java.util.*;
 import java.util.regex.*;
+import java.util.stream.Collectors;
 
 import javax.annotation.processing.*;
 import javax.lang.model.SourceVersion;
@@ -57,6 +58,8 @@
 import com.sun.tools.javac.main.JavaCompiler;
 import com.sun.tools.javac.model.JavacElements;
 import com.sun.tools.javac.model.JavacTypes;
+import com.sun.tools.javac.platform.PlatformDescription;
+import com.sun.tools.javac.platform.PlatformDescription.PluginInfo;
 import com.sun.tools.javac.tree.*;
 import com.sun.tools.javac.tree.JCTree.*;
 import com.sun.tools.javac.util.Abort;
@@ -66,6 +69,7 @@
 import com.sun.tools.javac.util.Convert;
 import com.sun.tools.javac.util.DefinedBy;
 import com.sun.tools.javac.util.DefinedBy.Api;
+import com.sun.tools.javac.util.Iterators;
 import com.sun.tools.javac.util.JCDiagnostic;
 import com.sun.tools.javac.util.JavacMessages;
 import com.sun.tools.javac.util.List;
@@ -282,7 +286,19 @@
                         processorClassLoaderException);
             }
         }
-        discoveredProcs = new DiscoveredProcessors(processorIterator);
+        PlatformDescription platformProvider = context.get(PlatformDescription.class);
+        java.util.List<Processor> platformProcessors = Collections.emptyList();
+        if (platformProvider != null) {
+            platformProcessors = platformProvider.getAnnotationProcessors()
+                                                 .stream()
+                                                 .map(ap -> ap.getPlugin())
+                                                 .collect(Collectors.toList());
+        }
+        List<Iterator<? extends Processor>> iterators = List.of(processorIterator,
+                                                                platformProcessors.iterator());
+        Iterator<? extends Processor> compoundIterator =
+                Iterators.createCompoundIterator(iterators, i -> i);
+        discoveredProcs = new DiscoveredProcessors(compoundIterator);
     }
 
     /**
@@ -481,6 +497,14 @@
             }
         }
 
+        PlatformDescription platformProvider = context.get(PlatformDescription.class);
+
+        if (platformProvider != null) {
+            for (PluginInfo<Processor> ap : platformProvider.getAnnotationProcessors()) {
+                tempOptions.putAll(ap.getOptions());
+            }
+        }
+
         return Collections.unmodifiableMap(tempOptions);
     }