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()) { |