29

CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

  • Upload
    dangdat

  • View
    225

  • Download
    2

Embed Size (px)

Citation preview

Page 1: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�������������

�� ����������������� ������������� !���"�#���$��%'&(��)��*��+� ,�-%

.���/� !)(0 �21 ���� !��+�03��/45 ,���3�768�:9;�3��&(<=>��?!%@�A�� !�CBD��E�?,���

Page 2: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � � ��� ����� � ���� ��������� ����������������� � ��� �!���

" ����#����$&% ' �(' ) * + ,�, + -,

�� ��>��� ���������7 ������������� !���C�#���$��%@&$��)����-+� ,��%

.���/� ,)$0 �21 ���� !��+�03��/45 ,���3� 6 ��9;�3��&$<=>��?,%'�A�� ,� BD��E�?,���

. � ��%@/ E�%@&�/ �����0�%@)$%���&21 0 /�%@/�� ����������� :�3 ��) �� !� 1 ��%54 ��&76 ����+ 1 ��+�%98 �;: %@%<1 0 ����<8.�%@��&( !��+(=>3?6 � .5@A8 ����<

45% : ��&$�(/�%'� ���B4 � ��/ :�1 �(%@& � 1' ,%@�C1@%D �� !��%@&()$ !� 9 �B4 � 0-%<E�%@?!<F8GD�H03��/� ,)(0JI <C1@)LK )(0-%<4?K �919K 1NM

0 �$� : �PO�ORQSQSQTK <N1')LK )(0�%U4?K �91BK 1CM O!V 0���/� !)(0

Page 3: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

������������ ����������������������������! "�$#%���&��'��� (

)+*-,-.0/�,-.01

24365�798;:=<?>!8A@ B

BDCFE�G�8AH!H!8A8A@ I

IDCF@�E�JKJLE @ MN;OQPSRUTWV%XZY\[0X^]`_aV"bA_cOdOdOdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO eN;O fDRUTWV%XZYhgjiakQXliakm_onSOdOdOdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO p

MrqsE t?7$H!u�@�5�v�w�ux8Ay$E�JLz{t|8 2A}~ OQPr�A_aV!��P%�\��X^��V"] kQTa�Z_akQX^]�O%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO P��~ O f��A_aV!��f��\��kQT�_���X`X^�A����O%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO P^P~ O N��A_aV!�-N��0��i��l�����Zi���� �QV!T�OdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO P^P

����59@lJLE t6��8;>��^@Z<'z�H�<'5�:x59��H�u�8����F d¡¢CF@�E9J£JLE @ 292

¤�¥�8;t'E H�<|5�:xH!5§¦� �¨$© 2`M

ª �Ft'w959@Z<'H�u=JK>��o59@����� d¡«¥�v=t'8���z=z{t?<?�lE H�<'59: 2;�eAOQP��6¬ V%­ iaT�_��Z�Q®^Xliakm_a¬��¯OdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO P�°eAO f²±��Q®^XZiakQ_a¬��³f´OdO%OdOdOdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO P�µ

¶�©\E�·j8�t0¸¹<?:=º�<?:�w´¨��Zu�8�JL8 B9B

»D¦�t'E >�>!8;> B9I

2A}½¼!J�z{t'8�JL8;:$H"E H�<'59: B9IP��AOQP§±¿¾��Z�Q�A�o�6¬;iaX^� ®l¬ÀOdOdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO flNP��AO fxÁjb��l�����QV%��Â%��Ã"XAÄ�V�OdO%OdOdOdO%OdOdOUOdOdOdO%OdOdOdO%OdOdO%OdOdOdO%OdOdOdOUO f ~

292�¦�5J�z{<?t'E�H�<'5�: B ªB�0� !) ) : %L1@ �ÅJ1�� �� ,��� <-%@) 1'&( !E %') �� ���� � � ���:��� ��-����� � �� ,��� �#���$��%@&$��)�*��+� !��%9K8�� 5��� : &$� �; !<�%@)§Å3�� !�(%�) � ���(%��(&�����)$< 1 1 �� ,��� �:��%'& �����-��� ���( ,���-)E3��)$%@<7����&(%'+ 1 ? ��&D%AÆ : &(%@)$)( !����)LK>�� ���� !)#����%@&$)( ,��� �94 � � � 6 ��� ��/�/�����#� �(��%'&(� �;: %L1@ �ÅJ1�� �� ,���#6 ���-+ 1 ��+�%ÇAK�� 5��� ,)7������ ,?,��E�?!% ��) : ��&$�7�B4�È *B��SÉ �21 � ��� 8 ��Ê B�Ë ��� 8 � 6 Ê�Ì ��� 8��Ê �ÍË ����Î KÏaÐÒÑ�ÓlÓZÔ�Ô�ÕaÖ�×aØ�ÙmÚ^ÛoÙmÓ�Ü�Ó!Ý=ÛoÞ�Õ%Ó�Ø�ÙmÑ�ÙmÜ�ß!àá�ÕaØoÖ�ÙmÓ�Ü�Ó!Ý=ÛoÞ�ÙmÖâàQß!Ü�Ñ�ã`ß!Ñ�ÕUÙmÖ6ÙmÜ�ä0Ó�ã�Ñ�Ð0Ú�ÚAÕaà Û�å Ö0æ�ÕaçZÛoè�Ø�Ó

