< prev index next >

src/java.compiler/share/classes/javax/lang/model/element/ElementVisitor.java

Print this page




  42  *
  43  * <p> <b>WARNING:</b> It is possible that methods will be added to
  44  * this interface to accommodate new, currently unknown, language
  45  * structures added to future versions of the Java&trade; programming
  46  * language.  Therefore, visitor classes directly implementing this
  47  * interface may be source incompatible with future versions of the
  48  * platform.  To avoid this source incompatibility, visitor
  49  * implementations are encouraged to instead extend the appropriate
  50  * abstract visitor class that implements this interface.  However, an
  51  * API should generally use this visitor interface as the type for
  52  * parameters, return type, etc. rather than one of the abstract
  53  * classes.
  54  *
  55  * <p>Note that methods to accommodate new language constructs could
  56  * be added in a source <em>compatible</em> way if they were added as
  57  * <em>default methods</em>.  However, default methods are only
  58  * available on Java SE 8 and higher releases and the {@code
  59  * javax.lang.model.*} packages bundled in Java SE 8 were required to
  60  * also be runnable on Java SE 7.  Therefore, default methods
  61  * were <em>not</em> used when extending {@code javax.lang.model.*}
  62  * to cover Java SE 8 language features.  However, default methods may
  63  * be used in subsequent revisions of the {@code javax.lang.model.*}
  64  * packages that are only required to run on Java SE 8 and higher
  65  * platform versions.
  66  *
  67  * @param <R> the return type of this visitor's methods.  Use {@link
  68  *            Void} for visitors that do not need to return results.
  69  * @param <P> the type of the additional parameter to this visitor's
  70  *            methods.  Use {@code Void} for visitors that do not need an
  71  *            additional parameter.
  72  *
  73  * @author Joseph D. Darcy
  74  * @author Scott Seligman
  75  * @author Peter von der Ah&eacute;
  76  * @since 1.6
  77  */
  78 public interface ElementVisitor<R, P> {
  79     /**
  80      * Visits an element.
  81      * @param e  the element to visit
  82      * @param p  a visitor-specified parameter
  83      * @return a visitor-specified result
  84      */
  85     R visit(Element e, P p);
  86 
  87     /**
  88      * A convenience method equivalent to {@code v.visit(e, null)}.



  89      * @param e  the element to visit
  90      * @return a visitor-specified result
  91      */
  92     R visit(Element e);


  93 
  94     /**
  95      * Visits a package element.
  96      * @param e  the element to visit
  97      * @param p  a visitor-specified parameter
  98      * @return a visitor-specified result
  99      */
 100     R visitPackage(PackageElement e, P p);
 101 
 102     /**
 103      * Visits a type element.
 104      * @param e  the element to visit
 105      * @param p  a visitor-specified parameter
 106      * @return a visitor-specified result
 107      */
 108     R visitType(TypeElement e, P p);
 109 
 110     /**
 111      * Visits a variable element.
 112      * @param e  the element to visit


 129      * @param p  a visitor-specified parameter
 130      * @return a visitor-specified result
 131      */
 132     R visitTypeParameter(TypeParameterElement e, P p);
 133 
 134     /**
 135      * Visits an unknown kind of element.
 136      * This can occur if the language evolves and new kinds
 137      * of elements are added to the {@code Element} hierarchy.
 138      *
 139      * @param e  the element to visit
 140      * @param p  a visitor-specified parameter
 141      * @return a visitor-specified result
 142      * @throws UnknownElementException
 143      *  a visitor implementation may optionally throw this exception
 144      */
 145     R visitUnknown(Element e, P p);
 146 
 147     /**
 148      * Visits a module element.




 149      * @param e  the element to visit
 150      * @param p  a visitor-specified parameter
 151      * @return a visitor-specified result
 152      * @since 9
 153      */
 154     R visitModule(ModuleElement e, P p);


 155 }


  42  *
  43  * <p> <b>WARNING:</b> It is possible that methods will be added to
  44  * this interface to accommodate new, currently unknown, language
  45  * structures added to future versions of the Java&trade; programming
  46  * language.  Therefore, visitor classes directly implementing this
  47  * interface may be source incompatible with future versions of the
  48  * platform.  To avoid this source incompatibility, visitor
  49  * implementations are encouraged to instead extend the appropriate
  50  * abstract visitor class that implements this interface.  However, an
  51  * API should generally use this visitor interface as the type for
  52  * parameters, return type, etc. rather than one of the abstract
  53  * classes.
  54  *
  55  * <p>Note that methods to accommodate new language constructs could
  56  * be added in a source <em>compatible</em> way if they were added as
  57  * <em>default methods</em>.  However, default methods are only
  58  * available on Java SE 8 and higher releases and the {@code
  59  * javax.lang.model.*} packages bundled in Java SE 8 were required to
  60  * also be runnable on Java SE 7.  Therefore, default methods
  61  * were <em>not</em> used when extending {@code javax.lang.model.*}
  62  * to cover Java SE 8 language features.  However, default methods
  63  * are used in subsequent revisions of the {@code javax.lang.model.*}
  64  * packages that are only required to run on Java SE 8 and higher
  65  * platform versions.
  66  *
  67  * @param <R> the return type of this visitor's methods.  Use {@link
  68  *            Void} for visitors that do not need to return results.
  69  * @param <P> the type of the additional parameter to this visitor's
  70  *            methods.  Use {@code Void} for visitors that do not need an
  71  *            additional parameter.
  72  *
  73  * @author Joseph D. Darcy
  74  * @author Scott Seligman
  75  * @author Peter von der Ah&eacute;
  76  * @since 1.6
  77  */
  78 public interface ElementVisitor<R, P> {
  79     /**
  80      * Visits an element.
  81      * @param e  the element to visit
  82      * @param p  a visitor-specified parameter
  83      * @return a visitor-specified result
  84      */
  85     R visit(Element e, P p);
  86 
  87     /**
  88      * A convenience method equivalent to {@code visit(e, null)}.
  89      *
  90      * @implSpec The default implementation is {@code visit(e, null)}.
  91      *
  92      * @param e  the element to visit
  93      * @return a visitor-specified result
  94      */
  95     default R visit(Element e) {
  96         return visit(e, null);
  97     }
  98 
  99     /**
 100      * Visits a package element.
 101      * @param e  the element to visit
 102      * @param p  a visitor-specified parameter
 103      * @return a visitor-specified result
 104      */
 105     R visitPackage(PackageElement e, P p);
 106 
 107     /**
 108      * Visits a type element.
 109      * @param e  the element to visit
 110      * @param p  a visitor-specified parameter
 111      * @return a visitor-specified result
 112      */
 113     R visitType(TypeElement e, P p);
 114 
 115     /**
 116      * Visits a variable element.
 117      * @param e  the element to visit


 134      * @param p  a visitor-specified parameter
 135      * @return a visitor-specified result
 136      */
 137     R visitTypeParameter(TypeParameterElement e, P p);
 138 
 139     /**
 140      * Visits an unknown kind of element.
 141      * This can occur if the language evolves and new kinds
 142      * of elements are added to the {@code Element} hierarchy.
 143      *
 144      * @param e  the element to visit
 145      * @param p  a visitor-specified parameter
 146      * @return a visitor-specified result
 147      * @throws UnknownElementException
 148      *  a visitor implementation may optionally throw this exception
 149      */
 150     R visitUnknown(Element e, P p);
 151 
 152     /**
 153      * Visits a module element.
 154      *
 155      * @implSpec Visits a {@code ModuleElement} by calling {@code
 156      * visitUnknown(e, p)}.
 157      *
 158      * @param e  the element to visit
 159      * @param p  a visitor-specified parameter
 160      * @return a visitor-specified result
 161      * @since 9
 162      */
 163     default R visitModule(ModuleElement e, P p) {
 164         return visitUnknown(e, p);
 165     }
 166 }
< prev index next >