On 8/19/05, Mitch Upton <[EMAIL PROTECTED]> wrote: > > I can see how this would work with String attributes, as you can just > parse them, find the markers, and then get the method parameter named in > the marker (via ControlBeanContext). However, has anyone thought of a > way to do this with non-String types? In this case, you can't come up > with some proprietary 'marker' syntax, and it has to be valid Java > syntax. >
Hi Mitch, If your question is whether you could define an annotation like this: public @interface MitchAnnot { int intParam(); } and then use it like this: @MitchAnnot(intParam={param1}) public mitchAnnotatedMethod(int param1) { ... } then I think the short answer is that this is not possible. The problem here is that the Java compiler wants to do compile-time validation of @MitchAnnot usage against the declaration, including all of the annotation members. Because this is a syntactic check, it will happen before any APT processor handling of MitchAnnot (which exists for semantic checks and/or codegen) and the above will fail to compile. What you can do is something like this: public @interface MitchAnnot { String intParamName(); } and then: @MitchAnnot(intParamName="param1") public mitchAnnotatedMethod(int param1) { ... } This satisfies the Java syntax for MitchAnnot and then an APT processor associated with MitchAnnot could do additional checking. For example, it could verify that the type of parameter referenced by the intParamName member ("param1") is actually an integer and generate appropriate errors if the types don't line up with the semantic contract. Hope this helps! -- Kyle