é ß!ÜZã`ß!à?ê=ë`ì�ìlíhî�ï�ïZð^ð�ðhñ�ò`ó�ñWôZõ;ó�ñ�ö^÷!ø9ï;ù�òZí�íAú`ûZì;ïlü`ú^ý�ì�þ�õA÷^ÿ������������ ��������������������� ��������� ������� ���!������� "�#�$&%('�)*���+��,-dÿ������/.

Page 4: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� ����� ���������

�� 5��� +�&���/�/���& 1'����)( !)$�()7�945� )$%'���94 : 03��)(%@)<8 %@�91 0 �947Q�0� 1 0 1@�����)( !)$�()��94��8)(% � �B4 : ���$��%@&$� O��91 �� !��� & 1 ?,%')LK B�0�% : 03��)$%@)�& 1 � )(%�� 1 %'�A�� ��?,?!9����< 1'����)$�( !� 1 ��% ��1���) 1���<�% �94´Å��� !�(%)$� � ��% ��&(����)$< 1 1@%'&()C�:��%@&C���-����� ����� !����)<K#B�0�%�?!%<4 ��� 03����<�� )( !<�%�= 6 . � @#�B43��0�%�& 1 ?,%') 1@���-)( ,) �*�94 ��� ���-����� � �� ,���: ���$��%'&(� ��0���� /��:9#1@��� ���� ,�&$%@+ 1 ? ��&�%;Æ : &(%')()$ ,��� � : %@&(������&$) = %BK +CK�������� @UK*B�0�% &$ ,+�0A��� 03����<�� )( !<�%&=>0�. � @ 1@����)( !)$��)��B4#�������������� !��� / ���� :�1 ? ���( ,���)$������%'/�%'�A��)LK� ������������� !����)�/���� 1 0�%'< ���"��0�% 6 . � �B4*��& 1 ?,% /���9 E % &(%��4 %@&$&(%'< ���5������0�%S0 . � E 9�/�%�����)#�94 ? ��E�%@?!) �(03��� ��&(%2���(���91 0�%@< �(� : ���$��%'&(�%@?!%@/�%@�A��)<KB�0�%xÅ3&$)$��4 � 1 &5)(%<1'�� !����) <�%') 1'&( ,E�% ��0-% ��0�&$%@%7/��� ,� /��;< 1 ?,%')��942�� ��>������ M %@�- ,)(%'&L8 +A���'%'�$��%@%'& ����< +�&(��/�/���& � ����< 0�� Q ,�C4 ��&$/ � �� ,��� ,) : ��)()$%@<E�%'� Q %@%@����0�%'/#K � %L1 �� !���"!5+� !��%@)��5/���&(% 4 ��&(/���? <-%�Å3�� �� !���7�94 ��0�% �� ����+�&(��/�/���&<8�����<�)(��/�%�%AÆ���/ : ?!%@)*�94 !�() 1 )$%9K � %<1'�� !���"# <�%@)21@&( !E %') �� ���� $ )&(%'? ���( ,���7�(� � � � 6 K B�0-%���%AÆ �&%�)$%L1'�( ,���-) <�%') 1'&( ,E�%��(0�%5��?,+���&$ !�(0�/�) 1 )(%'<F8? ��E %'? E� ,��<- ,��+N8�����<8�(0�% 1@? ��)()(%') 1 )$%@<FK � %L1'�( ,��� :� +� !��%@)���� %AÆ-��/ : ?,% �94��0-%� !/ : ?!%@/�%@�A� � �� ,����'A����< Å3�3��?,?!998A)(%<1'�� !��� � %AÆ : ? �� !��)*��0�% 1@��/ : !? ���( ,���: &$�;1'%@)()<K

( ) *+*�/�,-,�10//.

B�0�% ��� M %@�- ,)(%'&� ,) �(0�%£Å3&() ��/��;< 1 ?!%����7E�% � :N: ?, ,%'<FK B�0� !)�) : ?! !�()2��0�% �(%;Æ;� ,�A�(� ��%@& 9 )( !/ : ?,%���� M %@��)�) 1 1 0 ��)�� 1 / E %'&()L8 :�1 �N1 � 1 ���( ,���C���-<Q2��&$<�)��94<� 10 %'&(%@�A� � 9 : %@)<K32 ��&#%;Æ-��/ : ?!%98BQ %�/� ,+�0A� <- ,)$�( ,��+ 1 ,)$0 E�%'� Q %@%@� Q ��&(<�)* !�1N:N: %@&21���)$%�����<�?!� Q2%'& 1���)(%98 ����<�E�%'� Q %@%@� 1@%@& � �� !��� 9 : %@)>�94 :�1 �N1 � 1 ���( ,��� K �? ��0�� 1 +�0 ��0-% ��� M %@�� !)(%@&* !) 1�� : ��E�?,%2�94�/ 1 1 0 <�%@% : %'&>���3��? 9 )$ ,)#�(03��� �(0� ,)<8��0-% �� !/ ,) ��� ?, !/� � !�() Q ��& M �(��/��$Æ ,/� ,)(%*%UE 1@ ,%'�N1'998A����<�%@�3��E�?,%>+�&(%@����%'&4 %AÆ- !E� ,?! !� 9EA9 : ? �B1@ ,�-+C�(0�% E 1 &(<�%'� ��� �(0�% +�&(��/�/ ��& & 1 ?,%')L8 Q�0- 1 0 ��&$%/���&(% ��<�� : � ��E�?,%BK & 1 ?!%�03��) � ?,%<4 � 03���-< )( !<�%&=>6 . � @�����< ��&( !+�0A�>03����<�)$ ,<�% = 0 . � @UK B�0�%6 . � ,) � &(%@+ 1 ? ��&�%AÆ : &(%')()( !��� Q�0� 1 080���) �(��E�% / � � 1 0�%'< ���"��0�% ,� :�1 �5'��0-% 0 . � <�%@)21@&$ ,E�%@)���0�% �����-��� ���( ,���-)��(� E %���<�<�%'<C�(���(0�% �������� ���( ,������ % � K B�0�%(6 . � !) )(% : ��&����(%@< 4 &(��/ ��0�%(0 . � E 9�$167$ K B�0�%�4 ��?!?,� Q� ,��+� : %@&(������&$)S1����CE�% 1 )(%@<8��� ��0�% 6 . � �8:9<;>=@?� 9BAC;>=�D�;>=FEG;�H�HJI�=K=�E�L�H�EFM�?� 9BAC;>=ONP;�HKHJI�=�=�E>L�H�EQM�?� 9�N:;>=�D�;>=FEG;�H�HJI�=K=�E�L�H�EFM�?

B�0�%�0�. ��1 )(%')R$1'S$ ��)��7)$% : ��&(������&L8 ����<C03��) �(0�%�4 ��?,?!� Q� ,��+ 4 ��&(/������

Page 5: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���{� ��� ��� � �

����� ������� L�L@;�������� ;�L������ E ����� ��� ��= �"!�I��FE@N#� $���%��'& I E@N#�(�') ) ) ��� ���'��= �"!�I��FEL��$'��%��'&�I E L��

45%'���� ,?!)2��E � 1 � ��0�% : &( !/� �� !��%�1'����) ��& 1 1'��)������� !? ��E�?!%���&(%�+� !��%'�" ,� �(0�%���� �M %'�� ,)$%@&½Å3?,% = 45%<4 � 1 ?!��B � M %@�� !)(%@&<KP0 1 ?!%@) @AK

B�0�% 4 ��?,?,� Q� !��+C�(� M %'�� ,)$%@& & 1 ?,%� ,) 4 ��& �#Q ��&$< E %'+� ,�-�� ,��+(Q� !�(0 � )( !��+�?!%1�� : !����? ?,% �(�(%@&@�*,+'-�- . /'0 �� .�1 � .�2 2 . /3*4* �'576 . /'0 �' .�1 � . 2�2 . /3* � �2 ;�8FE>L9� ;>=�:�$�I � �QE = ;5L��<���7�'&=�>8��5L�?�$@@;>= ?A�

3 ��) � ���(%@)��(03��� �(0�% )$%�� 1 %'�N1@% / 1 ) ��E�%@+� !� Q� !�(0 ��� 1N:C: %'& 1���)(%?,% �(�(%@&L84 ��?!?,� Q2%'<8EA9 �@%'&(����&�/���&$% ?!� Q2%'& 1���)(% ?!%'�$��%@&$)LK�B�0� !)�)$%�� 1 %'�N1@% Q� !?,? ��0-%@�E�% ��������� ���(%@<"��) � 9 : %CB$BD� M %@��DNK*B�0�% ���$��&( !E 1 �(%EB$��& ��0�D�= ��&$�(0���+�&(� : 0A9C@03��)"��0-% ����? 1 %FB 1N:N: %@&23 �� !�( ��?GDQ' ��0�% ���$��&( !E 1 �(%HB M !��<�D 03��)"��0�% ����? 1 %B Q ��&(<�DNK

I JHKML /%.h.6/�//.

B�0�% +A�>�@%'�$��%'%@&�?,�;� M 1N: /��;< 1 ?,%� ,<�%'�A�� oÅ�%@) M %'9Q ��&(<-)� ,� �(0�%5��%AÆ �SQ�0- 1 0��&$% &$%@?,����%'<��(� : ��&$�� 1 ��?!& %@�A�� � 9 � 9 : %')L8 E 9 )$%���&21 0� ,�-+ � )(% �2�94 : &(%�� ) ����&$%@<?, !)$�()LKCB�0�%@)$%�+A���'%'�(�(%@%'& ?, !)$��)���&$% : ?,�� ,� ��%AÆ �´Å3?,%')L8 Q� ��0 ����% %'� �(&$9 : %'&?, !��%9K ���91 0 ?, !)$� &$% : &$%@)$%@�A��) � )$%'�7�94�����/�%')L8*) 1 1 0 ��) �3��/�%') �9471@ �� !%@)L8��&$+A���� !)����( ,����)<8-<3��9;) �94D�(0�%�Q2%'% M 8 %'� 19KÊ %'?,� Q !)�� )$/ ��?,? )$%L1 �� ,���8�94 ��0-% ?! ,) � 4 ��& 1 �� ��)��94 1 1 &$&(%'�N1'9��. HJI. I�= ;#�QE �>L 0 IF=K=�E>L�H7� + L��<�@MN N =N =O E = DP�>LCDP� =8O E = DP�>LCDP� =8�MQ E�@ 2 ���#@��>L�?Q; & &� =Q E�@ 2 ���#@��>L�?Q; & &� = MQ 2 ?Q; & &� =Q 2 ?Q; & &� = M

�� !��<�%;Æ+Å3?,%�= ?, !)$�()LK <�%<4 @� ,) 1 )(%'< �(� �91L1'%@)()7�(0�%@)$%C?! ,) ��)�' 4 ��& %@�91 0 ?, ,) � 8

Page 6: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

�/ ���$��& � 9 : %" ,)7) : %<1@ �Å3%@< ����<F8 � : �( ,���3��?,?!998*�/� !����& � 9 : %�� K�3 � �(0�%%;Æ-��/ : ?!%�E�%@?!� QT83�(0�%§Å�&()$��1@��? 1 /��8&$%<4 %@&$)��(���(0�% ?! ,)$������/�%B83��0�%�)(%L1'����<1@��? 1 /��C�(���(0�% /���$��&�� 9 : %B8 ����<C��0�% ��0� !&(<C�����(0�% /� ,�-��& � 9 : %BK�B�0�%')(%?, !)$�() ��&(% 1@��/ : ,?!%@< !�A���sÅ3�� ��%7) � ���(%7/ �91 0- ,��%')LK ��A9 ��%AÆ;� ��� M %@��) ��0������&$%2/���� 1 0�%'< EA9��(0�%@)$% /��91 0� ,�-%@) Q� ,?,? E�% ���-����� � ��%@<�Q� !��0 4 %���� 1 &(%') ) : %L1�� 4 9; !��+7��0�% / ���$��& ����< /� ,�-��& � 9 : %')LK�È &���/�/ ��&�& 1 ?!%@)���0�%'� ) : %L1' 4 9 �(0�%� 9 : %') �(� E % ,<-%@�A�� �Å3%@<" ,� : ��&$�� 1 1 ?,��& 1' ,& 1 1 /�)$� ���N1@%')LKHJI�=�=�E>L�H�� 1 ��=�E� �� )�&�M��� BHJI�=�=�E�L�H7� 1 IKL �#�� �F=FE 1 �>D ;�IKL'�HJI�=�=�E>L�H�� 1 IKL��<� )�&�M#�� HJI�=K=�E�L�H7� 1 IKL �<�� �@;�M�� 1 � D ; IKL��?'���QE()�&�M#�� ?'���FE� BM<�QEFH'� � H?'���9)�&�M#�� >?'���FE� >?'���

� �N8 4 ��&�%;Æ-��/ : ?,%B8 4 �") : %<1@ �ÅJ1 <3��9��%@%'<�) ���"E % !<�%@�A�� �Å3%@< 8 ��0�% /� ,����&� 9 : % B$<��:9�D")(0-� 1 ?,< E�%7) : %L1' oÅ3%'< !� �(0�%7+�&(��/�/���&<8 ,� ��&$<�%@&5�(� / � � 1 0����? 9 ,�C4 ��&(/����� !��� ��E�� 1 ��) : %L1@ �ÅJ1�<3��9;)�'� 4����A9 M ,��< �B4�<3���(% ��%'%@<�) �(�E�%� ,<�%'�A�� oÅ�%@<F8 ��0�%�/ ���$��&�� 9 : % B$<3���(% D )$0�� 1 ?!< E�%�) : %L1' oÅ3%'<F8 ��� %'�3��E�?!%��� M %@�-) ��������� ���(%@<�Q� ��0 ���A9 !�C4 ��&$/ ���( ,��� ��E � 1 ��<�����%')���� E %8 ,<�%'�A�� 1�Å3%'<FK 68��&$% !�C4 ��&(/����( ,��� ��E�� 1 � ��0� !) 1@��� E�% 4 � 1 �-< ,� �(0�% )$%L1 �� ,��� ���+�&(��/�/���&$)LK

� J . K���� K .

B�0�% �� ���� +�&(��/�/ ��& 1'���A� �� !��) & 1 ?,%') Q�0� 1 0 �91'� ��� �����-��� ���( ,���-)���) �)( !+���%'< ,� %@��&(?! ,%@& : 03��)(%')L8 !� ��&(<�%'& �(� : &(�;< 1 1@%�� 1 � :�1 �()��94 ��������� ���(%@<%@�A�( !�� !%@)<K B�0�%�& 1 ?,%')2��&(% )(% : ��&����(%@<� !�A��� � Q2� : ��&$�()L8;)(% : ��&����(%@<�EA9 B � 6 DNKB�0�% 6 . �#: %@&24 ��&(/�) : � �(��%'&(��� / � � 1 0� !��+Q'3��0�%�0 . � <�%') 1'&( ,E�%@) ��0�% ������� �� � �� ,��� ���5E�%���)$)( ,+���%@<FK��5� ��0�%76 . � 8���0-% : ���$��%@&$� ,)#<-%@) 1'&( !E %'<� !� ��%'&(/�)�94D��0�% �����-��� ���( ,���-)���?,&(%@��<-9"��)()( !+���%'<8EA9 ��0-% �(� M %'�� ,)$%@&�����<C+A���@% �(�(%@%@&<KB�0�%'&(%���&(%7% / �� ,�Q2�:9;) ,� Q�0� 1 0C�(0�% : ���(�(%@&$�#1@���"E % ) : %L1' oÅ3%'< �

� ) : %<1@ 4 9"�7)$��&$ ,��+ �94 ��%AÆ;� 83%9K +NK�� B � M %'�FK ) ��&$ ,��+���� B$�94�D��� ) : %<1@ 4 9 �(0�% ���(�(&( !E 1 ��%') = ����< ����? 1 %') @��94�� �(� M %'� = ��& ���A9 ����0�%'&�������������� !��� @U8 %9K +NK�� B � M %'�FK M !��<���� � 1 / E�%@&��

� ) : %<1@ 4 9 ��� ���-����� � �� ,���5� 9 : % 4 &(��/ ��0-%*+A���@% �(�(%@%@&<8�%BK +CK��R6 �;� M 1N: K /� !����&(B�9 : %��� /����A�(0 �

!"Ù Û�ÙmÖ�ß!àmÖ�ÓâÚAÓ�ÖoÖ�Ù#"�àmÕ=ÛoÓâÙmÜ�×aàmã�Ô�Õhß6àQß!Ü�Ñ�ã`ß!Ñ�ÕhÙmÜ�ÛoÞ�ÕjÖ�ß é Õ�${ß&%(')$hÞ�ÕaØ�ÕjàmÙmÖoÛoÖ$Ý|Ó�Ø$Ô�Ù *;Õ�ØoÕaÜZÛ�àQß!Ü�Ñ�ã`ß!Ñ�ÕaÖß!Ø�Õâã^Ö�ÕaÔ+'^ÛoÞ�Ó�ã�Ñ�Þ�,.-�/10½ÙmÖjÓ�Ü�à %�×�Ó�Ü^×�ÕaØoÜ�ÕaÔ2$hÙ Û�Þ é Ó�Ü�Ó�àmÙmÜ�Ñ�ã`ß!à�Ø�Õa×aÓ�Ñ�Ü�Ù Û�ÙmÓ�Ü

Page 7: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

6 �91'&(��)�1@��� ��?,)(� E�% 1 )(%'< !� �(0�%�6 . � �94 & 1 ?,%')LK B�0� !)"/�%@����)���0���� ,�-)$��%@��< �B4�%;Æ : &$%@)()$ ,��+ �(0�% !�C4 ��&$/ ���( ,��� !� �(0�% & 1 ?,%B8# �� !)�) : %<1@ �Å3%@< !�� /��91@&$�N8 Q�0- 1 0�1���� ��0�%'� E�% 1@��?,?!%@< !� ��0-% & 1 ?!%9K B�0�% &(%���)(��� 4 ��&���0� !) ,)�)$ ,/ : ?!9����������� !<"03��� !��+ ��� &(% : %@������0�% )���/�% !�C4 ��&(/����( ,���� !�")(%'��%@&(��?& 1 ?,%@)<K 6 �91@&$��)71����"��0-%@/�)(%@? ��%') E�% 1 )(%'< !��)( !<�% ����0-%@&�/ �B1@&(��)LKB�0�% )���/�% � : %@&(������&$)S1����CE�% 1 )(%@< ��) 4 ��& �(0�% �(� M %'�� ,)$%@&�& 1 ?,%@)<83 K %9K8���

B�0�% : � �(��%'&(� <�%') 1@&$ : �( ,��� ,) 4 ��?!?,� Q %@< EA9 � ?,��E�%@? 4 ��& ��0-%"�������������� !���FKD�) 1 ��?!?!9 �(0� ,) ?,��E�%@? Q � 1 ?!< E�%7��0�% )���/�%���) ��0-%�� �(��&$ ,E 1 ��% ����? 1 % Q�0- 1 0Q� ,?!? E�%���)()( !+���%'< �(�8 � 8 ��? ��0�� 1 +�0 )( ,�C1@%7��0�%�? ��E %'? ,) ���-?!9?!�;1@��?D�(�C�(0�%& 1 ?,%98 ��0� !) ,)T4 ��&�&$%���)$����)��94S1@��� ��%@�� !%@�N1'%�&�� ��0�%'&���0���� ��%<1@%')()( � 9�K(3 � !)��?!)(� : ��)$)( !E�?,%*����03����% /���&$%>�(03��������% : ���(�(%@&$� ����<�1@��&$&(%') : ����<� !��+�?,��E %'? 8: &$� �; !<�%@<"��03� ����0�% : ���$��%'&(�C ,)�%@�C1@?,��)(%@<8 ,�"� )(% ���B4#&$� 1 ��<CE�&��B1 M %'�()LKB�0�%�0 . � �94 ��0�%8& 1 ?!% 1'���A� �� !��) !�C4 ��&(/����( ,��� ��E�� 1 ����0�% �������������� !���FK3 �C4 ��&$/ � �� ,��� ��E�� 1 �D��0�% �������������� !��� !)D�(&�����) 4 %@&$&(%@< 4 &$��/ ��0�% 6 . � �943�(0�%& 1 ?,% 1 )( !��+8�(0�% ?,��E %'? � 1 )$� <�%@)21@&( !E %'<F8*���-< ��������� ���(%@<�Q� ��0 �(0�% %'�A�� !� 9� 9 : %= Q�0� 1 0 4 ��?!?,� Q�)� !�A@AK 2# !�3��?,? 9�83� �(��&$ ,E 1 ��%@) ���-< ��0�%' ,&71@��&(&(%') : ����<� !��+����? 1 %@)���&$%���<�<�%@<"��� ��0-%��������������� !���FK3 � �(0�%�)$ ,/ : ?,%�%;Æ-��/ : ?!% E�%@?!� QT8;�(0�% : � �(��%'&(��<-%@) 1'&( !E %'< Q� ,?!?3E %�� Q2��&$<�%@<��� �����-��� ���( ,��� �B4 � 9 : % B$������/�%AÆ'D = E %<1�� 1 )$%� !� ,) ����%'�A�� !� 9��3��/�% @AKDB�0� !)�����-��� ���( ,��� Q� ,?!?�03����% �(0�% ���$��&$ ,E 1 �(% B M !��<�DN8 Q� !��0 ����? 1 % B$?,�!1�� �� ,����DN8����<8��0�%����(�(&( !E 1 ��% B$& 1 ?,% DN8JQ� !��0C����? 1 % B�È ��� 6 �!1����( ,����DNKT= B�0-% :�1 & : ��)(%�94 �(0�% B$& 1 ?!% D ���(�(&( ,E 1 ��% ,) )( !/ : ?!9 �(� %@��)(% ��0�% : &(�!1@%')()��B4*/ ��� 1 ��? & 1 ?!%����?, !<3���( ,��� @AK/ I & E� O ��� �Q;�H���� � ; L9���Q;�;�8 I � ) DP����;>= 2 ���QE $ $ &�;�H���� � ;�L��? �&K;�H���� � ; L���� � �&�;�H���� � ;�L ) . LP� D E�� $F��8 �JL'?�$ * &�;�H���� � ;�L * � = I & E$ O ��� �Q;�H���� � ; L��

È &���/�/ ��&�& 1 ?,%') 1���� %')()(%'�A�� ��?,?!9 E�% �94�� Q2�� 9 : %')LK B�0-%sÅ3&() �7� 9 : %"�94& 1 ?,% ,�A����? ��%')�����+A���@% �(�(%@%@& ?,�;� M 1N: 8 E 1 �51���� E�%�<�%;Å3��%'< 1 )( !��+���)(/���?,?)(% � �94 : ��)()$ ,E�?!%�4 ��&$/ ���()LK�3 �+�%@��%'&���? 8 �(0�%@)$% ��&(% 4 �� ,&(? 9")$�(&��� !+�0A� 4 ��& Q ��&$<����<C��0 %@&�?! !�(�(?,% : ���(%@�A�� ,��? 4 ��&���/ E� ,+ 1 !� 99K

Page 8: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

B�0�% )$%L1@����< � 9 : %"�94 & 1 ?!%@) &$%@?!9 /���&(% 0-%����; ,?!9 ��� ��0-% +A���@% �(�(%@%@&7?! ,) ��)L8����<(1@�:��%@&�� / 1 1 0(Q� !<�%@&�&(����+�% �94 : ��)()$ ,E� !?, !�( ,%')LK#B�0- ,)����������-?!9�/�%�����)��0�����/����A9C& 1 ?!%@) / ��9CE�% ��%'%@<�%'< ��� <-%@) 1'&( !E % ��?,? )( � 1 � �� ,����)L8 E 1 � ��0������0-%@&(%� ,) �"/ 1 1 0 +�&(%@����%'& : ���(%@�A�� ,��? 4 ��& ��/ E- ,+ 1 � 9�K B�0� !)�?!%���<�) �(�C�(0�%��%<1@%@)$)( � 9 4 ��&7& 1 ?!%C��&(<�%'&( ,�-+ ����< : &( ,��&( !�( ,)(���� !���F8*��) Q� ,?!?2E�%"<� ,)21 1 )$)(%@<E�%@?,� QTK23��&�%;Æ-��/ : ?,%B8�� )( !��+�?!%8& 1 ?,%C ,)�) 1 E 1@ !%@�A���(� ,<-%@�A�� 4 9 ��� 3 � ��<�<�&$%@)()<8E�%L1�� 1 )(%���0�%'&(% !) ����?!9 ����%�E3��)( 1 4 ��&(/���� ���C)$%@&( !%@)��94 � 1 / E�%@&$)L8D%��91 0)(% � 1@�����-%L1'�(%@< EA9"�7<���� K�B�0�% & 1 ?!%54 ��& ��0- ,)� ,)�+� ��%'�CE�%@?!� Q��:�/ I & E� ; - � ? ?�=�EFMKM9� 2 ;�8FE>L ) 8 �5L'?�$ $�LKI D'!QE ='�� 2 ;�8FE>L ) M#��= �5L�� $ $ * ) * �� 2 ;�8FE>L ) 8 �5L'?�$ $�LKI D'!QE ='�� 2 ;�8FE>L ) M#��= �5L�� $ $ * ) * �� 2 ;�8FE>L ) 8 �5L'?�$ $�LKI D'!QE ='�� 2 ;�8FE>L ) M#��= �5L�� $ $ * ) * �� 2 ;�8FE>L ) 8 �5L'?�$ $�LKI D'!QE ='�? �"��� ? ?K=�EQMKM ��� � �<�'� ? ?K=FEFMKM�) ��? ?K=�EFM�MH$���8 �5L'?�$ * �"�'� ?�?K=�EFMKM * �

B �� ,<�%'�A�� 4 9C��<3���(% ��&��� !/�%B8 �(0�%@&$% ��&$%�/����A9 : ��)()( !E�?,% ����&( ,���� !����)<8 ����<)(��/ ��� 9�& 1 ?!%@)���&(% ��%'%@<�%'<FK 23��&�%;Æ-��/ : ?,%B83��0�% )���/�% <3���(% !�C4 ��&$/ ���( ,���1���� � :C: %@��&� ,� ��0-%T4 ��?,?,� Q� !��+ 4 ��&$/ ���() = ��/�����+�)$�����(0�%@&$) @ �6QE? � N�A������ AKA6QE? � N�A��JI &7��� AKA6QE? � N�A�JI &7� �� AKAKA6QE? N�A��: ; �JI &7� �� AKAKA6QE? )�JI &7�ON�A��: �� AKAKA6QE? N�A�JI &�� A�AKA

45 S0 %@&$%@�A��� 9 : %@)"�94 <3���(%�1���� ��?!)(� E�%%;Æ : &$%@)()$%@<FK 23��& %;Æ-��/ : ?,%B8 �(0�%4 ��?!?,� Q� ,��+�Q2� 1 ?,<C��?,)$� E %T1@?,��)()$ oÅ3%'<C��)�<3����% %'� �( !�( ,%@)'��: E�&����FE�����AFM� ; L'?'�������Õ é ÙmÑ�Þ�Û�"AÕ é Ó�Ø�Õ�Ö�ÚAÕa×aÙ �`×Uß!Ü^Ô�ÖoÛ�ß"Û�Õ�Û�Þ�Õ�ÚAÓ�Ö�Ö�Ù#"^àmÕ�àmÕaÜ�Ñ!ÛoÞ�ÖâÓ!Ý$Û�Þ^Õ�ÜZã é "AÕaØ ' "^ã^Û $hÙ Û�Þ^ÙmܹÛ�Þ^Õ×aÓ�Ü��`Ü�ÕaÖ�Ó!Ý0ÛoÞ�ÙmÖdÚ�ØoÓ���Õ�×WÛ $=Õ¹×aã�Ø�ØoÕaÜZÛoà %�Þ`ßaá�ÕÍÜ�ÓFÜ�ÕaÕ�Ô�ÛoÓ ' "AÕa×�ß!ã^Ö�Õ¹ÛoÞ�ÕaØ�ÕÍÙmÖUÜ�Ó-ß é "�ÙmÑ�ã�Ù Û % $\Ù ÛoÞß!Ü(%lÛoÞ�ÙmÜ�ÑdÕaàmÖ�Õ

Page 9: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

�� )E� L�?K=�E�@ ��M������������0D ��? � Q ;�%QE D�!QE =N � ��A�� ��NK= ;JD � � = H<:�� ; ����= �&

B�0� !)���?!)(� /�%�����)��(0�%@&$% ,) � / 1 1 0 +�&(%@����%'& : ����%'�A�� ��? 4 ��&���/ E- ,+ 1 � 9�K23��& %;Æ-��/ : ?!%98�/����A9 �94 ��0-% /����A��0�)"�94 ��0-% 9�%���&(1���� ��?!)(� E�% +� ,&(?!)�$� 0�&$ ,)$�( ��� �3��/�%')�= %9K +NK 6 ��9�8 � 1 ��% @AK B�0� ,)"/�%�����) �(03����1@��� �(%;Æ;� 1 ��? ,�;4 ��&(/����� !����/���9"E % ��%@%'<�%@<8����<� ,)(��/ E� !+ 1 ���(%5��0�%'/#8 ��&SQ % /��:9�03����%��� + 1 %@)$)Q�0� 1 0 !) /���&(%8?, M %@? 9�8�E3��)$%@< ��� 4 &$%�� 1 %@�C1'9�K 23��& %AÆ-��/ : ?,%98Q�0� !?,% BB23&( ,<��:9�D�1@� 1 ?!< E�%5� : %@&$)(��� $ ) ����/�% = ��)2 ,� B�6 ��� 2 &$ ,<3��9�D @A8 �2 !)/ 1 1 0C/���&(% ?! M %'?!9�����E % � <3��9 �94 ��0-%TQ %@% M K

��� �� ��������������������

� ���A��%AÆ;�1���� E�%8<-%���? � Q� ��0 ,� ��0-%8+�&(��/�/ ��& & 1 ?!%@)� ,� ��0�%�4 ��?!?,� Q� ,��+Q2�:99K B�0�% : ���$��%@&$� �(�E %C���-����� � ��%@< !) ��? Q2��9 )7%'�N1@?!��)(%'< EA9 �)$%'���94&(� 1 ��< E�&��91 M %'�()LK 3 4 : &(%<1@%'<� ,��+(1@��� �(%;Æ;�� ,)5���"E�% ,�N1'? 1 <�%'< !� ��0�%�& 1 ?,%98��0- ,)� !) : ?,�91@%'<E %U4 ��&(%���0� !)�)(% � �94�E�&(�91 M % ��)<K�B�0� !)�1'���A��%;Æ;� !)�<�%') 1@&$ ,E�%@< ,� %AÆ��B1'��? 9��0�% )(��/�%&Q2��9 ��) ��0�% : ���$��%'&(� ���CE % /���� 1 0�%'<FK 3 4 1@��� �(%;Æ;�4 ��?!?,� Q� ,��+�(0�% : � �(��%'&(� �-%@%@<-)���� E�% !�N1@? 1 <�%'<F8� !�� ,) : ? �B1@%@< �B4 ��%'&��(0�%? ��E %'?5+� !��%@� ��� ��0�% ���-����� � �� ,���FK � ���A��%AÆ �8 ,) 1 )(%@< Q�0�%@&$% � : ���$��%'&(�)(0-� 1 ?,< ����?!9�E�%5&(%<1@��+��- ,)(%'< 4 � �!1L1 1 &() !� � 1@%'&$� �� ,��)$ !� 1 ���� !���F8;E 1 � �(0�%1@��� �(%;Æ;�� !��)$%@? 4D<-� %') �-���74 ��&(/ : ��&$���B4D�(0�% : ���(�(%@&$�C�(��E�% ��������� ���(%@<FK23��&�%;Æ-��/ : ?,%B83��0�%T4 ��?,?!� Q� ,��+7& 1 ?,%�4 ��& B� ,/�% = ��)$) 1 /� ,�-+ ��� � :N: &$� : &$ ���(%/��91@&$� 4 ��& B 9�%���&�D @ Q2� 1 ?,<�/�%@�����(03���2� 9�%���& Q � 1 ?,<�����? 97E % &(%<1@��+��� ,)$%@< 4 ���;1<1 1 &$) : &(%L1'%@<�%'< EA9���0-%TQ ��&$<�) B ,��D7��& B E 9�D��/ I & E� �FE � = 0 ;�L��FE�� � N

9 � 2 ;�8FE>L ) M#��= �5L�� $ $ * �5L * �&8� 2 ;�8FE>L ) M#��= �5L�� $ $ * !'� * �?9!� . � / ? ?'���FE ��� � ?����FE() 2 ��D E���$���8 �5L�?�$ * ?'���QE * � = I & EH$ * �FE � = 0 ;�L��FE �� N * �

� !/� !? ��&$?!9�8 ��0�%�4 ��?!?,� Q� ,��+ & 1 ?!% = ��)$) 1 /� ,��+ ��� � :C: &(� : &( � ��%/��91@&$� 4 ��&B$%'/ �� !? D @NQ � 1 ?,< /�%���� ��0���� ��� %@/��� ,?���<�<�&$%@)$) Q � 1 ?!< ����?!9�E %�&(%<1@��+��� ,)$%@<

Page 10: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

4� �7�!1L1 1 &(&(%'< ,��)$ ,<�% ����+�?!%@< E�&(�91 M % ��) = Q�0� 1 0 Q2� 1 ?,< ����� �(0�%@/�)(%'?!��%@)4 ��&$/ : ��& � �94D�(0�% %@�A�� � 9C@ �/ I & E� . DP����&��? ?K=�EQMKMFN9 � 2 ;�8FE>L ) M#��= �5L�� $ $������ � � �Q?99 . � � ;#�@?? E D ����&9 � 2 ;�8FE>L ) M#��= �5L�� $ $������ � � �Q?��� � E>DP����&�)>� ? ?K=�EQMKM7$4��8 �5L'?�$ * E DP����& * � = I & EF$ * . DP����&��? ?K=�EQMKMFN * �

���� �� �������� � �� � ���

���91 0+�&(��/�/���&�03��)5/ : ��)()$ ,E�?!%�1'���A��&(��?#)$� 9;?!%@)@� B Ê &( ,?!? D�����< B$ :N: %@? � DNKB�0� !) !) ) : %L1' oÅ3%'< ��� �(0�% E %'+� ,�-�� ,��+ �B4 �(0�% +�&���/�/���&LK�B�0�% Ê &( ,?!?#) � 9 ?!%/�%�����)D��03��� Q�0-%@� /���&(%2�(03���7����%�& 1 ?,%2/ ��� 1 0�%@) �(0�% )(��/�%2&(%@+� ,���7�94 �(0�%<��!1 1 /�%@�A�L8#��0�% 9 ��&(% ��?,?�Å3&$%@<FKCB�0�%�&$%@) 1 ?!���94 ��0- ,) !) �(03��� � )(%'+�/�%@�A��94>��%AÆ ��1@� 1 ?,< E�%���?,?,�!1�� ��%@< /���&$% ��03��� ���-%�%'�A�� !� 9 � 9 : %98D����< ��0���� ���: &$�� ,��&$ !� 9���&(<-%@&( !��+ ,)���%<1@%')()���&$9�KË !�(0 ��0�%� :N: %@?!�#)$� 9;?,%B8 ����?!9�����%2& 1 ?!% 1���� E�%-Å3&$%@<&4 ��&#�(0�%�)���/�% &$%@+� !����94 ��%AÆ �L8 �91L1'��&(<- ,��+ �(���7)$%'���94 : &( !��&( � 9 & 1 ?,%')LK��*&( !��&( � 9 � : %'&����(%@)� ,� �(0�%4 ��?!?,� Q� ,��+�Q ��9�K K 23&$��/ ��?,?A��0-% & 1 ?!%@)#�(03���#/ ��� 1 07�5&(%'+� ,��� �943�(0�% <��!1 1 /�%@�A�*) � ��& �� !��+� � )(��/�% : �� ,�A��� 8 ��0-%7����% Q�0� 1 0 /���� 1 0�%@) ��0-%7?,����+�%@)$�5&(%@+� ,��� !)Å�&(%@< K

/;K 3 42/���&(%7��03��� ����%�& 1 ?,% / � � 1 0�%') �(0�%�)(��/�%�&$%@+� !���F8 ��0�%�����% Q� !�(0�(0�% 0� ,+�0�%@) � : &( !��&( � 9 !)�Å3&(%'<

%CK 3 4��(0�%@&$%7 ,)5/���&(% ��03��� ����% & 1 ?,% Q� ��0 ��0-%7)���/�% : &$ ,��&$ !� 9�8���0�%7����%<-%�Å3��%'< %@��&(?! ,%@&2 ,����0-% +�&���/�/ ��& ,)�Å3&$%@<FK

��"� : �� ,���3��? : &( ,��&( !� 9�<�%<1@? ��&����( ,��� !)���)()$�;1' ���(%@< Q� !�(0"%��91 0C& 1 ?!%98CQ�0- 1 0)(0-� 1 ?,<7E�%�� : ��)( �� !��%2 !� �(%@+�%'&LK B�0-%�0� ,+�0-%@&#�(0�%�� 1 / E�%@&L8��(0�% +�&$%����(%@& �(0�%: &$ ,��&$ !� 9�K Ê 98<�%U4 � 1 ?!� = 4 ��0-% : &$ ,��&$ !� 9"<�%<1@? ��&����( ,���C ,)�/� !)()( !��+ @���?!? & 1 ?,%')03����% ��0-% : &( ,��&( !� 9�� = K %9K ��0-% ?!� Q2%')$� : &( !��&( � 9C@UK23��& %;Æ-��/ : ?!%98 ��0-% 4 ��?,?,� Q� !��+�� Q �8& 1 ?,%')�4 ��&5?,�!1�� �� ,��� 1@� 1 ?,< : ����%@�A�( ��?!?!9/���� 1 0 ��0-% )(��/�% �(%;Æ;� K

Page 11: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � ���������� �

/ I & E� �Q;�H���� � ;�L�N- = � ;>= �<���� ��

99 ��Q;K;�8 I�� )�DP���F;>= 2 ��� E�$ $�&K;�H 1 8FE�� � �Q;�;�8 I � ) D �5L@;>= 2 ���QE $�$ ��=FE �� 7���FH E 2 ;�8FE�L��Q? ���� ;K;�8 I � )�DP����;�= 2 ���QE $ $�&K;�H������ ;�L��9 ��7���FH�E 2 ;�8FE>LP����Q;K;�8KI � )�DP� ��;>= 2 ��QE $ $�&K;�H 1 8FE�� � �Q;�;�8 I � ) D �5L@;>= 2 ���QE $�$ �@;�M#���Q? �

? �&K;�H Q � D E ����� �&K;�H Q � D E() � ;�H���� � ;�L $���8 �5L'?�$ * &K;�H���� � ;�L * � = I & EH$ * �Q;�H������ ;�L�N * �

/ I & E� O ��� �Q;�H���� � ; L- = � ;>= �<���� A9

9 ��� ;K;�8 I � )�DP����;�= 2 ���QE $ $�&K;�H������ ;�L��Q?2 �&K;�H���� � ;�L?��� � �&K;�H���� � ;�L ) Q � D E�$F��8 �JL'? $ * &�;�H���� � ;�L * � = I & E$ O � � �Q;�H���� � ;�L��

�)$) 1 /�% Q %�03����%���0-%���%AÆ;� B � 0� !�3�8)$%���DC8#��03� � B � 0- ,�3��DC ,) <�%;Å3��%@< !���0-%�+A�>�@%'�$��%'%@&���) B ?,�!1����( ,����DC8 ����< ��03� � )$%��8 !) <�%�Å���%@< ��) � B$?,�!1 M %'9�D�94 � 9 : % B : ��) � DNK 3 � ��0- ,) 1@��)(%B83& 1 ?!%�6 �;1@���� !��� Q � 1 ?!<8� :N: ?!998-E�%L1@� 1 )(% �/���� 1 0�%')5� ?,���-+�%@&�&(%'+� ,���8�94#��%;Æ;��)$����&$�( ,��+���� ��0�% )���/�% : �� !�A� = B � 0� !�3�)(%@��DN8���) � :N: ��)(%'<������ 1 ) � B � 0� ,�3�7D @UK .�� Q ��)$) 1 /�% Q2% � 1 )$� 03����% ��0-%>�(%;Æ;�B � 0� !�3��DNK 3 � ��0� !) 1@��)(%B8�E ����0�& 1 ?,%') 1@� 1 ?,<�E�%LÅ�&(%@< 8�E 1 � ��0�% : &( ,��&( !� 9&4 ��&6 �;1@���� !��� !)50� !+�0�%@) � 8 )$�" !��Q� !?,? � � M % : &(%<1@%@<-%@�N1'%9K 3 ���0- ,)51@��)(%B8 )$ ,�N1'%E�����0 & 1 ?!%@) : &$� < 1 1@%7��0�% )(��/�%����-����� � �� ,���F8 )(�C !� !) ����� )(�C ,/ : ��&$� ��� �Q�0� 1 08& 1 ?,% !)�Å3&(%'<F8 E 1 ����0- ,)� ,)������ ��? Q2��9 )��(0�%T1���)$%9K�5��% ,/ : ��& � ���A� : �� ,�A�C�94�Q�0� 1 0 ��� E�% � Q2��&$% !)"�(03��� : &( !��&( �� !)����( ,�������? 9 � : %'&����(%@) Q� ��0� !� � )( !��+�?,%�+�&���/�/���&LK �?!�(0�� 1 +�0�Q2% 1'� 1 ?!< / � M %: &$ ,��&$ !� 9 +�?,��E3��? EA9 03��� !��+ ��?,?#�(0�%�& 1 ?,%') ,� �C)$ ,��+�?!%7+�&���/�/���&L8 �(0� ,) !)����� ,<�%@��? < 1 %2��� ����0�%'& 1@����)( !<�%@&(���� !����)LK 3 ��)$�(%���< 8 Q % 1 1 &(&$%@�A��? 9 1@��/ E� ,�-%��?!? ��0-% & 1 ?!%@) 4 ��& %@�91 0C%@�A�� � 9 � 9 : % !�"� )$ ,��+�?,%�+�&���/�/ ��&LK# ��8 !��<�%AÆsÅ3?!%= /��� !�FK �(� : % @� !) 1 )$%@<����<-%�Å3��% Q�0- 1 0 +�&���/�/���&() )(0-� 1 ?,< E % 1 )(%@< 8 ����< ,� Q�0� 1 08��&(<�%'&��(0�%'9�)(0�� 1 ?,<CE %£Å3&$%@<FK

