Package org.apache.calcite.util
Interface ReflectiveVisitDispatcher<R extends ReflectiveVisitor,E>
- Type Parameters:
R
- Return typeE
- Argument type
public interface ReflectiveVisitDispatcher<R extends ReflectiveVisitor,E>
Interface for looking up methods relating to reflective visitation. One
possible implementation would cache the results.
Type parameter 'R' is the base class of visitoR class; type parameter 'E' is the base class of visiteE class.
TODO: obsolete ReflectUtil.lookupVisitMethod(java.lang.Class<?>, java.lang.Class<?>, java.lang.String)
, and use caching in
implementing that method.
-
Method Summary
Modifier and TypeMethodDescriptionboolean
invokeVisitor
(R visitor, E visitee, String visitMethodName) Implements theGlossary.VISITOR_PATTERN
via reflection.@Nullable Method
lookupVisitMethod
(Class<? extends R> visitorClass, Class<? extends E> visiteeClass, String visitMethodName) Looks up a visit method.@Nullable Method
lookupVisitMethod
(Class<? extends R> visitorClass, Class<? extends E> visiteeClass, String visitMethodName, List<Class> additionalParameterTypes) Looks up a visit method taking additional parameters beyond the overloaded visitee type.
-
Method Details
-
lookupVisitMethod
@Nullable Method lookupVisitMethod(Class<? extends R> visitorClass, Class<? extends E> visiteeClass, String visitMethodName, List<Class> additionalParameterTypes) Looks up a visit method taking additional parameters beyond the overloaded visitee type.- Parameters:
visitorClass
- class of object whose visit method is to be invokedvisiteeClass
- class of object to be passed as a parameter to the visit methodvisitMethodName
- name of visit methodadditionalParameterTypes
- list of additional parameter types- Returns:
- method found, or null if none found
-
lookupVisitMethod
@Nullable Method lookupVisitMethod(Class<? extends R> visitorClass, Class<? extends E> visiteeClass, String visitMethodName) Looks up a visit method.- Parameters:
visitorClass
- class of object whose visit method is to be invokedvisiteeClass
- class of object to be passed as a parameter to the visit methodvisitMethodName
- name of visit method- Returns:
- method found, or null if none found
-
invokeVisitor
Implements theGlossary.VISITOR_PATTERN
via reflection. The basic technique is taken from a Javaworld article. For an example of how to use it, seeReflectVisitorTest
.Visit method lookup follows the same rules as if compile-time resolution for VisitorClass.visit(VisiteeClass) were performed. An ambiguous match due to multiple interface inheritance results in an IllegalArgumentException. A non-match is indicated by returning false.
- Parameters:
visitor
- object whose visit method is to be invokedvisitee
- object to be passed as a parameter to the visit methodvisitMethodName
- name of visit method, e.g. "visit"- Returns:
- true if a matching visit method was found and invoked
-