1. /**
  2. * @(#)AnnotationProcessors.java 1.2 04/06/21
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.mirror.apt;
  8. import com.sun.mirror.apt.*;
  9. import java.util.*;
  10. /**
  11. * Utilities to create specialized annotation processors.
  12. *
  13. * @since 1.5
  14. * @author Joseph D. Darcy
  15. * @author Scott Seligman
  16. */
  17. public class AnnotationProcessors {
  18. static class NoOpAP implements AnnotationProcessor {
  19. NoOpAP() {}
  20. public void process(){}
  21. }
  22. /**
  23. * Combines multiple annotation processors into a simple composite
  24. * processor.
  25. * The composite processor functions by invoking each of its component
  26. * processors in sequence.
  27. */
  28. static class CompositeAnnotationProcessor implements AnnotationProcessor {
  29. private List<AnnotationProcessor> aps =
  30. new LinkedList<AnnotationProcessor>();
  31. /**
  32. * Constructs a new composite annotation processor.
  33. * @param aps the component annotation processors
  34. */
  35. public CompositeAnnotationProcessor(Collection<AnnotationProcessor> aps) {
  36. this.aps.addAll(aps);
  37. }
  38. /**
  39. * Constructs a new composite annotation processor.
  40. * @param aps the component annotation processors
  41. */
  42. public CompositeAnnotationProcessor(AnnotationProcessor... aps) {
  43. for(AnnotationProcessor ap: aps)
  44. this.aps.add(ap);
  45. }
  46. /**
  47. * Invokes the <tt>process</tt> method of each component processor,
  48. * in the order in which the processors were passed to the constructor.
  49. */
  50. public void process() {
  51. for(AnnotationProcessor ap: aps)
  52. ap.process();
  53. }
  54. }
  55. /**
  56. * An annotation processor that does nothing and has no state.
  57. * May be used multiple times.
  58. *
  59. * @since 1.5
  60. */
  61. public final static AnnotationProcessor NO_OP = new NoOpAP();
  62. /**
  63. * Constructs a new composite annotation processor. A composite
  64. * annotation processor combines multiple annotation processors
  65. * into one and functions by invoking each of its component
  66. * processors' process methods in sequence.
  67. *
  68. * @param aps The processors to create a composite of
  69. * @since 1.5
  70. */
  71. public static AnnotationProcessor getCompositeAnnotationProcessor(AnnotationProcessor... aps) {
  72. return new CompositeAnnotationProcessor(aps);
  73. }
  74. /**
  75. * Constructs a new composite annotation processor. A composite
  76. * annotation processor combines multiple annotation processors
  77. * into one and functions by invoking each of its component
  78. * processors' process methods in the sequence the processors are
  79. * returned by the collection's iterator.
  80. *
  81. * @param aps A collection of processors to create a composite of
  82. * @since 1.5
  83. */
  84. public static AnnotationProcessor getCompositeAnnotationProcessor(Collection<AnnotationProcessor> aps) {
  85. return new CompositeAnnotationProcessor(aps);
  86. }
  87. }