Page 12: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� ����� � ��� � ��� ��� ��������\� (��

� K�� *�.�� .â*������ /�� K������ /

6 %'� 1 ) ��� M %���� %AÆ-��/ : ?,% �94 �(0�%�Q�0���?,% % � ) � ��+�% : &$�;1'%@< 1 &$%9K � 1C:N: ��)(%�Q %Q� ,)$0 ��� &$%L1'��+��� !)(% �(0�% : 0�&(��)(% B�� ��� 8 ����� D � <���?!? ��&$) D ��)7��� %'�A�� !� 9 �94� 9 : % B . 1 / E�%@& DC8CQ� !�(0"�(0�%�4 %���� 1 &(% B$/�����% 9�DNK2# !&()$�>�94 ��?,? 8�Q2%5+� !��%�����%;Æ-��/ : ?,% �94 � +�&���/�/���&�& 1 ?!% = ����<1'��&(&$%@) : ���-<�� ,�-+�/��91'&(��) @ 4 ��&�/�����%'998CQ�0� 1 0�Q � 1 ?,<C&(%<1@��+��� ,)$% �(0� ,) � 9 : % �94 : � �(��%'&(�FK

� �FH>=Q;� � ;#� � ;75 Q 1 � ;#� � ;75 Q9 � 2 ;�8FE>L ) M#��= �5L�� $ $ * D * � 8� 2 ;78FE>L )BM���= �5L��4$ $ * D ��& &'� ;�L * � 8� 2 ;78FE>L )BM���= �5L��4$ $ * ! * � 8� 2 ;78FE>L )BM���= �5L��4$ $ * !���& &'� ;�L * �?

� �FH>=Q;� � � 5 + Q 2�1 Q + � �. /9 � 2 ;�8FE>L ) 8 �5L'?�$ $�LKI D'!QE ='�9K9 � 2 ;�8FE>L )BM#��= �JL�� $ $ * � * �&8� 2 ;�8FE�L )BM#��= �5L���$ $ * ) * � ?

