current.push( module );
}
else if( visited instanceof TransientDescriptor )
{
TransientDescriptor descriptor = (TransientDescriptor) visited;
Node node = document.createElement( "transient" );
addAttribute( "type", first(descriptor.types()).getName(), node );
addAttribute( "visibility", descriptor.visibility().name(), node );
current.push( node );
}
else if( visited instanceof MethodDescriptor )
{
MethodDescriptor descriptor = (MethodDescriptor) visited;
Node node = document.createElement( "method" );
addAttribute( "name", descriptor.method().getName(), node );
current.push( node );
}
else if( visited instanceof MixinDescriptor )
{
MixinDescriptor descriptor = (MixinDescriptor) visited;
Node node = document.createElement( "mixin" );
addAttribute( "class", descriptor.mixinClass().getName(), node );
current.push( node );
}
else if( visited instanceof DependencyDescriptor )
{
DependencyDescriptor descriptor = (DependencyDescriptor) visited;
Node node = document.createElement( "dependency" );
addAttribute( "annotation", descriptor.injectionAnnotation().toString(), node );
addAttribute( "injection", descriptor.injectionType().toString(), node );
addAttribute( "optional", Boolean.toString( descriptor.optional() ), node );
current.push( node );
}
else
{
Element element = document.createElement( visited.getClass().getSimpleName() );
current.push( element );
}
return true;
}
@Override
public boolean visitLeave( Object visited )
throws DOMException
{
Node node = current.pop();
if( node.getChildNodes().getLength() == 0 && node.getAttributes().getLength() == 0 )
{
return true;
}
current.peek().appendChild( node );
return true;
}
@Override
public boolean visit( Object visited )
throws DOMException
{
Element element;
if( visited instanceof DependencyDescriptor )
{
DependencyDescriptor descriptor = (DependencyDescriptor) visited;
element = document.createElement( "dependency" );
addAttribute( "annotation", descriptor.injectionAnnotation().toString(), element );
addAttribute( "injection", descriptor.injectionType().toString(), element );
addAttribute( "optional", Boolean.toString( descriptor.optional() ), element );
}
else
{
element = document.createElement( visited.getClass().getSimpleName() );
}