@DecoratorOrder({Foo.class, Bar.class}) public interface OrderedOnType { @Foo @Bar @CustomSqlOperation void orderedFooBarOnType(); @Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFooOnMethod(); }
private Comparator<Class<? extends Annotation>> createDecoratorComparator(DecoratorOrder order) { List<Class<? extends Annotation>> ordering = Arrays.asList(order.value()); return Comparator.comparingInt(type -> { int index = ordering.indexOf(type); return index == -1 ? ordering.size() : index; }); }
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFooOnMethod(); }
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Foo.class, Bar.class}) void orderedFooBar();
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFoo();
@Foo @Abort @Bar @CustomSqlOperation @DecoratorOrder({Foo.class, Abort.class, Bar.class}) void abortingDecorator(); }
@DecoratorOrder({Foo.class, Bar.class}) public interface OrderedOnType { @Foo @Bar @CustomSqlOperation void orderedFooBarOnType(); @Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFooOnMethod(); }
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Foo.class, Bar.class}) void orderedFooBar();
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFoo();
@Foo @Bar @CustomSqlOperation @DecoratorOrder({Bar.class, Foo.class}) void orderedBarFooOnMethod(); }
@Foo @Abort @Bar @CustomSqlOperation @DecoratorOrder({Foo.class, Abort.class, Bar.class}) void abortingDecorator(); }