� 2 ;78FE>L ) 8��5L'?�$ $�LKI D�! E ='�Q? �9K9 ����FH�E 2 ;�8FE>L ) 8 �5L'? $ $ M#���FH�EQ? �9 � ;#� � ;75 Q 1 � ;#��� ;75 Q ? � ??

/ I & E� � ;�LQE�� N� � E()�� )���A �@;�IKL�? M9

9 � � 5 + Q 2�1 Q + � �. / ?9 7���FH E 2 ;�8FE�L ) 8 �5L�? $ $ M<���FH�E ? �9 ���Q;K;78 I � )�D ����;>= 2 ���QE�$�$ HJI�=�=�E>L�H�� 1 IKL��<���Q?

? �D ;�LQE�� ����� �D�;�LQE� ) Q I D'!QE =�$���8 �5L'?�$ * D�;�LQE� * � = I & EH$ * � ;�LQE� N * �

� �� �� �"! $#&% �('�� � �� *) � � ���

B�0�%"��� M %@�� !)(%'& )(% : ��&(����%')��(0� ,) : 0�&(��)(%C ,�A�(� �(0�%(4 ��?,?,� Q� !��+ ��� M %@��)<K 3 �+�%'��%@&(��? 8 ��Q ��&(< !) 1'��/ : &( ,)$%@<��B4 ���A9�� 1 / E %'& �94 ?,% �(�(%@&() �94 %' !��0-%@& 1@��)(%B8 ,�C1@? 1 <� ,��+ �70A9 : 0�%'�F8 E 1 � �����(0� ,��+7%'?,)$%�' �7� 1 / E�%@&� ,)S1'��/ : ��)$%@<C�94 ��� 9

Page 13: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � � ��� ���¹� ��Q���a� � � � � ��� ��� � ������� � ��� ����� � (�(

)(% � 1 %@�N1'% �94-<� ,+� ��) ' :�1 �N1'� 1 ���� !��� !) &(%L1'��+��� !)(%'<� !��<� !�; !< 1 ��?!?!9 = %��B1 0 1 03��& ��91 ��%@& !) � )$% : ��&����(%C�(� M %'� @U82����< ���A9 � 1 / E�%@& �94�1@����)$%L1 1 �� ��% ) : �91'%@)����<JO���&S1@��� �(&(��? 1 0���&��91 ��%'&()���&(% &(%<1@��+��� ,)$%@<8��)���)$ ,��+�?,%5) : �91@% ��� M %@�FK2 ;�8QE>L � M#��= �JL�� $ ������AKA � � � 8��5L'?�$PLKIKD�!QE = � & E�L���: $ �2 ;�8QE>L � M#��= �JL�� $ ��� � � � � 8 �5L'?�$ �KIKL�H#�KI���� � ; L � & E>L�� �: $ N2 ;�8QE>L � M#��= �JL�� $ ����A�AKA � � � 8��5L'?�$PLKIKD�!QE = � & E�L���: $ �7���QH�E 2 ;�8QE>L � M#��= �5L�� $ � � � � � 8 �5L�?�$ M<���FH E � & E>L��� :�$ N2 ;�8QE>L � M#��= �JL�� $ ��� + � � � 8 �5L�?�$ @ ;>= ? � & E>L���: $ � ;�=�:�$H�'&�& 0 �7��M7���QH�E 2 ;�8QE>L � M#��= �5L�� $ � � � � � 8 �5L�?�$ M<���FH E � & E>L��� :�$ N2 ;�8QE>L � M#��= �JL�� $ ��� ? ; & &�� =@M � � � 8��5L'?�$ @ ;�= ? � & E>L��� :�$ � � ;>=�: $�&�;�@FE = H��FM�E

� ��� �� �"! � #� � �� ��('�� !

B�0�%�+A���'%'�$��%@%'& ?, ,) ��) ��&$% ��0�%'��)$%���&21 0�%@< ����Å3��<���?!?��!1L1 1 &(&(%'�N1@%')D�B4-/���� 1 0�� ,�-+�Q2��&(<�) !� ��0-%2��%AÆ �LK 3 �ÍÅ3�-<�) ��0�% 4 ��?,?!� Q� !��+ / ��� 1 0 4 ��& ��0�% ) ��&$ ,��+EB2D �<���?!? ��&$) D��

�Q;K;78 I � � D �5L�;>= 2 ��� E�$ �@;�M�� 1 � D�; IKL�� � D ����;>= 2 ���QEH$ H�I�=K=�E>L H�� 1 IKL �<�

� � � �� �"!�� #� )���� ) ������ �

B�0�% +�&(��/�/���&�& 1 ?,% 4 ��&�/�����%'9 !)���0�%'� !�A��� M %@<FK ��0-% & 1 ?,% 6C����%'9 &(%<1@��+��� ,)$%@) ��0-%�%@�A�� !&(%�)$�(&( !��+CB�� ��� 8 ����� D � <���?!? ��&$) D ��)���. 1 / E�%@&*%'�A�� !� 9�94 � 9 : % 68����% 9��Q I D'!QE = � 8 �5L�?H$PD�;�LQE� � = I & EF$ � ;�LQE�� N

� � * . � K���� /�1���.@, � . ,�*�, *��s. �£/ �"!$#&% J . K�� � K .

�� 5��� !)5)( !/� !? ��&��(� � � � 6 8 Q� ��0 � 4 %<Q %;Æ;1'% : �( ,����)<K 2# !+ 1 &(% +� !��%@) �Ê . 2�= Ê �91 M 1 ) �?.�� 1 & 23��&$/ � �A@ <�%') 1'&( : �� ,���C�B4D�(0�% +�&���/�/���&LK ��C%;Æ-��/ : ?!% & 1 ?!%T6 . � �/ I & E� (' ��&K;7� D�;�IKL��9C9 � 2 ;�8QE>L ) 8 �JL'?�$ $ * H ;�L������5L�M ��� � �<��� L'? 0 ;JD�DP� * �Q?2 LKI D�!QE =� 2 ;�8FE�L )BM#��= �5L���$ $ * 8 ��&�; �K='� D M * � ?� @:@; & E

