org.eigenbase.util
Interface ReflectiveVisitDispatcher<R extends ReflectiveVisitor,E>


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.

Version:
$Id: //open/dev/farrago/src/org/eigenbase/util/ReflectiveVisitDispatcher.java#4 $
Author:
Julian Hyde

Method Summary
 boolean invokeVisitor(R visitor, E visitee, String visitMethodName)
          Implements the Glossary.VisitorPattern via reflection.
 Method lookupVisitMethod(Class<? extends R> visitorClass, Class<? extends E> visiteeClass, String visitMethodName)
          Looks up a visit method.
 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 Detail

lookupVisitMethod

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 invoked
visiteeClass - class of object to be passed as a parameter to the visit method
visitMethodName - name of visit method
additionalParameterTypes - list of additional parameter types
Returns:
method found, or null if none found

lookupVisitMethod

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 invoked
visiteeClass - class of object to be passed as a parameter to the visit method
visitMethodName - name of visit method
Returns:
method found, or null if none found

invokeVisitor

boolean invokeVisitor(R visitor,
                      E visitee,
                      String visitMethodName)
Implements the Glossary.VisitorPattern via reflection. The basic technique is taken from a Javaworld article. For an example of how to use it, see ReflectVisitorTest. 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 invoked
visitee - object to be passed as a parameter to the visit method
visitMethodName - name of visit method, e.g. "visit"
Returns:
true if a matching visit method was found and invoked