* @param binder The binder
* @return Extended visitor
*/
public SpaceVisitor visitor( final Binder binder )
{
final SpaceVisitor defaultVisitor = SpaceModule.Strategy.DEFAULT.visitor( binder );
final List<SpaceVisitor> customVisitors = create( SpaceVisitor.class, Binder.class, binder );
return customVisitors.isEmpty() ? defaultVisitor : new SpaceVisitor()
{
public void enterSpace( final ClassSpace _space )
{
for ( final SpaceVisitor v : customVisitors )
{
v.enterSpace( _space );
}
defaultVisitor.enterSpace( _space );
}
public ClassVisitor visitClass( final URL url )
{
for ( final SpaceVisitor v : customVisitors )
{
final ClassVisitor cv = v.visitClass( url );
if ( null != cv )
{
return cv;
}
}
return defaultVisitor.visitClass( url );
}
public void leaveSpace()
{
for ( final SpaceVisitor v : customVisitors )
{
v.leaveSpace();
}
defaultVisitor.leaveSpace();
}
};
}