Page 14: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � � ��� ���¹� ��Q���a� � � � � ��� ��� � ������� � ��� ����� � (

E3��)$ 1 1'����) ��&��� ,�A� ) : %L1' oÅJ1@���� !��� � :N: %���&() E�%'� Q %@%@� 1 1 &$?!98E�&��B1@%@)<8 ����<+� ��%@) � 1'��� � 1 �C1'�� !��� �94������-��� ���( ,���JO����(�(&( !E 1 ��% O ����? 1 %�) : %<1@ �Å3%@&$) Q�0- 1 003����%8��� /���� 1 0 ��� � : ��& �� 1 1 ? ��& : �� !�A� !� ��0-% �����-��� ���( ,��� +�&�� : 0FK 1@��/ : ?!%;Æ�1@����)$�(&��� !� � ) : %L1@ �ÅJ1�� �� ,��� � :N: %���&$) Q� !�(0� ,� &$� 1 ��<7E-&��91 M %'��)<8;����</��:98E�% E � 1 ��< �(�"� ? ��E�%@? Q� !�(0 ��0�% B'� D � : %@&�� ����& ' ��0�% ? ��E�%@? ��0�%'� E %��1@��/�%') ������ ,?,��E�?,%# ,���(0�% 0 . � 4 ��&D�91L1'%@)()D�����(0�% �������������� !����) / ��� 1 0�%@<�EA9��0-% 1@��/ : ?!%;Æ(1@����)$�(&��� !� �LK � ��/ : ?!%;Æ#1@���-)$��&(�� ,�A�()�1���� ��?,)$� 03����% H ?!%@%'��%� : %@&(������&$) =�� 8��&8�� @ � :N: ?! ,%'< ��� �(0�%@/(K )$%�� 1 %'�N1@% �94T1@����)$�(&��� !� �()&(% : &(%')(%'� �()"� )(% � 1 %@�A�� ,��?�1'��� � 1 �C1'�� !����'�<� ,) � 1 �N1'�( ,��� ,)�&(% : &(%')(%@�A�(%@< EA9)(% : ��&(���� !��+ 1@����) ��&(�� ,�A��)SQ� ��0 B 8 DNK� ���A��%'&$�(%@< ������0�%T4 ��&$/ �����91<1@% : ��%'< EA9C�(0�%7������� ��� 6 6 : ��&$)(%'&�+�%'��%@& ����(��&L8#�(0�%�/���)$��)( !+��� �ÅJ1����A��4 &���+�/�%@�A� �94���0�% � � � 6 +�&(��/�/ ��& = ��) <�%��) 1'&( !E %'< EA9 :N: %'?!�L8 E3��)$%@< ��� ��� ��&$ ,+� !�3��?*) : %L1' oÅJ1@���� !��� 4 &$��/ � BS3 ���� B�� 0�Q ��& M !��+ +�&(� 1N: 1 03�� !&(%'<7E 9 Ê �:9A��� �5�A9;)(0 M %'� 9!1 0 @>+��;%@)#?, M % �(0� ,)'�H ;�L M#��='���JL�� O =Q; I � ��� �

9>����� �FE = L . & E D E�L���? � 9 * 8 * 9>�������FE = L . & E D E>L'��? � ? �

�������FE = L . & E D E>L'����� �* � * H ;�L M#��='���JL�� 9 * � * H ;�L M#��='���JL���? � * � *

8 * 9 * H ;�L M#��='���JL�� O =Q; I � * ? * 9 8P& EKE>LQE 5�� ? � 9>! �5L'? �5L��@? �

.�%'&(%5�(0�%KÅ3&$)$��?, !��%��B4 �P��� �FE = L . & E D@E>L�� ,)�� E���)( 151@���-)$��&(�� ,�A�L8 ��0-% )(%L1������<8�&1@��/ : ?!%;Æ ����%9K

Page 15: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � � ��� ���¹� ��Q���a� � � � � ��� ��� � ������� � ��� ����� � ( �

��� ûZì;ó�þ�ë;ò�ôlú^ü�õAò���ô�� � öZú^õ î�î��� ø � ûZì;ó�í�ë;ò�ôlú � ó��`ú��`ì��������� ó����Aû^úlþ�ëAò`ôlú^ü�õ`ò���ô�� � ölú^õ������ � í�ë;ò`ôZúAô�� � ó��`ú��`ì������������! �" �

� ó����Aû^úlþ�ëAò`ôlú^ü�õ`ò���ô�� � ölú^õ î^î#� í�ë;ò`ôlú�� ó��`ú���ì��� ó���í � ì�� $ ó��`ú��`ì ����%&���� ÷Zí`ìAó^÷��!� � ó��`ú��`ì � ò`ô�ô^ó����!� ó���ú��`ì�����%&����(' � ûlú��)� � ò`öZõA÷�*`ú�+,��%

' � ûlú¢î�î#� õ � û^ú � ó��`ú���ì�� � í`õAó^÷lõ;óZì�-�� ó��`ì�ú��`ú^õ������. ú�+�ì�/;ò�� � � ó���ú1032�2��40 ' ó��^ë`ì�/Aò�� � � ó��`ú

� ò`ö�õA÷�*Aú�+³î^î#� ø9ò`öZõA÷�� ó��`ú���ì�� þ;òZì�ì`ú^õ�� � û^ú�ø ú��`ì5�76;öZì;ól÷��,�

. ú�+^ì�/;ò�� � � ó��`ú³î�î#�8 ÷���ôZì�õ`ò`ó��`ì 9lõA÷ � í

8 ÷��;ôZì�õAò`ó��`ì 9^õA÷ � í î^î#� þ;òlì�ì�ú^õ�� � ûlú�ø ú��`ì:��� ��; òlõ � þ;òlì^ì`ú^õ�� � û^ú�ø ú���ì:������%

þ;òlì^ì`ú^õ�� � û^ú�ø ú���ì+î^î#�� ó��`ú��`ì��<�>=Aò`ô�ó�ö�þAòlì�ì`ú^õ�� � û^ú�ø�ú��`ì?� 8 ÷!ø;íAû^ú^ý^þ;òZì�ì`ú^õ�� � û^ú�ø ú��`ì��

=;ò`ô^ó�ö�þ;òlì^ì`ú^õ�� � û^ú�ø ú���ì î�î#��� û^ú�+�ì�=`õAò�ölú � 8 ÷��;ôZì�õAò`ó��`ì $ ö^÷"ø�ø9ò�� 8 ÷���ôZì�õAò�ó��`ì@��% õ;ó��^ë`ì�=`õAò`ölú��,�� $ ôZì�õ;ó����������

8 ÷!øAí;û^ú^ý^þAòlì�ì`ú^õ�� � û^ú�ø�ú��`ì î^î#� û^ú�+�ì�=�õAò`ö�A;úlì�� 8 ÷���ôZì^õAò`ó��`ì�9^õA÷ � í õ;ó��^ë`ì�=`õ`ò`ö�A;ú^ì �� A�û^ú^ú��Aú í��,���� ö^÷�û^÷��!� $ ó��`ú��`ì �<� ó��`ì�ú��`ú^õ��������

8 ÷��;ôZì�õAò`ó��`ì�î�î#�� í;û`ó�� ������� ó��`ú��`ì � � íAúlõ;ó^÷���� ó��`ú��`ì � ú�B � ò^û`ô��C6�ì�ì^õ�D;ò�û����

6�ì�ì^õ�D;ò�û¢î�î��� ôZì�õAó�� ���<� ó��`ú��`ì ��� ó���ì`ú��`ú^õ �<� +Aû�÷^òlì;ó�� �lþ;÷`ó��`ì �E� �; ÷�÷�û����

' ó��lë`ì�/;ò���� � ó��`ú³î�î��6AöZì;ó^÷�� � ö^÷!ø^ø9ò��C6;öZìAó^÷��,��%

6;öZìAó^÷���î�î#�GF ò!ø ú��!H^ò�IAò�=;û�÷`ö�A?�J6��;÷�� -�ø ÷ � ô�H^ò�IAò�=;û�÷�ö�AK�6;ô�ô�ó����Zø ú���ì � ý^í`õ�úAô�ô�ó^÷��K� ó��`ú��`ì ���

F ò!ø�ú��!H^ò�I`ò�=;û�÷`ö3A î^î#� ö^÷�û�÷���� ó��`ú���ì�� û^ú�+�ì�=`õAò�ölú � 8 ÷���ô � ø ú�=;û^÷`ö�A

6��;÷�� -�ø9÷ � ô�H^ò�IAò�=;û�÷`ö�A î�î#� û^ú�+�ì�=�õAò`ölú � 8 ÷���ô � ø�ú�=;û�÷`ö3A

6;ô�ô^ó����Zø ú��`ì � ý^í�õ`úAô�ô�ól÷�� î�î��� ö^÷�û^÷��!�<� ö^÷�û�÷��^í;û � ô��L� ó��`ú��`ì � íAú^õAó^÷���� ó��`ú��`ì�� ò`ô�ô�ó����!� û^ú�+�ì�=�õAò`ölú � ó��`ú��`ì�� ò`ô^ô�ó����!� 6�ì�ì^õ�D;ò�û�� $ ö^÷^û�÷��!� ó��`ú��`ì�� íAú^õ;ó^÷���� ó��`ú��`ì�� íAúlõ;ó^÷���� ó��`ú��`ì ���C�� ö^÷"ø�ø9ò������

��% õ;ó��^ë`ì�=`õ`ò`ölú �8 ÷��;ô � ø ú�=Aû�÷`ö�Acî�î#�Hlò�IAòÒö^÷��`ú

M ������� � (!NPORQSM ��T "�#�$&%VU ��� �+� � �+�

Page 16: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� ��� �h� � � � � ��� �6� � (1�

��C%;Æ-��/ : ?!% �94 �&1'��/ : ?,%'�(% & 1 ?!%��/ I & E� Q I D�!QE = M�� L'? + L��<�9C9 � 2 ;78FE>L ) 8��5L'?�$ $ * LKI D'!QE = * � ? � LKI D'!QE = MF� 2 ;�8FE>L ) 8 �5L'?�$ $ * IKL �<� * � ?��� � LKIKD�!QE = M�) Q � D E�$F� = I & EF$ * Q I D�!QE = M�� L'? + L��<� * �

B�0� !) )���9;)�� /���� 1 0 )(% � 1 %@�N1'%@)��94�� 1 / E�%@&()�4 ��?,?!� Q %@< E 9 � 1 �� �5' 1@&$%����(%�(.���/�%��������������� !��� �91'&(��)$) �(0�%�) : ��� �94 �(0�%�� 1 / E %'&()<8 ����< ���$��&( !E 1 �(%& 1 ?,%5Q� !�(0 ����? 1 %T. 1 / E�%@&()$ ���<ND��� �5$ K

� � / � K .Q,Z*�, .0*r) #����

Ë %�� ��������������������! #"%$�&('��*) !�"����&$ ,� 1 ) Q ��9;)@� K . � : &(%��2��& : ��) ���"Å0Æ�1@��� �(%;Æ;� ,)���?!?,� Q %@<"���"��0�% 6 . � K/;K . �&4 1 �N1'�( ,����1@��?,?!) ���"��0�% 6 . � K%CK . � )$��&$ ,��+ )$0���&$�(03����<C���"��0�% 6 . � K+ K¹Ë %�03����%�� Q � & 1 ?!%�� :N: ?! 1@���� !��� ��?!+���&$ !��0-/�) = ���-%�?, M % B %;Æ;� �*&(�C8;����%?! M % Ê &( !?,? O�68 !�(&(% @UK � %@% )(%<1'�� !���-,.,JK

!;K*�¹Æ : &$%@)()$ ,���-)8&$%@? � �� ,�-+ �(� ?,��E�%@?,) 1 � E � 1 ��< ��� ��0-%�6 . � ��&$% �-���% ����? 1 � ��%@< ��� ��0-% 0 . � K =>3 � BD%AÆ ���*&(�8�(0�%'9 %'����? 1 ����%7��� B 4 ��?,)(% DNKP@� %@% ��0�% E� !��<� !��+7) 1 0�%'/�% <�%') 1@&$ : �( ,���" !�C)$%L1 �� ,��� �CK

#CK��� ���� ��?,?!� Q�)���&(E� ��&(��&$9�������� 1@�;<�% ��� ��0-%�0 . � K/ K��� ���� 03��) �5<� S0 %@&$%@�A��/ �B1@&(��)$9;�A� �$Æ 8;����<���?!?,� Q�)#/��91@&$��) 4 ��&DE ����0�(0�% 0�. � ����<#6 . � K

�CK��� ���� +�&���/�/���&() ��&(%�1@��/ : ,?!%@< ���-< )$�(��&(%'< ��)")$%@&( ,��?, !)(%'< ���������E �$%L1 ��)LK

: ��&$� 4 &$��/ �(0� ,)<8� !�* !)��54 1 ?,? ,/ : ?,%'/�%'� ������ !��� �B4 � � � 6 8 ���-< �(0�%S4 ��&(/���?: � Q %@& �B4>�(0�% ?,����+ 1 ��+�%@)5 !)��(0�%7)���/�%�= %;Æ;1@% : � ��03� � �"�� 5��� 0 . � 1@���<�%'?,%'�(% ���-����� � �� ,����)L8 Q�0� 1 0 ) ��&(�� ,+�0A� � � � 6�1����-�����A@AK B�0�% & 1 ?,%#6 . � ,)��8&$%@+ 1 ? ��& ? ����+ 1 ��+�%��:��%@&7���-����� � �� ,����)�'#�(0�%�& 1 ?!% 0 . � 1@��� : %@& 4 ��&(/��&$E� !�(&���& 9 ��&(����)24 ��&(/����� !����)���� ���-����� � �� ,����)L8 E 1 �>��0-%50 . � !) ���-?!9ÒÅ3&$%@<0 ���(��� �(0�%&6 . � E�%@%@�% ����? 1 � ��%@< 8 ����< �(0�%7% 0 %L1 ��) �94 � & 1 ?,%7� :N: ?, 1����( ,���1���� ����? 9 E�%8&$%<4 %'&(%@�C1@%@< �B4 ��%'& �(0�% : 03��)$%8 !� Q�0- 1 0 � �;1<1 1 &$)L8 )$� �(0�%&(%<1@��+��� !�( ,��� : � Q2%'&� !)���� /���&$%5��03���8&$%@+ 1 ?,��&LK

Page 17: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � ( �

� ! � ��*+.@,!. � � 1 �A*+.$� ! #&% � � � / ! ����� , � K .Q,�*-,

�� 5��� & 1 ?,%')���&(% � :N: ?, ,%'< ,�"����% �94 � Q � Q2��9 )'�� !� Ê &( !?,? � )$� 9;?!%98 Q�0-%@&(% %@�91 0 & 1 ?,% ,) � :N: ?, ,%'< ��� % ��%@& 9 : �� ,�A� ,� �(0�%<-�;1 1 /�%'�A� ���7Q�0� 1 0C !��/���� 1 0�%@) '

� !� :C: %'?!��� )$� 9;?,%B8BQ�0�%'&(%����-?!9 ��0�% ?!����+�%')$�#/ ��� 1 0� ,�-+5& 1 ?!%2 !) � :N: ?, ,%'<� � ���A9 : �� ,�A�SQ�0�%@&$%�/���&$%���03���8���-% /� ,+�0 ��� :N: ? 9�K

3 �8�(0�% :N: %@? � 1���)$%983��0�% & 1 ?,% )(% ��4 ��&�� : 03��)(% / ��9 E�%T1@����)$ ,<�%'&(%'< ��)��)( !��+�?!% <� ,) � 1 �N1 �� !��%�%;Æ : &$%@)()$ ,��� = ����<���� %<E 1@ !%@�A�> ,/ : ?,%'/�%'� ������ !���TQ2� 1 ?,<1@����)$�(& 1 1 �7�")( ,�-+�?,%�� 1 �(��/���������(� &(%<1@��+��� ,)$%��(0�% Q�0-��?,% & 1 ?,%�)(%'� @UK�B �)(��?!��% �(0� ,) : &$��E�?!%@/(8CQ2% ��%'%@<C��� %@/ : ?,�:9�� Q2����?,+���&( ��0�/�)@�

� ����% ��03��� ��� M %')���) ,� :�1 ��� � � � 6 &$% : &$%@)$%@�A� ���( ,��� ����< E 1 ,?!<�)��/��91 0� !��%&1�� : ��E�?!%��B4 &(%<1@��+��� �' ,��+"��0�% )$ !� 1 ���� !����) ��03� ��/���� 1 0 �(0�%& 1 ?,%')�����< /�� M %@)��(0�%CE� ,��<- ,��+�)7�(03�����;1<1 1 &�%��91 0 �� !/�%C� & 1 ?!%8 !)� :N: ?, !%@<FKDB�0� ,) / �B1 0� ,��% ,) � 2D ,�� ��% � � � ��% 68�91 0� ,�-%&= 2 � 6 @U8;)(��/�%��Q�0���� )( ,/� ,?,��&����8�"?!%;Æ 1@��?����3��?!9;)(%'& = � <�%'�(%@&(/� ,�- ,)$�( 1 Å��� !�(%�) � ���(%� 1 ����/����(��� @UK

� ��������0-%@& ����%��(03��� 1 )(%') ��0-% 2 � 6 E 1 ,? � E 9 �(0�%���E��:��% ��?,+���&( !�(0�/����< ��&(�:��%@&$)(%@) �(0�% ��������� ���( ,���8+�&�� : 0 ,� ��&$<�%@&5�(� Å3��<�(0�% )( � 1 ����( ,���-) ��03�����(0�% 2 � 6 1����C&(%<1@��+��� ,)$%9K

� �� %�� ��� � )������ � ����

B�0�%sÅ3&$)$� ) ��% : �(03���7��%'%@<�) �(�E %�� � M %@� ,� ��&$<�%@&�����1@&$%����(% ��0-% 2 � 6 ,) ���&$%���< �(0�% � � � 6 <�%@)21@&( : �� !��� 4 &(��/ �(0�%�%AÆ �(%@&$�3��?-Å3?!% = ) @UKB�0- ,) !)��?!&(%���<-9�<�����% ,� ��0�% ��?!< ��%@&$)( !���8�B4*��� : %9KB�0�%7)$%L1@����< ) ��% : !)����"E 1 ,?,< ��������<�% ��%'&(/� ,�� !)$�� 1 2 � 6 4 &(��/ ��0�% �(�������E �$%<1'�()5&(%') 1 ? ��%@<#4 &(��/ ��0-% : ��&$)( !��+ : &$�;1'%@)$)LK�B�0- ,) 2 � 6�Q� ,?!? 03����% ����% ,�- !�� ,��? ) � ���(% ����< � )(% ���94¹Å3�3��? ) � ���(%@)L8�%��B1 0 �94#�(0�%@/ E�%@ !��+���)()$�;1' ���(%@<��� ����%8& 1 ?!%�= ��0� !) Q2��9�Q % M ��� Q Q�03��� 0 . � Q % 03����% ��� %;Æ %L1 1 ��% !�1���)(%7�94>��/���� 1 0J@UK B�0�%7������<�%'�(%@&$/� !�� ,) �� 1 2 � 6 Q� !?,? ��?,)$��03����% %'/ : � 9��&(����)$ !�� !����) = ��& 1') ?,��E�%@?,%'< Q� !�(0 � � � @UK 3 � ��&$<�%@& �(�CE 1 ,?!< �(0� ,)72 � 6 Q %Q� ,?!? ��%'%@< �(�8 !/ : ?!%@/�%@�A� � ��%'&()( !��� �B42��0-% ��?!+���&$ !��0-/ 1 )$%@< �(�#1'���A��%'&$�&(%'+ 1 ?,��&�%;Æ : &$%@)()$ ,���-)� !�#. 2 �)LK2# !�3��?,? 9�8 �(0� ,) ������<-%'��%'&(/� ,�� !)$�( 1"2 � 6 Q� !?,?*03����%����8E % 1@���A��%@&$�(%@< �(��<�% ��%@&$/� !�� ,) �� 1����-%9K*B�0�% <�% ��%'&(/� ,�� !)$�� 1 2 � 6 Q� ,?!? 03����% /���&$%�) � ���(%@) = !�

Page 18: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � (��

��0-%�Q ��&() �51���)(% )�� = Q�0�%@&$% )� !) �(0�% � 1 / E %'&��94*) � ���(%@)� ,�8�(0�% �-����<�% ��%@& �/� ,�� !)$�� 1�����% @�'A��0� !) 1���)(%� ,) ��%'&$9 !/ : &(��E3��E�?,% @ E 1 � Q� ,?!?;E�% /���&(% %<E 1@ !%@�A�E�%L1�� 1 )(% !�SQ� !?,? �-����03����% ��� E3�91 M �(&��91 M K6 %'����� �� E %��(0�% ������<-%'��%'&(/� ,�� !)$�( 1 2 � 6 ����<�� �� �(0�% <�% ��%@& �/� ,�� !)$�� 1����-%9K

M ������� � N # �������-� � � � � ����� � �� M����

B�0�% ,)$) 1 %')��(03����03����% �(��E�% ��<�<�&$%@)$)(%@< ��&(%��

B�0�%T. 2 � 6 Q� ,?!? E3��)( 1���?!?!9 E�% � E� !+ ��0 K;B�0� ,)2/�%@����)2�(03���� � Q� !?,?�03����%��� ,�� �� ,��?D) � ���(% 4 &$��/ Q�0� 1 0 %'/ : � 9��&�����)( �� ,����)5Q� ,?!?#?,%@��< ��� ��0�%�) 1 E��2 � 6C)5��)$)(�!1@ � ��%@<8��� %@�91 0 & 1 ?,%= )(%'% 2# !+NKP/�@UK�Ë 0�%'� ��0-% . 2 � 6 ,) 1@�������%'&$�(%@< ��� � 4-2 � 6 ��0�% !�� !�( ��?2)$� � ��%#Q� !?,?�E�%8��0-% )(% � 1@��� ���� ,�- ,��+ ��?,?��0-%� ,�� �� ,��?�)$� � ��%@) �94���0�% 2 � 68) ��)$)(�!1@ � ��%@< �(� %��B1 0 & 1 ?,%BK�23&(��/ ��0����)$������%(Q2%(Q� ,?!?�03����% �(��1@��/ :�1 ��%8�(0�% : ��)$)( !E�?,%"��&(����)( �� !����)LK�23��&7�(0� ,)<8��0-%&1@? ��)()( 1���?#��?,+���&( ��0�/ &$%�� 1 ,&$%@) 1 )5�(� 1 0�%L1 M 4 ��&�%��91 0 : ��)()( !E�?,% ,� :�1 �)$9;/ E���?GQ�03���� !)2��0�%�)(%'���B4 &(%��B1 03��E�?!%5)$������%')LK�B�0�% : &$��E�?,%'/ ,)2�(03��� � 1 & ,� :�1 ��) 9 / E ��?!)���&$% �91'� 1 ��?,? 9�)(%'�()��94 &(%@) ��&$ 1'�( ,���-)LK*B�0� !)� ,) )$ ,/� ,? ��&��(� ���� 1 �(��/��������C��03� �503��)5��� ,�\Å3�� !�(%�)$%'� �94 ,� :�1 �5)$9;/ E���?!)&= ��?!��0-� 1 +�0��� 9+� ��%@��)(% �2�94 & 1 ?!%@)�<�%') 1@&$ ,E�%@)2��Å3�- !��%�)$%'� �94F1'����)$�(&��� !�A��) @AK B�0� !) !)>�-���>)(�E3��< 8���0-%2&(%@��? : &(��E-?,%@/ !) �(03��� Q2% 0��:��%2����1 0�%L1 M 4 ��0�%'&(%���&$%>�(&����-)( !�( ,���-)��0�����03����% ��0-% )(��/�% &(%@) ��&$ 1'�( ,���-)LK 3���0� !� M Q %T1����")��R4 %@?!9 1@���-)( ,<-%@& ��0������0-%@&(%"��&(%@� $ � ��� 9 � Q � �(&����-)( !�( ,���-)�Q� !�(0 ��0-% )���/�%�)(% �7�94 &(%')$�(&( 1 �� !����)LKB�0� !)2 ,) )��B4 %�E %<1�� 1 )$% 4 �(0� ,)2��)() 1 / : �� !��� !) Q�&(����+N8 �(0�%5&$%@) 1 ?!� Q� !?,? E�% �)$������%���03���203��)2� Q � ��&(����)$ !�� !����) )$� ��&$�� !��+�4 &$��/ !� 8 ��&(����)$ !�� !����)���03� � 1@�����) 1 /�% �(0�%7)���/�%7)$9;/ E���? K�B�0� !) ,) ����� � : &(��E-?,%@/ E�%L1�� 1 )(% Q2%70��:��%��(�1 0�%<1 M ��?!? � 1 ��+��� ,��+ ��&(����)$ !�� !����) ���A9 Q ��9�'FQ % Q� ,?!? ����?!9�1 0-%L1 M ��0�%�)���/�%

Page 19: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � ( �

��&(����)$ !�� !����� Q� 1'%9KB�0� !) ?!%���<-)�/�%5�(���(0�% ��%;Æ;� ,)$) 1 %BK 3 /���+� !��%���0-% �-%;Æ;� : ��&$� �94 ��0-% �(&������)( �� !��� +�&�� : 08�B4 ��2 � 6 �

M ��������� � N %����+� �������!T � � ������ � ������

B�0�% &$%@)$�(&( 1'�� !����)���)()(�!1@ ,����%'< ��� � �(&����-)( !�( ,��� ��&(%�<�% : 1'�(%@<C��) +�&(� : 0� 1���?Å3+ 1 &(%@) = ��0�% � Q ��1@��?!� 1 &$%@<)B� 1 ��&(%@) @UK&. � Q !/ ��+� ,��% ��03� �5��0�% � Q �")(% ��)�94D&(%')$��&$ 1 �� ,����)�03����%��&1@��/�/���� : ��&$��= ��0�% 9�%'?,?!� Q ��&$ ���-+�?,% @UK6 %'� 1 ) ��)() 1 /�%��(03�������7����% /���/�%'� � ��0�% 1 1 &(&$%@�A����� <-% ,� ��0-% 2 � 6+�&(� : 0 = 4 ��& ����% �94 �(0�% �91'�( !��%�2 � 6 !��)$�����N1'%@) @ ,) ) � ���(% K Ë % +�% �4 &(��/ ��0�% ���-����� � �� ,���C+�&�� : 0 �(0�%�)$%'���94#�������������� !����)�) � ��& �� ,�-+ 4 &$��/ �(0�%��)$)(�!1@ � ��%@< 1 1 &$&(%'� �2���;<�%� !���(0�%5���-����� � �� ,����+�&(� : 0 ����<��(&$9 ��� ��<-�����N1'% ,� ��0�% 2 � 6 ��&(����)( �� !��� +�&(� : 0FK�3 � ��&(<�%'& ��� <-� ��0� !)�Q %Q� ,?,?�03����%"�(�Å3��< ��) 1 E�)$%'�5�B4*�����-��� ���( ,���-) ��03����/���� 1 0"��0�% &(%')$�(&( 1 �� !����)S4 ��&�/�� �; !��+��� )$������%�/5��&�)$������% %CK 3 � �T1@?,��)()$ 1���?3��?,+���&( ��0�/�Q�03��� Q % Q � 1 ?!<�<-�� !)��(���& 9 �(� / ��� 1 07��0�%����-����� � �� ,����) ��+��� ,��) � ��0-%�&(%@) ��&$ 1'�( ,���-) B �?/7D = �(0� ,) Q� !?,?&(% � 1 &$� � E�� ��?!%����8����? 1 % ����<��)$%'� �94�E- ,��<� !��+�) @�����< �(0�%@� Q % Q� ,?!? ��&$9��0-%�/���� 1 0- ,��+���+A�� ,��) ����0�% &(%')$�(&( 1 �� !����) B � %�D7��0� !)�/�%@����)���03� � Q %�Q� !?,?��& 9���C/ � � 1 0 ��0�% &(%')$�(&( 1 �� !����) ,� ��0�% 1@��/�/���� : ��& � ��� ��� � K Ê %<1�� 1 )(%�94 ��0-% : &(��E3��E�?,%5) ��& 1 1'� 1 &(% �94 ��0�%72 � 6 ��&�����)( �� ,����+�&�� : 0 ��0�%'&(%5Q� ,?!? E�%��?,��� �94���&(����)( �� !����)�) � ��& �� !��+4 &(��/ ��0-%7)���/�% ���;<�% Q�0� 1 0 /�%�����)���0����/��:9 E % �7?,�����94 1'����<� �� !����) 1 0�%<1 M %'</���&$%5��03���8���-%5�� ,/�%@)<KË 03��� 1@���(Q % <�� ��� ,/ : &(�:��%5��0� !) �Ë % ��%@%'<8� Q2��9 ��� 1'��/ E� !��% ��?!?��(0�% &(%')$��&$ 1 �� ,����)���)$)(�!1@ � ��%@<��(� ��?,? � 1 � �+��� !��+ ��&21@)��94#��) � ���(% = )(%'%R2D ,+NK + @UK�5��% Q2��9 ��� <-����0�% = 1@��/ E� ,��%'< @ /���� 1 0� ,��+� ,)D�(� : &$% � : &(�!1@%@)$) ��0�%�4-2 � 6����<C��� 1@���A��%@&$�5��?,? ��&�����)( �� ,����)�����/ ��� 1 0�%@&$) = ��) ,� 2# ,+CK + @AK B�0- ,) 1@� 1 ?!<E�% <-����% 1 )( !��+7��0�%�4 ��?!?,� Q� ,�-+7��?,+���&( ��0�/C�

��� � ! � �� 4-2 � 6 '

�� � � !�� �� 4-2 � 6 Q� !�(0�1@��/ : � 1 ��<C&(%@) ��&$ 1'�( ,���-)S1 0�%L1 M )LK

Page 20: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � ( �

M ��������� � N # ����������� � � �+� ������� ��� �� ��

� 4 ��&�%��91 0C)$������% )��94 ��0�% 4-2 � 6 K 1@��?,?,%<1'�#��?,?��(0�%2&$%@) ��&( 1'�( ,����) ,� ��0-%2? ��E %'?,) �94��(0�%2� 1 ��+��� !��+�)D��& 1')4 &(��/ )�= ,���(0�% 4-2 � 6 ��&(����)( �� !����+�&(� : 0 @� � � ��� ��0�%')(% &$%@) ��&( 1'�( ,����)���&$%�%' !��0-%@& �94 4 ��&$/ B$B>9 : % ����� Ç D��&��94 4 ��&(/ B$B�9 : % � ��� Ç����� ����� ��������������� /!K�È &(� 1N: ��?,? �(0�%@)$% &(%@) ��&$ 1'�( ,���-)�EA9 � 9 : %�����< E�&(���N1 0 ����<�1@&(%�����(% 1'��/ : � 1 ��<�&$%@) ��&( 1'�( ,����)��94 4 ��&(/ B9É B>9 : % ����� Ç������ ���� Ç������������� Ç���� � ���� � ���!��������� �"��� K K K ����� �����#��������������# Î D

B�0�%�+�&(� 1C: ,��+"03��) �(�8E�%�<�����% Q� !�(0 1@��&(%�)(�C !� <��;%@)$��$ � /� �Æ&(%')$�(&( 1 �� !����)�4 &$��/ <� S0 %@&$%@�A�7E�&(���N1 0�%')L8 1@&$%����( ,��+ 1 ����%<1@%')()���&$9&(%')$�(&( 1 �� ��% � 1 %@&$ ,%')LK B�0-%@)(%"&$%@)$�(&( 1'�� !����) Q� !?,?>E % )$%@�A� ��� �(0�%�����-��� ���( ,��� +�&�� : 0 Q�0� 1 0(Q� !?,? <��7��0�% /���� 1 0- ,��+ 4 ��& 1 )LK .����(%��0����5Q %&1�������-?!9C&(% 1 )(% : &$%'�; ,� 1 ) � 1 %@&$ ,%@) 4 ��0-%7&(%@) ��&$ 1'�( ,���-)��&$% !<�%@�A�( 1���? ��� � Q2��E�&(���N1 0�%')LK%$

%;K � &(%@����%���0�%�<3��� ��)$��& 1 1'� 1 &(%') ��%L1'%@)$)���& 9 4 ��&�?, ,� M !��+ ��0�%�E� ,��<�� ,�-+�) ��� ��0�% &$%@) 1 ?!��)��94 ��0-% � 1 %'&( !%@)LK = )$%@%R2# ,+"!9@

Ë 0�%'� �(0� ,)5/��91 0� !��% Q� ,?!?DE�% 1 )(%'<�4 ��&���0�% �B1'� 1 ��? /���� 1 0� !��+���0-% ��0�&$%@%� 1 %@&$ ,%')�Q� ,?!? E % & 1 �����<C��0�%�&(%@) 1 ?!�() Q� !?,? E�% ) ����&$%@< !�8)$%'��)��94����-����� ����� !����) = � K K � % ,���(0�% : 1 � 1 &$% @�����< K K K

� 23��&�%@�91 0 : �� ,&��94 ��������� ���( ,����) 4 &$��/ = �§Ç 8 � � @ )<K �LK �§Ç ,�'& Ç(��� � !�)& � K � ��%<Q 4-2 � 6 ,��) � ���C1@%�Q� ,?!? E�% 1'&(%@����%'<�'

*+ %�Û�Þ�ÙmÖ $=Õ é Õ�ß!ÜFØoÕaÖoÛoØ�Ùm×WÛ�ÙmÓ�Ü^Ö�ØoÕWÝ'ÕaØ�ØoÙmÜ�ÑdÛ�Ó�Û�Þ�ÕUÖ�ß é Õ�Û %lÚAÕdÓ!Ýjß!Ü�Ü�Ó!Û�ß"ÛoÙmÓ�Ü�Ö-,/.?Ý=Ý|Ó�Ø "�Ø�ß!Ü�×�Þ�ÕaÖÇ�0 � ß!Ü�Ô Ç�0 � Û�Þ�ÕUØ�ÕaÖoÛoØ�Ùm×WÛoÙmÓ�Ü�Ö6Ý'Ó�Ø\Û�Þ�Õ�Û %^ÚAÕ21 Ï ß!Ø�Õ�Û�Þ�ÕUÖ�ß é Õ)'�ÛoÞ�Õ�3lã�ÕaØ %�Ý'Ó�Ø0Û %lÚAÕ21 Ï $\Ùmàmà"AÕUØoã�ÜÓ�Ü�à %dÓ�Ü^×�Õ, 0=ß!×�Þ�Ó!Ý9ÛoÞ�Õ0Û ${Ó "�Ø�ß!Ü^×�Þ�ÕaÖj×�ß!Ü�ß!àmÖ�Ó�Þ`ßaá�Õ6Ø�ÕaÖoÛoØ�Ùm×WÛoÙmÓ�Ü�Ö=Ý|Ó�Ø{Ó!Û�Þ�ÕaØ{Û %lÚ;ÕaÖjÓ!Ýß!Ü�Ü^Ó!Û�ß"ÛoÙmÓ�Ü�Ö-,

Page 21: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � ( �

M ������� � � NPO ����� �-����� � ��� � ������� � ��� ��� �

/!KD��0- ,)� ,�-)$� ���N1@%�Q� ,?!? /�� ��% ��� )$������%�/�'%;K�� �§Ç 8 � ��� Q� ,?!? E�% E�� 1 �-<"�(��� Ç+ KD��0-%(1'��&(&$%@) : ���-<� ,��+ ���;<�% !� ��0�%"���-����� � �� ,��� +�&�� : 0 Q� !?,?>E %��1@��/�% /��$ÆF= �§Ç %'��<J.��;<�%�= @U8 � � K %'��<J. � <�%�= @2@UK

� � ,/� ,? ��&(?!99894 ��& %@�91 0 : �� !&2�94D�����-��� ���( ,���-) 4 &(��/ = ��Ç 8 � � @2)LK � K ��Ç !�& Ç ��� � !�'& � K � ��%<Q 4-2 � 6 ,��) � ���C1@%�Q� ,?!? E�% 1'&(%@����%'<�'/!KD��0- ,)� ,�-)$� ���N1@%�Q� ,?!? /�� ��% ��� )$������% %F'%;K�� �§Ç 8 � � � Q� ,?!? E�% E�� 1 �-<"�(��� �+ KD��0-%(1'��&(&$%@) : ���-<� ,��+ ���;<�% !� ��0�%"���-����� � �� ,��� +�&�� : 0 Q� !?,?>E %��1@��/�% /��$ÆF= �§Ç K %'��<J.��;<�%�= @U8 � � K %'��<J. � <�%�= @2@UK

Ë 0� !?,%�E 1 !?,<� !��+ ��0�% 1@��/ : � 1 ��<�/ � � 1 0�%'& � ,) : ��)()( !E�?,%*�(��<�% ��%L1 ��� 1 %'&( !%@)��0����"<�% : %@�-< ���-% 4 &(��/ �������(0�%@&�= %9K +NK 4 �(0�%%;Æ : %L1 ��%@< &(%') 1 ? ��) �94 �� 1 %@& 9 ��&$%"� ) 1 E�)$%'���94���0-% &(%@) 1 ?!�() 4 &(��/ ��������0�%'& � 1 %@&$9C@AK B�0� ,) M !��<�94 )( � 1 � �� ,����) 1@��� E % /���& M %@< )(� Q�0-%@� ��0�% � 1 %'&( ,%') ��&(%"�B1'� 1 ��?,? 9 & 1 �)(��/�%�� : %'&����( ,���-) 1���� E % �:���� ,<-%@< = %BK +CK 4��(0�% ?!%@)() &(%@) ��&$ 1'�( !��%�)(%@��& 1 0&(% � 1 &$��%@< ��� &(%') 1 ? ��)>��03������0�%�/���&(%�&(%')$��&$ 1 �� !��%����-%�1���� E�%�) M :N: %'<F8-��& 4��5)$%���&21 0�&$%'� 1 &(��)����7 �������� ���( ,��� � %'� = ���7��E �$%<1'�*��0���� 1����7E�% � 1 %@&$ ,%'< @��0����C�(0�% /���&(% &(%')$�(&( 1 �� ��%-� 1 %@& 9�1����CE�%9K

� ��� � � ��� � � ��� �

� ����)$ ,<�%'&���0�%�4 ��?!?,� Q� ,��+´Å3+ 1 &$%��

Page 22: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � �

M ��������� � N #(� �+������� �+������� ��� �+���

Ê ��)$ 1@��?,? 9�8���0-%���?!+���&$ !��0-/ 03��)���� ��&(����%@&$)(%��(0� ,)>+�&(� : 0�)$� ��&$�� !��+T4 &(��/ �(0�%?,%U4 ��/���)$���-� <�% ��� ��0-% &$ ,+�0A�(/���) ������%BK ���91 0 : � ��0�4 � 1 ��<8 ,)���)$%�� 1 %'�N1@%�94 : ��)()( !E�?,% /���� 1 0�%@)<KÊ %<1�� 1 )$% /���&(% ��03��� ����% ��������� ���( ,����= ��?!? )$����&$�( ,��+ �����(0�% )(��/�% : �� ,�A� @1���� E�% /���� 1 0-%@< ��� ���-%)$��% : 85� : ����0 ,) �������; ,%UQ2%'< ��)"� 1@? ��)()( 1���?: ���(0 !� �"+�&�� : 0F8 E 1 � �8)(% � 1 %@�N1'%��94�) ��% : )L8D%��91 0 ) ��% : E %' ,��+8�")(%'� �94�����-��� ���( ,���-) ��03����) � ��& � ,����0-% )(��/�% �-� <�%BK��� � � 0 ' 0 ��� ��� ����� � � 0 '�� 0�� ����� ) 0 � � ��� ���������������������������� ��� ��!" ��� ����� 0 � �����#� ��$ ��&��(�(' )*����� ���&%��*& ������� � ��� ��� � � � �� &��'� � � ��� 0 )*��� ��( � ��� 0 �&� ��� 0 � � ���.& ��� � ��� ))% �����)���#&��(�('*�B�0�%�/ ��� 1 0� ,�-+�) ��&(% / ��<�%�EA9C� 2# ,�� ��% � ������% 6 �91 0- ,��% ��03��� &$%@)(%'/ E�?!%@)��� 1@?,��)( 1���?�?!%;Æ 1@��?3������?!9;)(%'& = 0�+�0 � & ) 0 �&� ����@AK#B�0�%�/��� ,� <� 10 %'&(%@�C1@%������) 1@������%'&� !)���03�����(0�%@&$%���&(% ���� !� :�1 ��) 9;/ E ��?,)�'��(0�% ��&�����)( �� ,���4 &(��/ ����%)$������% ��� �������(0�%@&> ,)>E3��)$%@<���� / ��� 1 0� ,�-+ � )(%'�2�94 ��E �$%L1'�()�= �������������� !����) @��+A�� ,��) � �")(% � �942&(%')$��&$ 1 �� ,����) = ��0-% 1@����)$�(&��� !� � +�&$� 1N: ,� ��0�% 6 . � �B4��� � � 6 & 1 ?,% @AKB�0�%���?,+���&( ��0�/ 1����8E�% ��0�%�4 ��?!?,� Q� ,��+-� K ) � ��& � . � <�% � ��0�% ?,%U4 ��/���)$� ��� <-%/;K 1'&(%@����%���Å3&() �* ,��) � ���C1@% �943�(0�% 2 � 6 ����< ��<-< !�D�����(0�% ?, !)$�D�94��91 �� !��% !��)$�����N1'%@)�'

%CK 4 ��& ��0� !) 2 � 6 ,��) � ���N1'% )(% ��1 1 &(&$%@�A� ��� <-%���)��(0�% ?,%U4 ��/���)$���-� <�%>'+ K Q�0- ,?,%�= ) � ��& � .��;<�% � � ?,��)$�����;<�% @2<��

Q�0� !?,% = �-�����:��%@& @�<-�

Page 23: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

�D� � �3� ��� ��� �R � � � ������� � � �h�s�������� �6� � � � � (

4 ��&�%��B1 0������91'�( !��% !��)$�����N1'% �B4D�(0�% 2 � 6 <�� 4*��0- ,)� !��)$�����N1'%7 ,)5 !�� Å3�3��?D)$������% �(0�%@� )�����%�� 1@?,����%�94 �� ,�"��0�% )(% ���94 �91L1'% : �( ,��+ 2 � 6C)&= !��)$�����N1'%@) �94#�(0�%2 � 6 ��03� ��0��:��%�&$%��91 0-%@< �xÅ3����? )$������% @ '/ &(%���< ��?,?*��0-%"�������������� !����) )$����&$�( ,��+ 4 &$��/ ��0�%1 1 &(&$%@�A���� <-%�'

%)(%@?!%L1 ����?,? )$%'��)��B4 �������������� !��� �(03��� 1@��� E�% 1 )(%'<���� ��<�������N1@% ����% ) ��% : ,� �(0�% ��&�����)( �� ,��� +�&�� : 0C�B4D�(0�% 2 � 6 '

+ 4 ��& %@�91 0 ) 1 1 0 )(%'� 1@&(%@����%5� ��%<Q !��)$�����N1@%��94 �(0�%-2 � 6�8:�1 �� !�7 !� ��0�%C�91 �� !��%"?, ,) � ����< /�� M %" !� 1'����) 1 /�% �(0�%1@��&$&(%@) : ����<� ,�-+ )(%'� �942�����-��� ���( ,���-)L8 /�� M ,��+����A9��%L1��%@)()(��&$9 E� ,��<- ,��+�)� ,� �(0�% : &(�!1@%')() = �(0� ,) ��%<Q ,��) � ���N1'%Q� ,?,? ��<-�����N1'%� !� �(0�% �������������� !��� +�&�� : 0 �(�8��0-%�&$ ,+�0A���/���) �����;<�% �(03���> ,)>����%@��<��94 � /���� 1 0�%'<����-����� � �� ,��� @ '

! <� ,)21���&$<��/ '/ %@�-<#4 ��& '% 4��(0�%�)$%'�7�94��91 �� ��%� !��)$�����N1@%') �94 2 � 6 ,) %'/ : � 9�� ��0-%@��:��%'& � �(& 1 %>'

%@�-<(Q�0� !?,%>'/ 4 ��0-% )$%'� �94#�91L1'% : �( ,��+ 2 � 6C) !)�������%'/ : � 9

4 &(��/ ��?!?��91<1@% : �� ,�-+R2 � 68)�)(%'?,%L1 �������(0�%�����% �(03����/���� 1 0-%@<��0-%2?,����+�%@) � : ����0�' 4 ��0�%'&(%2��&(% /���&$%*��03��������% 4 ��& �(0�%>)���/�%: ���(08?!%@��+���0")(%'?,%L1 ����0�% ����%�Q� ��0"0� ,+�0�%@) � : &( ,��&( !� 9�'/ %;Æ %<1 1 �(% ��0�%��91 �� ,��� ��)$)(�!1@ ,����%'< �(�8��0-%¿Å3����?�)$� � ��%��942�(0�%)(%'?,%<1'��%'< 2 � 6 !��)$�����N1@%>'

% )$����&$� .��;<�%�� )$%@?!%L1'�(%@< 2 � 6#3 ��) � ���N1'%9K +�%'� 6 ��)$� .��;<�%9K +�%'� .�%AÆ � .��;<�% = @ '% %@?!)(% O�O ��0�%�/���� 1 0- ,��+�4 �� ,?,%'< )$����&$���:��%'& 4 &(��/ ��0�%��-%;Æ;�����;<�%O�O )$����&$� .��;<�% � ) � ��& � .��;<�%BK +�% � . %;Æ;� . � <�%�= @�'

!;K %'��<�Q�0� ,?!%�'� ����� & ����� � 0 )�� ����� � "�� ���.&�� 0 � )*�*& ) 0 � �*)���� 0 & ��� ���)� 0 � 0 )�� ��������.&�� 0 � )*� ) 0 �&� ���)*����� ���&% ��� � �������-� & � � & ����� � 0 �&� ��� 0 � � ���.& &�� 0 ��� ��� �������� ��� & ))% �����)���'� � � ��� 0 � ) 0 � � � � 0 � )*��� ������ � � � � & ) 0 & � ����� ����� � ����������� �������� ����� & ��� ���� � ��� �- ��� ������� &�� ( � � � 0 �()*� ��� � � � � 0 ��� �(� ' ��� )*�*&*& � 0 )*� � � � ���0 )*)*�(' � ��� � ���.&�� 0 � )*�*&��B�0�% ��E��:��% ��?!+���&( ��0�/ !)�&(%'��<�%@&$%@< 4 &(��/ � )(%@/����A�� 1 : �� ,�A� �94 �; ,%UQTK.�%'&(% ��&$% )$��/�% ,<�%@��)�&(%@+���&(<� !��+ ��0-%��B1'� 1 ��? ,/ : ?,%'/�%'�A� ���( ,��� �

Page 24: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� �h���%���� � � � � � � �� � � ���

� B�0-%@&(% ,)��-����%'%@<C�����91'� 1 ��?!?!91'&(%@����% ��%<Q ,��) � ���C1@%@) �94D��0�% 2 � 6�KË 0���� 03��) �(� E %)(�:��%@< ,) � 1 ) � ��0�%�1 1 &(&$%@�A�C)$������%�94 ��0-%�2 � 6 !��)$�����N1'%9K 3 �"��0� !) : ��&$�( 1 1 ? ��& 1���)$%�) � ���(% /�%�����)@�� � : ��)$ !�( ,���� !� 2 � 6 ��&�����)( �� ,��� +�&�� : 0�'� � : ��)$ !�( ,���� !� ��0�% �����-��� ���( ,��� +�&�� : 0�= �(0�%T1 1 &$&(%'� � ���;<�% @ '� ��0-% )$%'� �B4�E� !��<� ,�-+�) / ��<�%�< 1 &( !��+ / ��� 1 0� ,�-+����-����� � �� ,����)F4 &(��/��0-% ) � ��& � ��� <-% 1 � �( ,? �(0�%T1 1 &$&(%'� �����;<�%9K

� B�0-%�/���) � )(%'��)( �� !��% : &(��E-?,%@/ ,)��(0�% /�% ��0��;< 1 )$%@< 4 ��& � 0 � )*� ��� � 8E 1 ����0� !)�E %'?,����+�) ���7��0�% ���(0�%@& ��?!+���&$ !��0-/#K

� � K�� / �� ,l,�7,Z,���� � �£/ � /

3 �B %;Æ;� �*&(�C� B � D ? ��E�%@? E� ,�-<�)�������0�%7?,��)$��/ ��� 1 0�%@< �������������� !��� !� !�()) 1'� : %9K B � � D ? ��E�%@? E� ,��<-) ��� ��?!?>�(0�%"�����-��� ���( ,���-) /���� 1 0�%'< ,� �(0�%) 1'� : %9K 3 � �� ���� �(0�%@&$%� !)>�-� B � � D? ��E�%@? = ��0�� 1 +�0��(0�%@&$%� ,)>� B'� � D � )$%@%E�%@?,� Q�@A8�< 1 %5�(� �(0�% ��/ E- ,+ 1 � 9 Q� !��0�H ?!%@%@�-% �&K 3 � � � � 6 � 1'����) ��&��� ,�A�+�&$� 1N: 1���� E % E�����0 ? ��E %'?,?,%'< ����< 03����%��#H ?!%@%@�-%�� : %'&����(��&LK�.�� Q 1@���H ?,%'%@��% � 4 ��?,?!� Q2%'<8EA9C? ��E�%@?*� E % <� !)$�� !��+ 1 !)(0�%'<(4 &$��/ ? ��E %'? �7� � �SK +CK+� ��%@� 9�) ) )�) ? � �&�7!QE'& ��&(%*��0-% 1@����) ��&(�� ,�A��) Q� ��0� !�5��0�%�E�&(�91 M % ��) 03��� !��+H ?,%'%@��% � � :N: ?, !%@< ���7�(0�%@/ ����<8E�%@ !��+ ? ��E�%@?!?,%'<F8 ��&� ,)� !� � � ��? ��E�%@? � :C: %'?!�5$ ) ����) Q2%'&� !)��(03��� � �� ,)���? Q ��9;)��7?,��E %'? '-�(��+�%'����0-%����(0�%@&� !� �(%@& �: &$%'� � �� ,��� 1 )(% 9�9�) ) ) ? � ?� K*B�0� ,) /���9 E %�<� E 1 1 ? � 4 ��& & 1 ?!%*<�%'��%@?,� : %'&()D�(�&(%'/�%'/ E�%@&�' �� 5��� <- ,)���?,?,� Q�)���0�% B � � D ? ��E�%@? 8�����</�� M %') ��?,? /���� 1 0-%@<�����-��� ���( ,���-)��:���� !? ��E-?,%�4 &$��/ % ��%'&$9"? ��E %'? K�� 5��� ��<�<�)>� B � � D ? ��E�%@? � : %@&�� ����&<8�Q�0� 1 0�/�%@����)*��0����>��?,?;��0�%�) : ����)>�94���A9 ���-����� � �� ,����) / � � 1 0�%'< ��&$%>��)()$ ,+���%'< �(����%<Q �������������� !����) 1@&$%����(%@< �����0-% 0 . � &(%'? ���( !��% �(���(03��� ? ��E�%@? K�=aË !�(08��&(<� !�3��&$9 B'� D ? ��E�%@?!)L8����-?!9��(0�%) : ���8�B4#��0-% � 1 ��%'&(/���)$�71'��&(��%'&() �94 ��0�%���������� ���( ,����)�/���� 1 0�%@<C ,) 1 )$%@<FKP@= B�0- ,)�� : %@&�� ����& <- ,)�� :N: %@��&()� !� È *B�� ��%@&$)( ,��� /;8;Q� !��0"��0-% %@?, !/� !�3���( ,����94D/ 1 ? �� 1� ) : ���"�������������� !����)<K @ ��-����0�%'& : &(��E�?!%@/ &$%@+A��&$<�)50 . � ,�A��%'& : &$%'������ !���8�B4 1 � E�� 1 ��< ?,��E�%@?,)<K 3 4Q %�03����%�)$��/�% ��0� !��+7?, M %99 �76@;�= ? )BM#��= �5L�� $�$ * �: �5L�� * � ?2 �N89 �76@;�= ? )BM#��= �5L�� $�$ * ;�� :QE =�: �5L�� * �O?�

?

Page 25: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� ���h����� �

��� �(0�% 6 . � 8#����< &$%<4 %@&$%@�N1'%@)7��� � ���-< � / ��� �(0�% 0 . � 8D����? 9 ���-%��94��0-%@)(% Q� ,?!?3�91'� 1 ��?!?!97E�%�E � 1 ��<��(� ���A9 ��0� !��+TQ�0�%@� �(0�% & 1 ?!% !)�Å3&(%'<FK*B�0�%%;Æ : &$%@)$)( ,����1'���A� �� !�� ,�-+ ��0�% ����0�%'&5)(0-� 1 ?,<E�% !+�����&$%@<FK�3 �B %;Æ;� �*&$�N8 �����)$)( ,+���/�%'�A� ��� ��0�%�0 . � ��0���� &(%U4 %@&(%'�N1@%') ��� 1 �;E�� 1 �-< ?,��E %'?2 !) %'����? �1 ���(%@< �(� ��0-%8����? 1 % B 4 ��?!)(% DNK 3 � �� 5���S8 0 . � %AÆ : &(%@)$)( !����)� !� ����?!�; !��+1 � E�� 1 ��<C� : %@&�� ����&$)���&(% ����� % ����? 1 ���(%@<FK

� ) � K 101\/�1

B�0�%�/��� ,�5%AÆ;��%@&$�3��?A !� �(%@& 4 �91@%') ��� �� 5��� ��&(% ��0-% 1@? ��)()(%') �'���FE() � ���QE() � ���@H<:����< �'���FE() � �7�QE() 0 ;JD����& E = K B�0�% � � � 6 �#��&()(%'&� ,)� ,/ : ?,%'/�%'�A��%@< EA9- � =@M�E 0 ��M &�) ��� 8 Q�0� 1 0 !) ,� :�1 � �(� ���:��� ��� = ����< �A��45�;1 �(� : &(�;< 1 1'%+�&(��/�/���& <��!1 1 /�%@�A������ !��� @ ����<ÀÅ3����?,? 9 ���:��� ��)$%@? 4?K = B�0-%@&(% ��&(%8?,���()�94����(0�%@& 1@? ��)()(%') : &(�;< 1 1'%@< ��?!����+8�(0�% Q2��9 EA9 �(0�% 1@��/ : !?,%@& � 1'��/ : ,?,%'&���;��?!)@�

�' 0 ; ; 0 :�� ='���=�E � D ) � ��%�� 2 - � = M�E 0 ��M&�������FE() ����%�� Q ;7?�E() � ��%�� - � =@M�E 0 ��M &�) � ��%��- � =@M�E 0 ��M & 0 ;�L�M����>L��@M�) � ��%�� - � =@M�E 0 ��M & 2 ;�8FE�L � �>L�� ��E = ) �'��%�� - � =@M�E 0 ��M & 2 =�EKE 0 ;�L�M#���>L��@M�) � ��%��- � =@M�E . � H E7��� � ; L ) � ��%�� ���D'� & E Q ;�?�E() � ��%�� 2 EQM#� ��7� E() � ��%�� 2 ;�8FE>L ) � ��%��2 ;�8QE>L � �K= . =K=Q;>=9) � ��%��B�0�%')(%�?, !��% ,��(0�% : ��&$)(%@& ) 1 E : �91 M ��+�%98 ,� ��0-% �'���FE�� � �7�QE������ = M�E = <� �&(%<1'�(��&$99K���91 0 +�&(��/�/ ��&�&$%@) 1 ?!�()� ,�8���8��E �$%L1 � �94 1@? ��)() 2 ='�>L�M7? I�H�E = 8 Q�0� 1 0 0���)�7)(% ���94 / I & E K� ����) � ���A�()D��&(%*0�%'?,< ,�5�(0�%* ,�A��%'&24 �91'% ����QE 0 ;�L M#���>L���M K�B�0�% �(%@)$� 03��&(��%')() ,)� !� 2 EFM#� ����QE K

(�� � � ��� / � /�,�. K .Q,Z*�,

�� � ��� )�� ' # %�� � � � �

B�0�% : ���(�(%@&$� � :N: ?, 1@���� !��� ��?,+���&( ��0�/ = Q�0� 1 0 ,) %@ ��0�%'&�?! M %�45� 1 +Q$ )L8#��&?, M % Ê &$ ,?!? $ ) @U8;/�� M %')��7��� : � ?!%'��%'?F1���?,? �(��)$��/�%'��0- ,��+ ?, M %!@;K;�& E �>LCDP����H<:QEFM/9 �5L����@;�M'�<� � ;�L � � ;�HJI D@E>L�� ?Q;�H �

� I����7! & E�;JL��FE ��E =GLQE�@ - ;�M��<� � ;�L ?�:�= ;�@@M - ;�M#��� ;�L�5>I'��5� / ��L���E

Page 26: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � ��� �h� ����� � � � � � � �

Q�0� 1 0 !) � /�% ��0��;< ��� %��B1 0 / I & E K B�0� ,)7 !)7 ,� � 1 &(� <�%U4 %@&(&$%@< ����(0�%& 1 ?,%�$ ) ��E������>L'?'P�#?�E 8 ����< �(0�%@�C1@% ��� ��0�% 0 ;�L�M#��='���5L�� O =Q;�I � Q�0- 1 0%��B1 0 ��E � ���>L�?'��#?�E 1@��� ���� ,�-)LK B�0�% 0 ;�L�M#��=����5L�� O =Q;�I � ��%@&(����%')��:��%@& !�() )(%'���94 - ��� �FE = L . & E D@E>L�� 0 ; L �>IKL�H�� � ; L M 'TQ�0�%@� ����%C) 1 1<1@%@%'<�)L8��(0�%/���� 1 0�%') 1���?!?�&$%'� 1 &(��)��(& 1 %>' 4 ������%) 1 1L1'%@%'<F85 !� &(% � 1 &$��) 4 ��?,)$%9K B�0�%/ I & EFM ��?!)(� 03����%

% ;'��?���=��>L�M�? I H�E�9!� ;�HJI D E>L'�4?Q;�H�? � :�=Q;�@@M ��: M Q ;�� � ���@H<:QE?

/�%'��0-� <�)<89Q�0� 1 07/ ��9 E % 1���?!?,%@< �B4 ��%'& ��) 1 1L1'%@)$)24 1 ?3/���� 1 0 8A����<7&$%@) 1 ?!� !���0-%5� :N: ?, 1@���� !���7�94 �(0�% / � ��:�� ���>L'?'���?�E �B4 ��0�% / I & E �(����0-%�<��!1 1 /�%@�A�LK- �����FE = L . & E D E>L'�@M ��?!)(� !/ : ?,%@/�%@�A� ��0�% / ��� 1 0�%@)�/�% ��0��;<FKKË 0�%'��%'��%@& !� ) 1 1<1@%@%'<�)L8 ��0�%����-����� � �� ,����) Q�0� 1 0 Q %@&(% 1@����) 1 /�%@<�< 1 &$ ,��+ �(0�%�/ � � 1 0��&$%������� !? ��E�?!%�4 &$��/ ��0�����%@?!%@/�%@�A� 8 ��) ��&$% � 1'��/ : ��)$ !��%�) : ���8)(% � 8�����<8�)( !��+�?!% ) : ��� �(03����1@�:��%'&()��(0�%TQ�0���?,% )(% � K73 � +�%'��%@&(��? ��0�%')(% Q� !?,? ����?!9"E�%�91<1@%@)$)(%'<��; ��� !��5L�? �5L�� Q � D E 8BQ�0� 1 0� !) ��)$)(�!1@ � ��%@<�Q� ��0 0 ;JD'� & E�� - ��� �FE = L . & E D@E>L��@M KB�0�% ��E� � ���>L'?���#?�E / �� !�A� �� !��) ��/�� :N: !��+ �94 !��5L'? �5L�� Q �>D EFM ��� 0 ;JD'� & E�� - ��� �FE = L . & E D@E>L��@M= Q�0- 1 08��&(% �91<1@%@)$)(%'< EA9"��&(&(��9 &(%U4 %@&(%'�N1@% ,� / I & E / � ��:�� ����L'?'��#?FEFM @UK �? ��0�� 1 +�0 - ��� �FE = L . & E D E�L��@M +� !��% �91L1'%@)()��������8�����-��� ���( ,��� )$%'�L8���0�%')(%��&$%2����? 9 E 1 ,? � Q�0-%@� ��0-%'9 ��&(%2��) M %@<&4 ��&S= 1��91 0- ,��+5%'��) 1 &(%@) �(03���D��0�% 9 ��&$%����? 9 E 1 !?!�����N1'% @*��� ������ ,<�)$�(��&( !��+ ���-����� � �� ,����)>��+A�� !��)$�>%'��%@& 9 /���� 1 0-%@<%@?!%@/�%@�A� K Ë 0�%'� ��) M %'< 4 ��&L8��(0�% 1'����)$�(& 1 1 �� !��� : &(�!1@%')() ,) ��� !��%'&�� ��� ��% ��&(����%@&$)���?��94���0�%"%'?,%@/�%@�A�() 1'���A� �� !��%@< Q� !�(0� ,� ��0-%C%'?,%'/�%'� ��E�%@ !��+��) M %@<�4 ��&5��0-% ���-����� � �� ,����)LK7B�0� !)5��&(�:��%@&$)���?>��? Q ��9;)�E����$����/�)5� 1 � !� �(�� �FM'� H - �����FE = L . & E D E>L'�@M 8 Q�0- 1 0 ��&$% �(0�%�����?!9 ���-%@)2�(03��� ��%@%'<���� ) ����&$%�����-��� ���( ,���-)���?,?���0�% �� !/�%BK3 ��� / � ��:'� ���>L'?���#?�E � :N: ?, 1����( ,��� 8@��0�%'�F8��71���?,?��(���(0�% �FE�� ����L'?'��#?FE �<ME� !��<� ,�-+ %'�A� !&(���-/�%'� ��Q� !?,?�9; !%@?,< � 0 ;�D�� & E�� - ��� �FE = L . & E>D E>L�� &(% : &(%��)(%'�A�� ,�-+���0-%�E�� 1 ��<���E �$%<1'� 8!4 &(��/ Q�0� 1 0 �������������� !����)>����<�) : ����) 1@��� E�%&(% ��&$ ,%'��%@<8��)���%@%'<�%@< K

�� � � � ��)�� ! � � ��� � ��� �

6 %'��$ )� ,/���+� ,�-% Q2% ��&(% Q�&( �� ,�-+8��� 0 . � 4 ��& �C& 1 ?!% Q�0� 1 0 E� !��<�) �8)(% ��94��������������� !����)�&(% : &(%')(%@�A�( ,��+�)$ ,/ : ?,% � 1 / E�%@&$)��(����0-% ? ��E %'? LKI D�!QE = M KË % Q2���A� �(� 1'&(%�� ��%�� ��%UQ ��������� ���( ,��� ) : ������ !��+ ��?,?���0-% ����%@) / ��� 1 0�%@< 8Q�0���)$% ����? 1 %8 ,) ��� 3 �A��%@+�%@&�&$% : &$%@)(%'�A�� ,�-+ �(0�% ) 1 / �94 �(0�% !��<� !�; !< 1 ��?� 1 / E�%@&$)LKB�0�%(0 . � 1@���-)( ,) ��) �94���1@��/�/ ��� )(% : ��&(����%'< ?, ,) �7�94 E�?!�;1 M )L8 Q�0� 1 0 ��&$%

Page 27: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � ��� �h� ����� � � � � � � �

%@ ��0�%'& ���-���A9 /�� 1 ) ��&>? ��E�%@?!?,%@< K =WË % ��?,)(����?!?,� Q �(0�% � � � 6 � ) � 9 ?!%�)$0���&$� �03���-< �-��� ���( ,��� ��)� !/ : ?,%@/�%@�A�(%@< !� B %;Æ;����&$�NK B�0� !)� !) /���&(% ?! ,/� !�� !��+��0���� 1@�;<�%B8#��0�� 1 +�0F8D%9K +NK#3 <-����$ � M ��� Q 0�� Q 9�� 1 1'� 1 ?!< <�� �(0�% ) 1 / �/� ,��+ � : %@&(���� !���E�%@?,� Q ,� � � � 6 K @ ��-���A9 /�� 1 ) E�?!�;1 M )�Q� ,?!?#E�% %'����? 1 ����(%@< Q� !�(0� ,����0�%�)(��/�%2) 1@� : %B8�Q�0� 1 07%'�N1@?!��)(%')��(03���#�94 ��?,?;�3��/�%@<7E�?!�;1 M )<8����< ��?!?#E�?!�;1 M ) ��&$% %'����? 1 ���(%@< ,���&$<�%@&<8 )(�"<�%<1@? ��&����( ,����)�1���� E�%7/ ��<-% ,� �������A9;/�� 1 ) E�?!�;1 M )2����<���0-%@��&$%<4 %@&$%@�N1'%@<" ,� ) 1 E�)$%�� 1 %'� � E�?!�;1 M )<K 6 ���E�%@?,?!%@<E�?!�;1 M )�Q� !?,?D����?!98E�%7%'����? 1 ����%'< Q�0�%@� ��0�% 9 Q %@&$%�E�� 1 �-< < 1 &( !��+6 . � / � � 1 0� !��+NK�B�0�% ) 9;/ E ��? ? ;�H !)���? Q2��9 ) ) 1'� : %@<8�(���(0�%�45�;1 1 /�%'�A�Q�0� 1 0���0�% 2 ='�>L�M7? I�H�E = ��0� !)2& 1 ?,%�E %'?,����+�)>�(� ,) : &(�!1@%')()( !��+NK323��& %;Æ-��/ �: ?!%��

� � DP���@H#:�� M�E���I E>L�H�E ; �5L��FE ��E = M � ��L'? M�� ;>=�E �:QE�� = M�I D/ I & E� Q I D'!QE ='>IKD

9 � 2 ;�8FE�L ) 8 �5L�?�$ $ * ;��:QE = Q I D * � ? � L�I D�!QE =�� � M#�

��� �

LKIKD�!QE = � � M#���� � �: E�= I�LKL��5L����@;����'&�5L��H�:QE >IKD�$GA��

� ��&K;�;#� =Q;�IKL'? �'& & �:QEH�>LKL�;������ � ;�L�M �: E ��� H ; L�MJI D E?Q;>= 9 �JL�� � $GA�� � �>LKI D�! E = � � M���� LKL@;7�@M�)�& E�L���:+9 ? � � �K� ? �

� � ��E��H�:QEPLKI D�! E = M#��= �5L�� ;>=�� :�� M �>LKL@;�����= �5L�� LKI D�! E ='���= �5L���$F?Q;�H�)BM#���>L����= �5L�� M9 LKI D�! E = � � M7��� LKL ;��@M�) L��: 9 �K?K?=�

� � ��� = M E �: EPL�I D�!QE = M#��= �5L����>L'? ��? ?F� ;P= IKLKL��JL��H� ;����'&��= � ��:QE >IKD � $4;5L��QE ��E = ) ��� = M�EP;5L��39 L�I D�!QE =����= �JL��@? �

� H����@H<: 9 Q I D�! E = N ;>= DP��� . �@H�E7��� � ; L EQ? �� �H� � L@;>=�E !���?P&7� ��Q;�=�DP��� �QE�? LKIKD�!QE = M

�� � � Q;>= E �FH<:CLKI D'!QE =��>LKL@;7�

?Q;�H�) �? ? � LKL�;������ � ;�L+9* LKIKD�!QE = * �LKI D'!QE = � �KM#��� LKL�;��@M�)��FE�����E� � D ;�M������� = �39 ? �LKI D'!QE = � �KM#��� LKL�;��@M�)��FE�� / � �:�� D�;�M�� . L�?39 ? �* MJIKD * �

Page 28: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

��� � ��� �h� ����� � � � � � � �

LQE�@ ;5L��QE ��E = 9 �:QE >IKD ?? �

� � � L�I D�!QE =�� � M#�

B�0� !)�) � 1 0 ��0�%'� +�% ��) 1@���A��%'&$�(%@< ,�A���(1@�;<�% = �(03���� ,) 1 )(%'< ���(4 ��&(/ �(0�%1@?,��)()SQ %T1@&(%@����%T4 ��&70 . � ) @ ?,�;� M ,��+ ?! M %5��0� !)@�

���FH�8�� ��E � �7� E �FH#� � ;�L�H&��QMKM�EFM �

��D���;>=� �'���FEA) � � ��D��@;�=� � ��%��(),� ;�) � � �5D��@;>=� �'���FE() � ���QE() � ���D���;>=� �'���FEA) I�� ��&M) � � ��D���;>=� �'���FEA)BH =�E�;�& E() � �

�KI ! &'� HGH&��FM�M 2 EQM#� Q IKD�!QE ='�I D�� H#��� ;�L 0 &�QMKM��D�� & E D E>L'�@M � ��%��A) � ;�) �E = �7�'&�� �'�7! & E � / :�M�� H#��� ;�L4�

�KI ! &'�KH % ;��#?�?Q;'�<�39 � ;�HJI D@E>L���?Q;�H � �FE�� ����L'?'��#?FE &#:�M�? �

� LKL�;������ � ;�L�KE�� LKI D�!QE = � � M#�'� LKL@;���MF$ &�:�M�)���E�� � ;�IKL�? � LKL@;7�@M/9 * L�I D�!QEK= � � M7� * ? �� 9 LKI D�!QE = � � M#�'� LKL@;���M�)BM�� �FE�9 ?�� $GAQ? ��5L��H�:QE >IKD $CA��

Q;>= 9 �JL�� � $GA�� � �>LKI D�! E = � � M���� LKL@;7�@M�)�& E�L���:+9�? � � �K� ? ����= �5L�� LKI D�! E ='���= �5L���$F?Q;�H�)BM#���>L����= �5L�� M9 LKI D�! E = � � M7��� LKL ;��@MM) L��: 9 �K?K?=�

��= � ��:QE >IKD � $�;5L��QE ��E = ) ��� = M�EP;5L��39 L�I D�!QE =����= ��L��@? �

� H����@H<: 9 Q I D�! E = N ;>= DP��� . �@H�E7��� � ; L EQ? � ��

?Q;�H�) �? ? � LKL�;������ � ;�L+9* LKIKD�!QE = * �LKI D'!QE = � �KM#��� LKL�;��@M�)��FE�����E� � D�;�M������� = �39 ? �LKI D'!QE = � �KM#��� LKL�;��@M�)��FE�� / � �:'� D�;�M�� . L�?39 ? �* MJIKD * �LQE�@ ;5L��QE ��E = 9 �:QE >IKD ?

? �

��

Page 29: CS - 00 - 10 JAPE: a Java Annotation Patterns Engine Hamish

� � � � ����� �h� � � � � ��

(+( )+* � � , � K .Q,Z*�,

�� 5��� 1 )$%@) � 1@��/ : ,?!%@& �(03��� ��&�����)(?,����%') � � � 6 +�&(��/�/���&$)��(� ����������E���$%L1 ��)���0������ ��&$+�%'���(0�%§È *B�� 5� 3�= ����<C�7&(%'+ 1 ?,��& %;Æ : &$%@)$)( ,��� ?, !E�&���&$9C@UK3 � 1 )(%@)"� 1@��/ : ,?!%@& � 1@��/ : !?,%'&�= ������� ��� @ �(� 1@����)$�(& 1 1 ����0�% : ��&()$%@& 4 ��&� � � 6 K Ê %L1@� 1 )$% � � � 6 ,) ���(&�����)$< 1 1'%@& E3��)$%@< ��� � &(%'+ 1 ? ��&�? ����+ 1 ��+�%= !� % 0 %<1'�C���P2 � B @� � <�% : ?,�:9;) )( !/� !? ��& �(%L1 0��- � 1 %@)��(� ��0-��)(% 1 )(%@< !���0-% ?,%AÆ- 1���?����3��?!9;)(%'&()��94 : ��&()$%@&�+�%'��%@&(������&() = %9K +NK ?,%AÆ 8 4 %;Æ 8����:��� ������ M %@�- ,)�� �� ,���C& 1 ?,%') @AK3 ������0�%'& Q ��&$<�)L8 ��0�%��� ��>� 1'��/ : ,?!%@&* ,)��T1@��/ : !?,%'& +�%@�-%@&�� ��%@< Q� !�(0��(0�%0�%'? : �94���1@��/ : ,?!%@& � 1@��/ : !?,%'& Q�0� 1 0 1 )(%@)*E��91 M � %@�-< 1'� <-%2)( !/� !? ��& �(����0����1 )$%@< !��1@��/ : ,?!%@& � 1@��/ : !?,%'&()LK

� / �A/.â/�, �d/�1

É ��Ê �ÍË ����Î . K �21 ���� !��+�03��/(8 H&K Ê ��� � 1 0�%'���C8 Ë�K � %'��%'&()<8 ����<� K�Ë !? M )LK�D��� 4 ��&(/ ?,����+ 1 ��+�%C&(%@)$� 1 &21@%�91<1@%')()"����< <� ,) ��(&( !E 1 �� !��� !� ��0�% 1@���A��%AÆ;� �94 �rÈ %'��%@&(��? �& 1 0� ��%<1'� 1 &(%4 ��& B %;Æ;� �*��+� ,�-%@%@&$ ,��+ ="È *B�� @AK 3 � ��� )*�*� ���� � & � �������� ��� + &*���*' ���������(� � � � � �*& 0 � $ 0 � � % 0 � ��� �*& ��% ��)*�*&�������(� $ ��$� � ����� �R8 � � �'� : ��? 8 Ê21 ?!+A��&( ,�C8 � % : ��%'/ E�%@& / ����� Kë�ì�ì^íhî�ï^ï��Aòlì`ú=ñ�ò`ö�ñ � A�ï`ô^ò�ûlú`ï�÷��`ì`÷`û^ú^ýAï`÷���ìA÷�û�ú^ýjñ�í ô K

É ��Ê B�Ë ����Î . K �21 ���� !��+�03��/(8 H K Ê ���A� 1 0�% ���;8 = K BD��E�?,���F8 ����<� K£Ë ,? M )<K � �94 � Q ��&(% 3 �C4 &���)$��& 1 1'� 1 &(%�4 ��& 6 ����+ 1 ��+�% 0 %��)$� 1 &21@%@)'����B#�$Æ ���-��/ 9C�94��*&(% �; ,� 1 )LË ��& M ����<�0�%�� 1 !&(%��/�%@�A�() �����?!9;)( !)LK 3 � ��� )*�*� ���� � & � � ����� ��� � ��� ��� � 0�� � ��� 0 ��� ��� � �����)� )*� ��� $ 0 � � % 0 � ��� �*& ��% ��)*�*& 0 � � � 0 ��% 0�� � ��� � $��� �� � �R8- ��0�%'��)L8 / ����� K ë`ì�ì^íjî�ï�ï��AòZì`ú{ñ�ò`ö�ñ � A�ï K

É � 6 Ê Ì ����Î . K �21 �-�� ,��+�03��/(8�4 KA68�:9;�3��&(<F8 H&K Ê ���A� 1 0�% ���C8�= K�B#��E-? ���F8����<�� KË !? M )LK;�¹Æ : %'&( !%@�N1'%2�94 1 )( !��+�È *B�� 4 ��& .�6 ��0 � 4 K3 � �*� )*�*� ���� � &�� � � ����� ��� + &*���*' ����� &���� ��� � � � & ����& 0 � � ��)*� ���(�*)���% ���*& � ��� % ��� "�$ " ( &�� ��� & 0 � ��� $ ��"�� � �����R86 1 Æ %'/ E � 1 &(+N8G/ ����� K ë`ì^ì^íhî�ï�ï��Aòlì`ú{ñ�ò`ö�ñ � A;ï K

É �21 � ����Î . K �21 ���� ,�-+�03��/(K " � ��� � 0 �*� � ��)*� ���(�*)���% ��� � ��� $ 0 � � % 0 � � � � ��� �*������� � K �*034 ��0-%@)( !)L8 D��- !��%'&()$ !� 9�94 � 0-%<E�%@?!<F8 / ����� Kë�ì�ì^íhî�ï^ï��Aòlì`ú=ñ�ò`ö�ñ � A�ï`ô^ò�ûlú`ïlì^ëAú`ô`ó�ô^ï K