[ 
https://issues.apache.org/struts/browse/WW-2577?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Brad Cupit updated WW-2577:
---------------------------

    Description: 
Note: this would be extremely easy to fix

The @Result annotation could have more restrictions that use the compiler to 
enforce certain behaviors.

1) Add @Target(ElementType.TYPE)
the documentation says not to put the Result annotation on methods, since it 
only works on classes. Adding the Target annotation to the Result annotation 
would make it a compiler error if the Result annotation is put on anything 
other than a class

2) make type() a Class<? extends Result>
the type() field is a Class, but by making it a Class<? extends Result> it 
enforces that the type implement the Result interface. The advantage here is 
much weaker than in 1), however it would self-document the code so anyone 
writing a custom 'type' would know to implement the Result interface.

The final code would look like this:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Result {
        String name() default Action.SUCCESS;
        Class<? extends Result> type() default NullResult.class;
        String value();
        String[] params() default {};
}

  was:
Note: this would be extremely easy to fix

The @Result annotation could have more restrictions that use the compiler to 
enforce certain behaviors.

1) Add @Target(ElementType.TYPE)
the documentation says not to put the annotation on methods, as it only works 
on classes. This update makes it a compile error if the action is put on 
anything other than a class

2) make type() a Class<? extends Result>
the type() field is of type Class, but by making it of type Class<? extends 
Result> it enforces that the type implement the Result interface. The advantage 
here is much weaker than in the first option, however it would self-document 
the code so anyone writing a custom 'type' would know to implement the Result 
interface.

The final code would look like this:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Result {
        String name() default Action.SUCCESS;
        Class<? extends Result> type() default NullResult.class;
        String value();
        String[] params() default {};
}

        Summary: @Result annotation - use the compiler to enforce stronger 
restrictions  (was: @Result annotation could use the compiler to enforce strong 
restriction)

> @Result annotation - use the compiler to enforce stronger restrictions
> ----------------------------------------------------------------------
>
>                 Key: WW-2577
>                 URL: https://issues.apache.org/struts/browse/WW-2577
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core Actions
>            Reporter: Brad Cupit
>            Priority: Trivial
>
> Note: this would be extremely easy to fix
> The @Result annotation could have more restrictions that use the compiler to 
> enforce certain behaviors.
> 1) Add @Target(ElementType.TYPE)
> the documentation says not to put the Result annotation on methods, since it 
> only works on classes. Adding the Target annotation to the Result annotation 
> would make it a compiler error if the Result annotation is put on anything 
> other than a class
> 2) make type() a Class<? extends Result>
> the type() field is a Class, but by making it a Class<? extends Result> it 
> enforces that the type implement the Result interface. The advantage here is 
> much weaker than in 1), however it would self-document the code so anyone 
> writing a custom 'type' would know to implement the Result interface.
> The final code would look like this:
> @Target(ElementType.TYPE)
> @Retention(RetentionPolicy.RUNTIME)
> public @interface Result {
>       String name() default Action.SUCCESS;
>       Class<? extends Result> type() default NullResult.class;
>       String value();
>       String[] params() default {};
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to