langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
changeset 38918 bf1ed1a40f5b
parent 37759 f0b5daef41b6
child 39365 79f4425ad27c
equal deleted inserted replaced
38917:f7cfae16c87e 38918:bf1ed1a40f5b
    29 import java.io.File;
    29 import java.io.File;
    30 import java.io.IOException;
    30 import java.io.IOException;
    31 import java.io.PrintWriter;
    31 import java.io.PrintWriter;
    32 import java.io.StringWriter;
    32 import java.io.StringWriter;
    33 import java.lang.reflect.Method;
    33 import java.lang.reflect.Method;
       
    34 import java.lang.reflect.Constructor;
    34 import java.net.MalformedURLException;
    35 import java.net.MalformedURLException;
    35 import java.net.URL;
    36 import java.net.URL;
    36 import java.nio.file.Path;
    37 import java.nio.file.Path;
    37 import java.util.*;
    38 import java.util.*;
    38 import java.util.regex.*;
    39 import java.util.regex.*;
   280     private void initProcessorIterator(Iterable<? extends Processor> processors) {
   281     private void initProcessorIterator(Iterable<? extends Processor> processors) {
   281         Iterator<? extends Processor> processorIterator;
   282         Iterator<? extends Processor> processorIterator;
   282 
   283 
   283         if (options.isSet(XPRINT)) {
   284         if (options.isSet(XPRINT)) {
   284             try {
   285             try {
   285                 @SuppressWarnings("deprecation")
   286                 processorIterator = List.of(new PrintingProcessor()).iterator();
   286                 Processor processor = PrintingProcessor.class.newInstance();
       
   287                 processorIterator = List.of(processor).iterator();
       
   288             } catch (Throwable t) {
   287             } catch (Throwable t) {
   289                 AssertionError assertError =
   288                 AssertionError assertError =
   290                     new AssertionError("Problem instantiating PrintingProcessor.");
   289                     new AssertionError("Problem instantiating PrintingProcessor.");
   291                 assertError.initCause(t);
   290                 assertError.initCause(t);
   292                 throw assertError;
   291                 throw assertError;
   538 
   537 
   539         public boolean hasNext() {
   538         public boolean hasNext() {
   540             if (nextProc != null)
   539             if (nextProc != null)
   541                 return true;
   540                 return true;
   542             else {
   541             else {
   543                 if (!names.hasNext())
   542                 if (!names.hasNext()) {
   544                     return false;
   543                     return false;
   545                 else {
   544                 } else {
   546                     String processorName = names.next();
   545                     Processor processor = getNextProcessor(names.next());
   547 
   546                     if (processor == null) {
   548                     Processor processor;
   547                         return false;
   549                     try {
   548                     } else {
   550                         try {
   549                         nextProc = processor;
   551                             Class<?> processorClass = processorCL.loadClass(processorName);
   550                         return true;
   552                             ensureReadable(processorClass);
       
   553                             @SuppressWarnings("deprecation")
       
   554                             Object tmp = processorClass.newInstance();
       
   555                             processor = (Processor) tmp;
       
   556                         } catch (ClassNotFoundException cnfe) {
       
   557                             log.error("proc.processor.not.found", processorName);
       
   558                             return false;
       
   559                         } catch (ClassCastException cce) {
       
   560                             log.error("proc.processor.wrong.type", processorName);
       
   561                             return false;
       
   562                         } catch (Exception e ) {
       
   563                             log.error("proc.processor.cant.instantiate", processorName);
       
   564                             return false;
       
   565                         }
       
   566                     } catch(ClientCodeException e) {
       
   567                         throw e;
       
   568                     } catch(Throwable t) {
       
   569                         throw new AnnotationProcessingError(t);
       
   570                     }
   551                     }
   571                     nextProc = processor;
   552                 }
   572                     return true;
   553             }
   573                 }
   554         }
   574 
   555 
       
   556         private Processor getNextProcessor(String processorName) {
       
   557             try {
       
   558                 try {
       
   559                     Class<?> processorClass = processorCL.loadClass(processorName);
       
   560                     ensureReadable(processorClass);
       
   561                     return (Processor) processorClass.getConstructor().newInstance();
       
   562                 } catch (ClassNotFoundException cnfe) {
       
   563                     log.error("proc.processor.not.found", processorName);
       
   564                     return null;
       
   565                 } catch (ClassCastException cce) {
       
   566                     log.error("proc.processor.wrong.type", processorName);
       
   567                     return null;
       
   568                 } catch (Exception e ) {
       
   569                     log.error("proc.processor.cant.instantiate", processorName);
       
   570                     return null;
       
   571                 }
       
   572             } catch (ClientCodeException e) {
       
   573                 throw e;
       
   574             } catch (Throwable t) {
       
   575                 throw new AnnotationProcessingError(t);
   575             }
   576             }
   576         }
   577         }
   577 
   578 
   578         public Processor next() {
   579         public Processor next() {
   579             if (hasNext()) {
   580             if (hasNext()) {