@SuppressWarnings("unchecked")
	public <T> Macros with(Macro<T> macro) {
		Class<?> type = Type.supertype(Macro.class,
				Type.raw(macro.getClass())).parameter(0).rawType;
		return with((Class<? super T>) type, macro);
	}
@SuppressWarnings("unchecked")
	public <T> Macros with(Macro<T> macro) {
		Class<?> type = Type.supertype(Macro.class,
				Type.raw(macro.getClass())).parameter(0).rawType;
		return with((Class<? super T>) type, macro);
	}
@ SuppressWarnings ( "unchecked" ) public < T > Macros with ( Macro < T > macro ) { Class < ? > type = Type . supertype ( Macro . class , Type . raw ( macro . getClass ( ) ) ) . parameter ( 0 ) . rawType ; return with ( ( Class < ? super T > ) type , macro ) ; }
Uses the given {@link Macro} and derives the {@link #with(Class, Macro)}
type from its declaration. This is a utility method that can be used as
long as the {@link Macro} implementation is not generic.

@param macro No generic macro class (e.g. decorators)
@return A set of {@link Macros} containing the given one for the type
derived from its type declaration.
Uses the given { @link Macro } and derives the { @link #with ( Class Macro ) } type from its declaration . This is a utility method that can be used as long as the { @link Macro } implementation is not generic .