From 4676acbde531b3c00f5572ff4053435e9ba9b1eb Mon Sep 17 00:00:00 2001 From: acolyer Date: Mon, 19 Dec 2005 12:22:26 +0000 Subject: [PATCH] merge of changes from 1.5.0 branch into HEAD --- .../internal/lang/reflect/AjTypeImpl.java | 22 ++----- .../lang/annotation/DeclareParents.java | 10 +++ docs/devGuideDB/ajc.xml | 3 + docs/devGuideDB/antsupport.xml | 2 +- lib/aspectj/lib/aspectjrt.jar | Bin 109128 -> 109157 bytes lib/test/aspectjrt.jar | Bin 109128 -> 109157 bytes tests/bugs150/pr121197.aj | 57 ++++++++++++++++++ .../java5/ataspectj/annotationGen/ITDTest.aj | 2 +- .../reflection/AtAspectJDeclareParents.aj | 4 +- .../systemtest/ajc150/Ajc150Tests.java | 4 ++ .../org/aspectj/systemtest/ajc150/ajc150.xml | 6 ++ .../src/org/aspectj/weaver/AjAttribute.java | 11 ++++ .../aspectj/weaver/bcel/AtAjAttributes.java | 36 +++++++---- .../aspectj/weaver/bcel/BcelObjectType.java | 20 ++++-- 14 files changed, 139 insertions(+), 38 deletions(-) create mode 100644 tests/bugs150/pr121197.aj diff --git a/aspectj5rt/java5-src/org/aspectj/internal/lang/reflect/AjTypeImpl.java b/aspectj5rt/java5-src/org/aspectj/internal/lang/reflect/AjTypeImpl.java index 482ccebb9..99f1e66ab 100644 --- a/aspectj5rt/java5-src/org/aspectj/internal/lang/reflect/AjTypeImpl.java +++ b/aspectj5rt/java5-src/org/aspectj/internal/lang/reflect/AjTypeImpl.java @@ -661,8 +661,10 @@ public class AjTypeImpl implements AjType { if (isAspect()) { for (Field f : clazz.getDeclaredFields()) { if (!f.getType().isInterface()) continue; - if (!Modifier.isPublic(f.getModifiers()) || !Modifier.isStatic(f.getModifiers())) continue; - if (f.isAnnotationPresent(org.aspectj.lang.annotation.DeclareParents.class)) { + if (f.isAnnotationPresent(org.aspectj.lang.annotation.DeclareParents.class)) { + Class decPAnnClass = org.aspectj.lang.annotation.DeclareParents.class; + org.aspectj.lang.annotation.DeclareParents decPAnn = f.getAnnotation(decPAnnClass); + if (decPAnn.defaultImpl() == decPAnnClass) continue; // doesn't contribute members... for (Method itdM : f.getType().getDeclaredMethods()) { if (!Modifier.isPublic(itdM.getModifiers()) && publicOnly) continue; InterTypeMethodDeclaration itdm = new InterTypeMethodDeclarationImpl( @@ -951,21 +953,7 @@ public class AjTypeImpl implements AjType { private void addAnnotationStyleDeclareParents(List toList) { for (Field f : clazz.getDeclaredFields()) { - if (f.isAnnotationPresent(org.aspectj.lang.annotation.DeclareImplements.class)) { - if (!f.getType().isInterface()) continue; - org.aspectj.lang.annotation.DeclareImplements ann = f.getAnnotation(org.aspectj.lang.annotation.DeclareImplements.class); - String parentType = f.getType().getName(); - DeclareParentsImpl decp = new DeclareParentsImpl( - ann.value(), - parentType, - false, - this - ); - toList.add(decp); - } - if (f.isAnnotationPresent(org.aspectj.lang.annotation.DeclareParents.class) - && Modifier.isStatic(f.getModifiers()) - && Modifier.isPublic(f.getModifiers())) { + if (f.isAnnotationPresent(org.aspectj.lang.annotation.DeclareParents.class)) { if (!f.getType().isInterface()) continue; org.aspectj.lang.annotation.DeclareParents ann = f.getAnnotation(org.aspectj.lang.annotation.DeclareParents.class); String parentType = f.getType().getName(); diff --git a/aspectj5rt/java5-src/org/aspectj/lang/annotation/DeclareParents.java b/aspectj5rt/java5-src/org/aspectj/lang/annotation/DeclareParents.java index e26e8c778..fe7267849 100644 --- a/aspectj5rt/java5-src/org/aspectj/lang/annotation/DeclareParents.java +++ b/aspectj5rt/java5-src/org/aspectj/lang/annotation/DeclareParents.java @@ -28,4 +28,14 @@ public @interface DeclareParents { */ String value(); + /** + * Optional class defining default implementation + * of interface members (equivalent to defining + * a set of interface member ITDs for the + * public methods of the interface). + */ + Class defaultImpl() default DeclareParents.class; + + // note - a default of "null" is not allowed, + // hence the strange default given above. } diff --git a/docs/devGuideDB/ajc.xml b/docs/devGuideDB/ajc.xml index 135d8278f..0aa7bae93 100644 --- a/docs/devGuideDB/ajc.xml +++ b/docs/devGuideDB/ajc.xml @@ -456,12 +456,15 @@ (Experimental) Create class files that can't be subsequently rewoven by AspectJ. + + -Xajruntimelevel:1.2, ajruntimelevel:1.5 diff --git a/docs/devGuideDB/antsupport.xml b/docs/devGuideDB/antsupport.xml index 00fef5249..a21268ad0 100644 --- a/docs/devGuideDB/antsupport.xml +++ b/docs/devGuideDB/antsupport.xml @@ -432,7 +432,7 @@ own entries. The other permitted ones (currently) are serializableAspects, incrementalFile, lazyTjp, reweavable, notReweavable, noInline, - noWeave,hasMember, + noWeave, ajruntimelevel:1.2, and ajruntimelevel:1.5. Of these, some were deprecated in AspectJ 5 (reweavable, noWeave, etc.). diff --git a/lib/aspectj/lib/aspectjrt.jar b/lib/aspectj/lib/aspectjrt.jar index f8d847b2f58d4edb8c610a22dcd0a7bdc8baaf75..297c989ac84ee928985f3b1cd9eca171ebef2182 100644 GIT binary patch delta 18867 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 w_Syrl7>+lX~!wl z>ESYpU^-lb3s$5Eiz8G_QdL9p$PCvPpS-6VK0I|pI-{H>oc?S*!Lr7MSp7r$BgS77 zrV(<|XTELp@g=i~nw*p1vP^gE1Xp!iVpb2Fuy($h_+sXplZKA}<8Ts0sGAPWag$>DEoaM#UpB`2GM0@Ok zTs>#4FsjIP&9lsidRR?BvcNQ#j`Q%b#$+fe^;_qxIS;jkkXPO+;37wj-W~>dhE6NY z!s|yOc$Ya;j$0U0HbXHf`6@>~yh{{vFKIM`PSq35R%9*AKa|CoeYz<3MEhoc=7xt{ zSfH&h{5+YTP3#r-x$xuzhH~xXeu4*PTE{I;&MX31&dV{Hyk&%z5yisZGN0xjO^p;d zg{dUiP{^35H-9Pm#0+L%wa#ikI{aX)KL4(TvUA9g`xC0p+H~x?Q}ckDy=PNqVCv75 zqNlzIHU|33O`~7xyN}Z;Xp*_pJ1v@)l`=MjbE_Kb{hOyvC2IRxF(%2GAnmh99byQ} zX6u>ikwu@f%=Rl6B$;9yHH|V8WmL{`Nga#{)bhEqZW(yy_E5oW?D$siUV$S}`(D55 z9k|+mgw)+3tUlGpN?_oYDn9$1*Zx)-YwYl9QZbE6O=Pw3UO%=y88S z{jKZ!m{R*Ys{^{B99KzUMA)uJa}h`O_zW^_-#3?f~c^^@`6nh-uHm&iQb3Gsax(T;qmu< zZDQug7iv(8&3{ZB6KU06hF6>9|hb7XZ zjL&#v5sSrn0>ppD#EREqIp&b|M8#?_?m#D6cQ0#07iUFJjZ>biB%6A-r>$I0jd7_X zbJcdFkiPaX&0k&=5EXA$`rIfsa5bo@#yg)O51kcLj>)iAeQO`f7@>1&ESfN`=l1BE za~g3%df?MuOgylsD(kCU!{P@%olzPkAD*cVP!c4CYMaf8JuLN(KdAD~Bo^_1=QkzI zHL3oV{%!y8!1kU`;2RreD$SUu#`3vh@v%zA1Zd=oSEbc*i880T;SV-WO7~fP41W+< z2aq2~9r&lrM$3R((5$~8xN7OhVSQZ&9wfx z*&(|I27B@Hi8YVCbV<|RAJ+TqSD5T~BV)YTHh~nis>Qzu+7j%edSJL)v#$H;Cl;w% z+1p*5=tWLFX7FB8mrRM`cG2P<4qE(1myCbwK$lnY4o*hEzGBQ(m48@7Xvj;5vmx!t z;>(<_gZeC_@zN>^FDyX}lKqCg0G{DTwDAN)j}NlfBs+FDp1mWr*mX16?jwn`N)T@w zZW~FR-w}T0)cE#hVzHHbtE0QH{bRPcA;bidobs~k7e6@rrXeAs5Z6ec-Zhq9&cGsa z>xoH|NAuw9jxZ@3_85x+Nz>v%+M)u@h27_m?uOSnNDFPf1y~Ym1FhbQgbH~!^-N+1 z%@+N_vO0{px#g?h z%S=6v%i6;YaAdSUutXswbR_c`i%?8tfi->uX9;XFS#&ItX}bp>!S+J&4p#%7InLYD#iB;h6&t@ zMG-M^;E@UL9S*NO68lF9&UsUaX;`{7F@k!5bu9ttVK0iw#ykn$w#_fIv``f9oNzJ) zh1L&clH8u9$k=urC~C|f6oHO(E|=%g*%hcO4~ld)jBBhX#X4hM7MF1eW|mzJFVJV- zKfO6P6szovGn?MXZNUxj^5J+#M>q|#M2qI10{ief9-b(dB4sJku0Btr`$eIlBq@_W zwtwjAgU6k^;*}XGAXnTnaxUqUG<9r;H%MtE(9g$0^GKddCREfbi}z9Rm*;KSwq{ji zR9^M7Aqbl4VcQ}I3xl?1PdU3w z7x`3dqh=J{43Bm>)E3($qkAjM#F}aVV#e%~EML1gB$!F`u_$CnbIi;xIsnRD^X5I( z{!oJcmBB?ew`;$@-0B3Td*9lu4q2GMnK(F=R$Jcw5(~UgFm~6&NNRdpjve{yeW^1idj%%yAs-pc|DG{ z|2X}ZE$`#0Km1SKeI1K=##jg2<%T!9G~E)uZs`nANR*v31lm_gKTuRdCFqdvBuEIsY4=~)z3wT~|T?#^c#PbRX zV#OgGD90M8#diC3&T>HWRH?bAaP%mBon4b7TeP+aJuAM^#X$U{nz%Q~fF~M7vjtD? z69avjPB+KWH8axcDz-`!ZJkJNq9bnn&ywYT_O7B`Sl6(HDs7D>Odqtn3xF$vV#51l z{jtVu$zQ~JbbgRl(7Fn>+G!ODVv2W65ZC_tf-DLwWeQvlj)Ju>qNUacjJreaJ_qY}f-0*L)OI6a za`b_k#daBqx7Q89kJi_3B%nCSJrsN2rG=FL;tGMI>I%<%Gq1#RZN}CK&RPi_?CPBZ zr~2M}w|q?vX0@R~<&;FuC6tLtAQWfDNV889VN)p?REgo>_>I4>W%;ttlW#KWf%=y) z99vn&iC3oiTp3x$hWzIR_PC*A+uMU&lq3MC5S1yH6*!X{OsFD z;1(Kkoh3FJQt?3K;4SU`lolWyX89|%>TqC&N&O@H`eG>3qOtYdWLg3kiEv3?h+S4_ zZNfa>7n1H=_WT%8Nbo{AK$29D5S+`@_w%)Asw|`^k4+Ja#h$^=O<~G4nV%vr(b}$# z5#lU?E?OlJHoKF0I9E{rXG08?T}|8YU6D;Qg;H?6f}w+|p~Uh8o4Bf8Ly>P|T9vI; zP3B|_*W3C1J~PrcReKHK)FtAVN_t&lnz5x-oI*pAv&3%Ekgcv3WU!{n1^YfJ;dO9b zy?x($qGeYxP9LC#i^8Adnai}cutZ_1<}#H=@IANaXZaq6>^#`C>VAgA%}3gHqc z8STcQ^ugg2eT(wJmp|`XE3}(y=KF&mT%(ehe<;%S9=u*bMDiKH2Un$e5Tia?!ckES z#t%b!|NJC1jCY3@TOt|qxC$lmd*t8u^hD!|BVVehZ|vSWfT-1R4M&>|DcD~Zzm0D& zq~HR|T)XO2R@i$C1By6<;oS#clnh1bMCp2V$kmNK$uUz|TY4V^idLYo&_%MdauV{$ zfpJd|RKLk6M?`@O=nkU_Pj~~)m1ZDPvB9@|KMs<@$hwh0euzH(pf-~H!BrU%M6JH@ z6M@_axf3#xiGW^yT_*~*pZb@nT$XV#&524rhGXrD`s*(?Vd2h^J%@=}SrRxah#*gsUpeNjpWJHAZ*U#-;3* zfE?P+R^Q}fx6Y*%p*%Z0x=C}I&S#2qGOB&Mc~L6#II$O_LMlzIjj zC4Hylb(5n6k55khFi<7r0uWBfA55(;OD zp&jyp3k#|x#Y2t>g-8dE!jun(-7zjgUy@&Fb5nMof+?6dIYd#DHLQ zmz5F=EqE+@WuMM52|p0Zt{#WVIAE~z_Mkkxkfs|m9IMKQWVjPoig12%wflX0^(VKu zE~Kxqu8x!S7aM2)+3LwsB*XiV;Dx>bS-cGF0rzyBc#b&C2_D7IhQ)@94PK&qnDYI+ zBNk-amtaDA3fl&^dNpm_cNUbLX)b;BrF|&Q9D9cXv=RA~EjR~!`=Mgp@n(tJW;mKH zd7n%;2kgF$m3yOP@O1>vMJ|%QuV@Y}Z(fQ@rS@?bKf0 zJX_vOJ#Rwm=z{I&atKy%T3N#NY5po!Blk_{h6c>m4E$qc(EAS!RjUJa&Uh6rq7_H| zMD4SVInlU2gxJp^yZ8;*jH)h38qGS1)Y$J0*$*jwT#%iR(%(|Bnc=wYI{Gj+er%pT zj1|eu3!NZkXym`0oOslsV|zWsqyGCX@1dKG>4or2T~AdLGWF20J;!hFkuk%eh6WjX zlwMWv?AX}M*j{0J`hed}-YcCGXG4r#a*il2&aAZ%D@Lqw8LUnn6XUXmy27#khiMU$ z7Qz-14RsEOwhk7Jr4ei73|W{q7WxOIU&&lu)Nqf%ucVt(c{`tiw`6Q{o$o7+oH zRmx`jbMNG-#R7q@N~Ze`FA- zjdbWZ7_|Cj$ro|qQP-yqh_+ew z3(SnI|OAX1$=5QPoYU4__SF=3H`qorTQ99mdk6A-Vo7D~Ou&b!)X>-b)dg z?daB#RM_252`&x41}mqxtEs+dNa`(BvcRgKwaTpCv?zi6SmNL3Pb|FX0msStlM4D% zGbKVEdd}7#7mEmd7$(9)21L74S)xh(HuW z8>S~j+nBlTVh~SP0F4&a2Tz? zw$qj2jUQw}vzT5sFc#xw{6v*Jsy9Q9Q1AhvB;zAe@t*#ZgOB9F?_$89_olq5?{FZz zQVH*n&X?RQ*k2l9*gV+cLW(G|82|i`oT~a&JvB*u1kJ)Dl6Zs4=gu_@v~k)Q75L6I zgkzzZ8J5DFyAR_^mu@vO&Xk(c@Md%+2SbCxGtL+u{bF_giD5GK=9XDa^ixJ@6UA%a z54wle>=#QJXGTqFJ%yz=U>dI77foqAGrE5hGtTgu(rRaPyZ_c2W6G)d562@vllvx+ z!Zjk4gqoVzm&iP7L>K9#X&fKbP%8TVO?04XWwq3Bv}i?37vf9G#NVIXUCunc;r80yOyns|R8IK7QRIL||K`PID;{)C zNvv#CiZ#qNL@RmMOyuM8GRW#{1Sl>FF=O7!{ZFcM(;gK$bvPB?fCgIpPjbU@u5la# z>E3m95?4Ns`B6-7loqhS3OjjDWbm0G>H|8xN->f(MTG|c>_7CYnhL(!j~jo7)Hlgt zI+ahdlPkPh3tRBW@}Q*Jo-+@4M9E4WE?%+Ey|BbV^|IocecxqK4AYk=?iYSsMu-D$ zKe``}`j;p5VwSvOZriDJy?ns%Wj^p(pcCqdzj!$l$^w8b_U%Yd^+z@x< z+M)l2g#IF}@nE-BAF_#!n0Umd{40g}*X8a9DA>F^E%?Jq#M}sn{nBUVgpx7e{eoYO zeAI284-eYVYJB794@OB8c(2no%{woVTt~O3*C$ErU}<8hiM858g;~A>;`AsJP5MIH zL#7xVXjF+scOkPbU{}e(Lw0Lnu-yH{hm7)C+#wO^cb|E3o7un{s(Ef=&-75-Lqb3N zsW8;5PF$hUXL4wBGgk<7C>VhP)+diel9ECZB}vQ9J<6j3y}(sp22>?!DKC+YqpolQ z8J+j^HVGwBitA?GQC_py^w6X}C$O#~BOvEylZm<}tU1dgU(~dbvX+vabe3WNllcev z1%(LJOolX|v=X4VJA?=sz;xd*id{NA_q?BF@idIbNcpC`mUv#;6^ zi9C!<@LNq7j!iK=s7SW5Nw#RUqdWB&j+HqEB?|C;2j{8ZeAh^@k6#P_gTIA4CeCrv z=6^_D5wkLo?N^DCpK1&!8(RZ;^U94$5XcSDoO$trY`~qBa@uRCb%e{3n2>Uq-==*hKIzMfLa?l(Y-JE#m2zV#%ML}kc%(V0glEfF zuy6fNXC$j+zSX6fT_q9S$aj`9v2)LpXG`D3O4k=k*1eszdf)sW`A!>Y$8Il9hSp8G zc8H06x%kl6srNhm(v=?h3f-&CE)>P{0p3u$P}yK&vt$0cc)Bo>%-YRqSsF0y;u&OP z;2QKdsPu-S?5%e{^4tPTzx&*RSg&1&2^h^&XZZ8`(&osk=JGRjeJ?`IAgHRsFX>*_ zbWO5~hd9m|xEZ6l9y4}I`@tbD5uSBK>S$Eoev-6{e6IS@_(W_8Kf(BY2wl;Iq$OPr z?qb5@==SK46c zSz%2bUb=74m0I*Cx+1(k1lKck#dv=(u4i5s;Yoz;2T|PIkSs;-LeD<(T3(^74uc&| z^TIUNzbauv0!DnN47%rv1K*flO_7ZGnnzUf27V#k75~+8mZyK9r3-p#&~&Dv9{u?C zmRUYH4BsD(;fz~$#}_?iok{+02);iUkKs&Gb|(ovm1TwQG#e?~JOgDz?0$d3!lWQ$YTJwp!bTx5zjuj2W|Ms5ii&hf%0 zjL@@c2_D^skM7^tVWDCnqb1?jDJ)r_b+0f}*BL$Nm+Q9)og^m`GUcp$QucffT=l$B zv#(61Z_fuM=YYhS)&(VJ1t<)nI>5HCv+5`k=T%U!@P*c$aB@ybmjb1l=H_1K|9y{; zLa@#%kFeF$aUQm|*Q?*Of>yl}!bow*h%!a;j$Y|Uq(>1RajaJ+!&GRNu{qtJO+aBbFk@ItZ5CCc-{*O_C!FKiZS zF^83=!Na@t?Zk{}E>%j2FSxH;fHSMJjzq!rwW<1&2j$tC&d5xkJA|H-cg-6HCg`l;*<3CnN{L~ErCN~Pe_Nn8 zW3LncRl!nE4T^BXQj<>`8~UzA!aYTeh_=~Z=)NfuQdAN4egmV)Np68;2FpMKnc9-g zi)^4Ei5$0`k!U!MAUcV2P)UfBOjMgyu@9Ax@|etOlg~r)F~e{lgpn>d_UAJal#|Fz z^zSh$Cs~ESL5(?xgRFQJ8E8N z^kv7h&4VWqwZ)jvxLCTcduxd+C5^<#Ul+_irS)(*d*O|j|M^eiRH|rPOfB?Q?=m~) zGCSfjJK-`r>@qv<@}XQ{I(@e-L-*e8_g=C;6eL8?C{VjI=U&wg&Ygh$srZL}6`lSx zc6uDq=MyxqUSBHsx!igHjOz~BxfVurk3nveM`@EsTtyA^)&;pTloTD4F>PefZ)7lT zWH4-GFl}&$Gu9)5S_xT83^s^dk)Prm;?w$>_-#Jf41-v5J?7zl)mlIKJ%Ub>IN>D1 z`28Vcxpb>s=&=Jz#}^XteysbNQ^-`*Tn4BEhkPhp`d1U;S`x{=xqg9owe&9?bgu~t zM4ByjOs}&w@}E-(c^g7=CZ7eiFk9#!6|gnZT6E!y_49HE9!Fl;Uf8i(NM030NFVxG=G9|IirPKsN$*|+nvdb9zkd92E#QnPeC#tf?H@0QgK}@K1d)~@q}`3O zKVD-~Y~+-BvB|bTUm%e1qEGd5*yI2BEq3!kpcmnX9MWn$svjRVA++Gs3=_o?D=n_N zPTd))rwv;u_Q<`o4UFhYYShoP^-!Rf=HyiyvmP_5$ z3Bo}xPKDL6vq2Zp5zUh4 z8@fHyc5@qU)y!=p+At8H$YZrQuA1;3Sf$S;*f-%8?c(>e3I)qyX4iO7E>M|2(kwQ{ zv_3oTih5j0KPFM1#KR|2hJ+{Hg%(#@|Kbv1*S_fw`9oROC(fadPIdD+H3GS5w$F$U zXhEh0@ib1S<{y^6?hm6EIi;9-R{Ux)c|P0})7md|ngJ9eET1!kPN@dSKl23#bGU4+ z84Ag)Q`}6Q^?~)jJ8y6P+L7Urzy$YZGj#e-I|>uTY1HE#?F2VL&}KAg<;DHcGos%= z7tE+8(2{;9f{-%^sndIm(i-z-)74|dbB!JHYxB!S8?<0z&QEMCFgev9kNKRK`TVm* z*1$VQ?w+t;>8Ix|x_f^ZFKmtt8pRg3{(S8q`jf!^qWBp6f;9LJ1*%B z$#h#IHgUMxZAp}X|8zo<8{#8p>c-L=YUEX-jw0FmP2Q5%PqBkmo=e8(^%8@YOe*}# z;P?q+%T>i?JJ_UAGh*|QOa#n2V>A$0fV_#R=Yos9zJEj?_`5COcWyuqF51pAd`;W& z`O7W3WJ{%mEU;E zD|?D6|KdW1zL3X)L+P&xxe1?bR$U4rpZFK!bk>W4pVKXZm-b%0aS_XH@ebo}IX>x_ zY-9C6d*zApLv|!yRxVTHm&K*Mz6-mxTDoW$*O#MWm`Wf(p48Dx9FSVuQjaVKWc(YB~LJBuqLd)J}38c)ReYqH}3R+!5lhG`*u zOlP^mF(GWjPmy8M85qzd&ka@16$dI5-zCL?VsOi25o;=>=}+-)p_Do{VTE{=K7_G+ zc+~qyti_0d$%zmev*dR9>!H!|;fEvq20}P{nGZQ0X(=IR4`G)!5UJWkO^zNX>o21a zJQOd~k8HlwuV|2^y?%?3vVO()a^5$%CFV5ni{16=S7m=xo>&c0hU~K@P3`=cG`rJf zz8K7tetKy*;OI$3wa1<(w{=!*W+r8u58Q?w@O{=u(Xus%!ye$ zZDK7;RqB%%LV#aoOu!}i6=J)BCq%H;hpC1ZWa2%eQdF*_hdr!PFRSyQxWJcvvxnQg5(fl!Zo$`bPdWOnanO zqi(FHeQ+Lps)=xI$;)V*_lkJq)t!72?(N-;KJGX1m#pT= z|28b+daYww9bn+pU>QK-I92`kht_4%Y*XFNe%5BF-(T_s#;$Cm@%8LmwEI^V2-Ljp z?jA&Ih@-+UAq?w9Ai)hyqcdc&}yH{Qw0H^*Pia;lge#80nHLs{&V6 z6tEz8scewrA&kZv7uP#BohLRLoXzdue|O{IJizlVs(p~vo%B@5;2o6yYVS@uIJ)P~ zBOPmVM=pi3outijs<#ya8?f&WyUwm}wksBA`-r~7$k5Ev z%9^y%N4C&={gLXq++QM{oPNJ}mX^AA$vpJK1h_s@p!*Z3uvG7^$9|P*-5Dz7)^|o- zh5SFLQufYxT;+UcyshrN8$s7P^Sd#fZf3lj2|wD}?x5Pv&^t2!JH9)^uG z?rJ-||2K`8M?2vj$oAMMoKic!eV0u7l))WxH2n*PK)%eZ!pq^=kMOeK!z8?PpWBCD ztTLVFftLyMBJgr#UJhR3E(jw{0at~T7xK|y2ITANZ@A;j8qixXgnJ$60GRQ0Q~u82 z-2plP=CR%-y)%OLG?8E)$kf+cI5P7M>kj#RKnyn^KMxOa00ut=7H?HO&=JHCk8XMh z?(sCd-p26-yj=c11TPCu{=jt#Pbu$oy3YphjEEnucUfFqEFr@=v%hEVpprj`@HVto zAcG1~U|6dLCWsjhLcOs-aLHD0Y)}%s?^@AtL3D5$l${842hDC?3_-;3ncMoq6x4o))|r8R-qk3#1odFT^&DM5*>~xpxq~p#U~>RU>pHF{30LJ)gMF!CGi72gu7+^K-zF4-4CPzH+KC%kKu+%20)bZ zzq{`TtEK>VxA=op;RaFwNdEp6Kd62Ha0?J3M=tJ-^F`mY;>g}iwY3ffY!_2BRK`ZG$kRf z{;23g!*SzVix1|7$TO4KFcFb_IB`-IM*Db4N{y{<#+#&z%-OE79{{(DqmmIb4sU z+C>copmqH}dcM#TKo3sxjyd*3{{PjRgzChBq~Jl@nV8SW@ zrh;zA{~MIQFlT5r+$od*qK2pZ^;wudEiff9i4YK&?`0zo^+*5-z*8=*Hn?5|W@HU2 z0s_Z9QfV_>ZX*Fi3(pvo2*em`gN7!8I3YakSRC4FAVgv$;2A-H-?8TZ3>ml-0$Sbx z$ldSq2xv&+f4T@u+-eJ`0(<7~KU)~@VA71K`nXWMBoHCI3HpD3b>IO^*eG({%T59+ zodj&Ju(c1I1SAISfyyL-n4mqt8@P83=FRSfYeK1$|1DwRRpFs0fY1OScz?MWhUz2( z8#hd_Fd3*yH~=*N0kD`7KzmdEt?c(stoPC}9t7B8|6}r^@JDL{F(`nQ@cwq1Jp|V^ z^(27CCxhT88t8Ni5K!hltiK^zqo`1vR1gC^6TVac_&xFupn*zc{af609OO|Wfebo< z*Zl{!9a^6XoK#@#IDplT7>C!!8OMNfLjLsvPY3e?5s)1^FjDtd5hthx1SABnoegZ@ zhy&B`+C5X~5V{#+=rQEqB>e*e-_867ge}sTP^Gkg?RlC8pt-Yf^kkM4TAB8*T00Ez z`2YvTJ`ns5AV>!Q#W^^TJx2!%gvkj1!wdiC5`jSc-%iIzIFjL;hcb|Z0Qq!49(HPL zhpAY>y>!q6U!bo5?>&M4^%YDYA4;F`?^Fjnqap766HIaeq2HU{uv7XEUwjf9U{ixV zPPG5c19n29h4yBExL}86=m|`wXBB7%5tJSZ;-QDt#1!ZG{1>Rv26XxTXYAeDf0&q1 zU~8d;LT9lF+hmFgA1}3&aAKz{mz9nhxL+=!ZoAlfc6;R?G(^{s6E0661$( zHr){=oJ|J{_}@=QK*0NJKnHXq8(0HiT|<`x#A-PPYSTclzmvmj!+{VOQ2QO8S$jDM z59*WyOj1~tRT$!X0uMNT@_)3@bPB!g1CSd1{}a&n6t3f*3!F$`seN@@EQtkJ-+1q#js_6Hb0 z2Zp@){U3xFdXV>T7F@%SfIt61P@v-Zz{Utm2lJhAfibY)7vLfwaQ`P4pezXmLp}0= zKRW^wuFnUmGhsqE3xGt9@`1%2=EZ#tc-63AUS6o_YY+vzeZyIG5DuVySU~$!?g^@4 z-%-U2KseCZ*C0yxl5q@ESp&}UFckp0You8L;Jqb;c?F@h1t3DWHrmO&OdFu70q9HL z(>^AGQ8nS)Q^Fkgmkt1h?W&6RSjZ$W)??^xAqWMUTnHk9^Vjk0>r?@5HIT9SJw7Ap zfBC#{YMVtrnI%Az2X;Qgd(?fh|58bz3!y;5z-r2`K^^^Y6_5@A4&?gx_}!Fue7s^1 z3!FMa(8W>-Py+z!{ev<#%^h_%^xxsXvKZ(ba=JTj0v!k&idXV)v7{}5^(H+G5`?;! z{M+i|U|uq2s6_>EE_7uEQ9$v_{#7`JL611#5ajwBF;t=yL<&!+lPI+}9BAt_Fgxx) zakkudO7FNqWN;-o|G%HYF%S^M?zL5%?~Z>~3ViN`Z8CIaK+pieJFiI@Fmqs?mB6Lq z@E6$o2myin+x%1IJ8Gjc2zX3^)ZzTnj*k}jKyOL^KLM-M;d}_@cVg%mH?Yh6x4F`9 zfXKu;cXB6hK)BGDHz0PnTt*GWjWH138vXy?=5KZX%jbsY&rlAiG#dWbivx8i|F?|= z!=N$KI|x`jnBf&RVctlyJMWs=zX5T?z__NJ)cqD%~KxboT;FBi$iLhjdG)G$fe5sAj&C{t zX4GIrxaIfdx@{n{Aj-Hg5*TIoDU8AadID>0L2R)0Xo?b|l!pTu1fjwHJ`3W9wb<|? zuvQ+P5A)V?&~^np69^9ODI^M>9BiYaVCVl7rxkKYy;+1x^TjPTEuX@=gnlYnzn*Ko zZm1$fFZF!o-4zoqzh|nu-Ex}XJUir9=$A|6N1qcT4XFYvHbg`INhjY9f8LVk zdOf1M^;zRrztbDGr4^@#Y<5eInY5+(YlISP$umW3sXlAfEj^~$O#aK9RmQKCx5sfs!@ZprTGp!FQBF9x=4d!L9*B`HJ%oZB4~*)iHhp%}cro%-;f+50 zBSZ|VIZ2{eINVM;kUwHP4x|dzUy=tkpi4garK!U+0td;(#2!N8DwXF!a5=tpggRiG z=jAi`9JLV|CI<+@WKRlhbKAXnNt1SEhe~O|0(d@L+x|QiUa+T@%<9Pj5oA)sZ zTqG`XI$M-yJS{k5R(0a(fUImwLRrpNFIlgIvV!hcFMZ>s8FzbUmGJT&eeJGh801%V z^y{5f84$VtkQtAeper-*JV969j&uA{`r4rw{rXq|%O?e2{~L5N?K4NxAZPYhv?#lm zo0`X^>0E&Z`>V4`8CLvliD;F%)C)|F%c%3ekdQych1)rT57WN8M+B_MjxJFAa*eVp z+`~d%`5x%-3n}Vg;*wG^x&H~4595=AoUgWw@~am(suwENY4Jaq8nfb&L+g>5>qFvO z6CO(qTrj!Mp`u@sA+Ho39f)QR)0~9%QoD3M{xN>(;{mShrFJ^%yTVVP7`uGtQK$4- zGJ&GtD~iiW9=JC~#Hje$H)h$)nM-aDs&}34UQxZT#_+#C$vt|@{|6!JMrlJlr(m@4 zeH=@=vp@EN$-qg%FRcynYzC;vCHkY98;8Rz%U^FfioT^4{W4~}5eCQkWI9Ulf?sZM zie9n)B2H-8`C55o&~&-`3zP1Qf!+R=?hH93CnR*wfy$;#X`@H@siIyvjx=yQF4{6Bo}}>{I)OPh6Hq z%o;@u&RZkoa@1t-}}Y46RZf9o$+**}T{ z;^~JtH>uiSaPE=a_p4VSaD|5cxlMsj{m|1G_VPqOP6p70NsmRA2L{&$bv+n89A&=p z|M<-z)Kozz!(O+6FIzQ=KvqT1K3q$*NBmu=E!OxFtq093I?UoQXNA+ew@CD@>4*N? z`#6QlHS!9l*>4SY+EN;JUg)09cEc%PICsqFHO@*Up@U1V7!)ujx($h2o*R3}VPu;Y zF$7x}H!w&ytUifT7?6>5Oh2@Wd!FZnYepASc8IC)bps`Aj7cHVwWCjJ+r*&>Ukulz zNZXI0*U~s$E|NGXRjBKMK`3g1d|qBZszLZmHJfUN0(0XMh7sqE+3qz#<5Y%lJ&a2R z4{<$wUKwx&FEewtDG~i!WuCNn71>QC9!-3+B01%XFf@hX+?m9@JpNRnG{3IalDfsE z)pD~~jk-Z^KhKY&`*tLHO9ZFa zDbNK{+KTD(PSpu#_bl97ys_ZTgj(5D?nuBR|I8-vpzrL8+QK4%F_-hp*EDlnUnnh4 zrv%D*$R0d76Z^$4q8qg>D4m)YJU}q3w_4tVgSWMdr$0w!8seXK8KTVWxpj}=)E4nK?Jb2nx4rZ< z?E`nKEjfSPV2fG7Kb_H@`;On^)=)g~oJ@fEX!aVOcItzlF4FJyI<95owB;EAB4=(A zg8J-yw7MU*HhK?*38=(9mNJiAL?44d{ozt`aBhKIbc;%_@)<+<(j+snP)a-kC3B@e zti-%oYzkXAz~*~tz|*9aB-cmropFhrMME9T5|A0&w?eQ|lOAwRo&BattSynxk)3{~ zO z%8x`~l(q77vGy^ zJ9DLbOq2A?6w{IZkeR=kV zy7)|=nnirV;$48O6J%DfX_%a@kItXU8BEp4&B;(dPie92x4})HL@^Sa6GD1^ndtE7 z3;(1>4Wdrev3aG0i{`cUkO-kVnT4C0MY(i%*8#ObZurv)%Nmyz*HVkpF2v@b>B6Rd zxu*&Y*~M>k^S`*B1eZLv&9d`$a3lC#vtX-eE4supcu3~gLF&LA-@ooJxSlTjC>vao z^MUBK>-et{ksqWX8L{au_&N)bcJwXLIza(ka^Q36jqlDObS)Y4nN0XP?s2TewvNbg zsgnnh9UY$}qO0J%wKDiO+Onme?*C z1Vw`Wk!xWtA?TgvWc%CQ6V@fDeTUoN-Zy>r@nc-cak`;pHUx~U1c{(b4v(KTz^@i;gw{x@ ziZToBaOWD^tCV{r1SMpA?#WQQ&|zprvF{>uM$aScYJ(o+{xXfh)nXyHm(u$Ez^5lT zfdLZAyL~io?X3~@aLrSnODJX21U;1T;BQ>0_>eMXT5ZNClHDL1N*ujB^}s@P2=QS+ z1t!D8OtV09?&-`3OK6@w#B8%3Tq9?~t$b0Uy+@?eXihHW0@hg9FQwG)gyi;oRV@=| z9(0*~t?_(XVb_~#cQ% zzQVeh9#@n=r~-e$xK^o*l{!(lzIC8Yre8g)sySU}loOs|A9ICih7pg@Y}76tp=H#@ zk&A=K4&BLQCwvNX;s_C}$1(C531wVbn+Y!&=VRN3)h$NU>S&A@UEUU0% zpA}1hud>&Dpd_lpp=5eyy{J5qkE|tKvyYxaE$}rOn-qNEJN;AF9ehH;0(8r?%!ZKg zS9E*OoI}?ZjL@o_5y3LWPvyL^9bps+kJb+Jw;5eD zPL)lY$cH3%9pW){f@Jt@k?`>~6#@evsQ1V)eS*-XezADcLs9-3%y2OHzHml$>u7RD zL1HkR@2NyCzIL0Ijmt$M5jVel1Te2Oo^@LC>t6Q_z4aZvb z1xhhIG(FQ=hz)s>ljL6W%3unj5^q;;KG4VDdQ8$l?>@uV?Cp$7S7l7t$ujnFBEaaA zNxtaEiH5EC2?8!U{hHFwy%{JEUei)`qh<=ZHbe&!yXKrT3l>a;uZ{}J#)6U_am3R| z^5X{MgV(tl_GrZ(2l(R-u9}#-z-yEO8M=> zdD@IKBX5_PnD{@|z9UE~@jXc2t-0tW=ae!qb4`WFvumtnJw7apkoWcOmc?dd*P!Oe zZbe)Pi=+*XOo5;Cv-YBt@@hte#!=`^RjFirHga;&=pA(7&LZ431~IgRkMe+O^q= za{Z_5JJ4d3cd{o4P6|e}IUPe!zNS!~yt!;*@F0w7y|#agTRq=UWmVf>B>li`iY(yS z!Cd~~>6^;R=yVB#J=#wiu5m#gLlRI*^FvQTx1I26=W!a1okax(eib*Dy5#IR%_{AT zX(Kv~?4U64$-wZ)w;|^`mG=XPTDc=LN*pqcI955AhU)uDNC?K7m5ye`4O8*AV^va_e* zs*|w2QPJ;Gm$;+fSGP9NQtm{Pu_SR2!r<682U?E==Tb+Ki9UAt{(z*48WIrSaVqe&lzetYAIX6SPjJr_07M(M{hp$HXz+&7h~tz%e_oUuW<(MrFc3 zTHl&T6TEGVo)yqL1+vL_G7!D9$0Zub^TX{1M9dXv>7tlMDg2z0-*T#-jZ>PB>YW~u zw!B7-c-F|L-RjQzkQXlRNduDdE2RpE=6erKHN#6~ax{0>$%ezMl-rG2zg6%`wJH$L zPL7gq_e7~(5$~z%Ee4(hH>4M z9HA_T8F5K_vqo(Sr0Z+da1SrIoU@(_RG2s0n`hV5&y_l_l06yBPMxcWpfoPza2@B< zQ=D|B`!lJ#y}OQO9o({1Tr)biwOwBn(EGH%;Wv3LM0Wx;u6rd<00Gl)#85(0u*v0| z{wG-X?Mjs$H=O2#lIMFN1D)d~6Tzo04)qPlQL<|Ee3JEzZ>`KP_0eKnRr~o=-p7y$ zckNS;C#c8h)5%5Ddkd2HvNi7z@VvHPi4YJ!`kZ1xN^yV)ndnCJefQRYi z(HVCl>b#RlH--RQRNI^$xF;PpoJb}jttOu zc-m&^<2~#&dXHtRmtGB+AYH`lKF*2>-}>|=ubbwRY8qF@nxF@IFo{>r30(xvxI1nZ zIH7&Dj6M9yIb-xIy@+^(brnIbrv9@=_XIT+M*%-(BQ|MQEa$e+&Q;gWSoK~G$NJ<( z&9{>>2TLZz-NykCx6;#u!*_(Wy#+5ulMl#;*Qu0O9!d>P^})SK`3=7@RK8~OB5=)x zpy%x=sisBGYcqQO6Bhg0*mgmLO|!$E5 z{ArAMFDfvCx&jt|B}$4=jH>Xvi_4O{K?Og77pMu}e z>n#-L?k>{me#x0igWr@^b#+b0?7vKlpIq0sQVgu^Uout;eY@0hE$~%&&`=9`wNyXm z*-y)p>wMI{hAb!NmUmnB$mH9L#Ab^G2URVt@yT&6b2?t%E<%~YTy;vnmGjn*zJMoN z-V|h+x&ElWi+%ZID#vqp1mu0bg+&VfLQSOkx!i7}P-@8}(Li;E@TXVY!S2^mQV=y} zbTsy(U}fT91Jdyyj0!WJ_0eB^KMm|Bt}rNartnvmAg0Jy*(iu=%8I&t?{GXIsWsxv zR997bu48F=wWvVEUdd9NVxaEFfxpi|GLK($^W!SijjRXZgoQ_X4KJU>kA_2GwIjrq7Elkf`P-jp7P z@_MjuTbvFc#HZM>6f1n|NuwR0iUeb_Ny;XXbZL9dzsq0X=${hm)uO4D)2YkTqdi#0 zih0*dV5h>O(C?Hrd1N#Q?|%A7Q!6wB1#fuC{9|?h6L@zpDY1_N3ECKL5@QP@pOi>5 zD_vBK*U%r!MJF4nuB(X?%P1qU4BMdv^iSj(B9HZBM!k)owxjI6&tgX=d_REI#H z-ag^Z0>M#i!WTMG{qiRJ{U+tI5_^~R#Z{bu?xZ()W`{R+*yUNBhjWanY#mk35@H7>FJR76# zI`{u(q>aLyoQWxr{9wSID6i8REEA$4gt_??OtE0d6o9LQ<*o!WF{GNQ^na=J`S^o6 zX8^W9cob4><77TXuT(3m(g9CmWUsL;1$hi}lsN;}FYMT9g!lDN2Yq_<;@J$?JSU?> zr0uF>WKhpKwj$8(LZ zdq~2N@$WLONNE=FdYBSetdoX(UHe_oyjl=p}lKOhuOZR;gAF5I{e{pgr_3)rC=0rTArfas3++LBhsj(78 za=(=(rF7Bl+9aPaT|vNXMoLPWg!gvk%D8?N(#Ae^fOyJ2^aTDlX~GsbAJg2=Pt=e} zV^9P>fMm~?;GuYO$Ddp-)1wWpQyh$iET}-s1L-~AKQCy>holErgxxPkHD=+3k{_4F z+m-Xk{)sN<`J(;J`AW2Iki;qx{Fn+adCz2{f-c_+ zh3FU#(k6Q>(jB3lZh_%0a`UKsG2C#jJE%yIJjc_-12caao&NkeRtctVIYdDOUcjUM zT+?vFaEj?Na)a0RM>u4l2;^MD*~NM#TW*#;#k)#v4blk}*+B-siLjUcnir;(mPjA` znd8k?GE&XlX~95V)gqA)?@ajJ*K?sm^{SNsK8>L__$XZ5__)jpmoVZzHR6_Lznx zq1vxAb>hHfV+?5fq~{n5w#f-uMx0EtgYsxj&G<-f8S=a4*_CSXJyh$o-<-7!=RH*F zGFp2hx^OZ|y-DeJg^?NjfYANwg&}Ry){9;N3Sp$vQmh$-rVTU`p|0(;Gk=z0PKjj= z!>JauS$sb5CW}<3eZL90z1PcFV77wx=n^D3lSeq-Kv(B@*5vDOom|OcBwkTA6YO$t zM~f_Xb95b5z%e$bf6->^db=}NR7*NUvQ%jyX%&Gt^@V2Yi{aFl*aImmoi7t#)^CDm z9F?pZi)tTFX^UCzJ5Om-S(d}q3J}!_{P>hptFR{vc1`>)QX#n`;Dr^hJv0Dm+ei;j z|0P*v%2;f}T)e-yarMD6EfC9<2g6kLD~=-uovclOe64ac1xBC7_dQEj1p=#pgi_K+ zdYE?KEGwSBsjnN|t42)D2pdkKsj2z%d6=h(@6C13r?hiTv$>Vyx;?vCBd~DFOQCSe z4;tsLbKt>|h__||<7jZ2SXdf<8UonmWq1s$PAsMV^JQc#+<4JiT4c>seNse8Aw;eL zAFHg*jJgtn)S1!Kx@@~WOpPYz6(&00$e}mW%JQfWb{5Tip5R=ZNTOK05ff&6Cd~F+ zI6cBqE7(zp_?tb|U`Ldr){#LRLLquc0YxU?!*uZTZF0?I+i{NbZv~Pz=u<%_RB~<0 z@pe^THMNhI?U(B~rOD3BPcX+q%B3vavVF@XEYf2h9(BOieZfO#QxVd7^vyUbo2YpH z%C&Ck^hErrdz={K8oY(NyZ%SKn$D3^l=M*=&5Dx4S)byrchUYaa81_@#5uHJ$N-4-s&ceYC-bm?-4_-l-7(aasj$(8U}ld4<5>!<##IOm%X$kfyfIjWXJAz z63sB1s0=4OTl-Au5VCn=8yr0RAxh|@oP#;JgL&GYTuI=$!E7YBOKH}eaLkwK>*#=C z)PZ1})*FwaIb7@-8Xl!QGt1HJ+0RpKMP3hQ!BS=>&nvrri4YdpM62UrM;bG+)Zd zbv{IX3~82U{K@`1sMBTCoe4ylPV~;g99&JbhCii2bsc7&?!Mwc&f`iZ|~=HUEdZ`giB2FdIeUYK3&mH@+VzxGh9c zwMS?h*eFbtl=&oTFatN^sXwK6;LZ(atAjrtX$yU6$k{jFpy#WDaw~d0a5zI}>e$jf zC#$=rPao3P9G9jtt?rxKV0u4k$VTS?hgD7;DG(TBi-Z$*Z1i)XZApUl~YS@|%zbAe8B*=g z>Q-h~?$D|QUdfTIe?Tz{L+jXN$$m^WtFjlIuWRvv;OD0S6)_39D-!l^_!M*0<0@j$ zHva^ci%H5|{rY6e9I{ZIAh2mUJ475Q)jd9#Q&Tn{sygc<;pXhp zP%<6ub}%3h!`=TWxS;g-fGVh*;GsTo7;gT?SBi;7U(h1bMkD2$wVFsPOK>V#jAG1Q zCzhmrtSK=?5VtOtZo5o+w}31zP0b+3Cb>h7S!yaZKBa9>y(jQDmNy>0U@+m&XMO2^kMf}_abTO4e2WM3Je$Dbs+prz|x83sjQIjFzs5t_&YCeD?HvJeg{yb6!H*jBXl9TXb4_ zG-9|qBN}&X)U57zWnAEw1eT=Q(i65QreAnJ`qRBA*g#pdB4Md$K5w5_t0I4%nx2wA z3xBciOUKekEtj4$Vsh2@!!IspEOD)qx;fjffVWFMHs+?P#CpY~1|9SFZ~4AIPYgL_ zm&?{F$)`97920}E_Ke-&dVLMVX4^fk_?)>YGq4ZGW4m94u<65rO)j;V);A21sAD{s zr20IN*tYQ7M;SZGhAY283=y)Bh);@1f- zTsz4H_mg^RSUO?i)%++IG^nOybUtF6BEz1x(+X#>kvw=7k<+o97L^mePawbE#u98z zE*f;&Fg&hE>K;`Jo|BX5VQ}HYDklB?Q|*QmG6bDMlea9aVw3L*sSaIw;rYPm8vVQk zb%w@KlHfe&;u*=}Qb*1-<@|_V+_@q8UR)|mw#{OzV`X0dFrC^tk;RL(>>gph2=5rs z6Dk3!pND=Yix&|Tji$Jk;mxd!niT#o96KW#USLb8aB#n=0Dt8o?jYe{wHL~Ne zH5#1Z|faVGLXORGdvnC0I+x-=qR+Qq7@SP2JY7mpR41y3F5 z2UQ4e`~2^IA0STwB8M!2z# zRn|K=WpdaaZ9S8(whEKHA|SdsUDD!t6$~&Xr45 zgk2ZuzK5Itiup6$xUdFxqV95~&}JE0+YAZa8i~c8X?YXsM!3FX|Zc)*HLD!@4)d9^|u$5-xPhHd=Ti^hMsgRx=QE67)y+mc%t@$vr&m;$yxT! zA@+8?cqcfqV6EOR?&km;`B->nSwG{bci9*R8iXgFXRq1lbpiXs;&$I{W#<8N>c#>{ zZ+sy}y*Jya{lo|c;~yHvjPy0O{w^>s<9>poHbn8u2Vqq3lAPi-&SP(iMoM1$k_Ltk*gtV&OV3?$Bg5A(K%qS4_eY;p%Llk?xlnIs(7IKuh)l0 zzi9-2tXn_jO}4l;W0dFn?Z^|!^}8CutH8jOhL~^?=8k5>JuxvoI&fLoB*Qd4J(s9`K$w zeveuL_anG(=%KjJzHBH)u=9$ZCZ|UC+$hGidn~{(BfLELGiTum?yf7f64pgZz$#tH zt_s#Hp+m#5G1m>V@z1y0_TXr&i|5V_g=1@Nfmj!2&JC4MeLtb?R{g^JBN8lV*KYHR zJtCLVSmX;FUHX({v}=XqN2+h;OM~Mas?q1NYT%$Xb3v9D&83OC`Pv3D5B5~DKWA-7 ze4W4Hq&+4N?6S>0TnsK<7LAmcM5tFd&K0l3S0@-3_(~ip zj+0O-RU!0oWbgK4)Mink*w=)_bcDE}!{(fZq?t^nwzU$yFJm28`h`q15m#tT+n)D> zf8l%NPL2{|6rf<$1o>WdB2gKIL`ejc9xe&21?qJ^zz!!sx9&}?nm70RjQ1ez&4V<4 zGy$InX$yqb6`ED<4TRRVK%HN zfnW9%k7N1e7CYDLbHYY#He6*6%|T8U-ESmnBkO>NIV#xCYZVqKD7H8a>^bNq(H0A6Hqg9(hgo${z)2dF@+8 z6{5^l#H26_)b)}lmi-Lt**&VY{o$BOv2K&C)OvPACSawpItVi za5tN4ylNt`45 z{1w}PcZC>Z^bVgtCcTSn@c$fx#l%v!ML8NWDjK&9Z@ ztEt@cU6dEK@-s;H)ntYP+i>sq-^3GeI%0L~CJFh^e0ANZ_>P646v>8H@dI&9Ftnbah*qt zjw8f(4r8~QXpXKTFs(=ZFt&jV^N`F8%x|51;c0Ui-zgA+gO~!Evk+Yev%@o6%NkR==xmI6arx%FXtjYYclAM@aBb$=JOgX4>i4L z-()rE({8EfJD&u*6_85JKCJ($a$r&09%+St@Z5U+i3R>aoWd{dFWoKH{$9gE!h6~!x*zsvOmxpYa2U7+W;IV1M_jK`s_)yVs%oNPof z?PzQ|%v1r>>ke9+nZD)gG>Z({s~isfj)E*{t$p9&9JvQuz?=smJk({T%X$Nk^#)or zr8ezjQitkK{_yy;DGYi&ooX9?VyV%m?M1T`l_M@__G1T=pP1v1P_&ta)J*TW9_pIz z{%(d*TP(Tz%gs^(|JLk)n9e_6-_5w7qW<}locqp!;5xL>Fxic)H{66vfg(hB9gz)x z)JWcifd0~i{sY*83qIqdGHzEmG_V5?bx3|*_&s*Q&_18&=97Z*X8Snveh$JU*7>XH zzyrbak8F4+rOcEoaov$&>DbS#C1`{?VBdF1qQjCdR@@hUs0Es*G%M=i`ChtU&v zaa|$dK*zq=jl2T)pj}~IFTw?Dz3U1k!G%y(C@m&oMp*gv*8HFdYl6#&I$qoJ*IOEy z56e%;EHWCEXWS#I70Y@~@?P|B<;s(S!=6mMTehovxUu_?=a0moTSm%rQm}GDH88=6lct_|(3`)qWHLoL5MX@YN z9B?JRK_}J`|6cF4XOH+Aob2zss4nI--&q@h;@`yur4vi4_^ z)>;)_{G%zhS8z5B!*%%*!R6!_AI^N?b&yv5(JZaK4I9fjFRg#C8tV{QcT|_x(N--9 z5Kz@&h6L2%9)4ukDXGI%7eMsLwPegCL2vgHvquB7v?F`lD`v~F63cxOdN8ep@StF@ zpo>D)jD8b0=xI%Iv6`!H@m{QOAw>drGx%yU$cA! zy)f?|a9^_*2WLbRe?nO(w7!FbA~gSr;4@cNf*wnVv7IDbG-a$TvbX57ntf1O=>Ge` ziDw5Il&2b$!&apMU$I2A(hZRlZHmW8<+wYax1-Hm4tHy!(_e}UeD`tunUg8$8A;n13`Z%VIHmT0XAP@VBG-Dr6rp_i%Z6QDD;gA^GEALDA zPW+kaD+#s@ho1&hz0@2=%pV>$(a~l&U9Zq5EAA?u{A~AY?8|&p{LR?%rp2V0mc0^e zd*cu8s;cm)X=nZxlSC@vlWWpU7H>VfT2&FWe7R@Wtf;5`?rHGj$Ju^ZY6z6(URH|a z_+F@#o<;jCxf*^Y{I92T0x-MCIeNfb$7T#e??S{a9wjvgz5c=cTCB5)mn->C1L33~ z-J~Gxq@W~&81fg}TCOD>ZkwzAIL<=s*0_u|k$7*`$)s20ACg{8rRD%#;9evGXL|8{v zcj=D8Yv_DODKUNY00xa)R3Kp8UQEzbA(4>|*YncQ+dlJRR@Mx_O)2>0b8jzJv1pH}7;uhkm-FD21EdF*iiMzJmzjL+>bA3H5h8 zuajQhi$nGAI!Gx#cb$;b`wmLF!5zgiL+P&5nt4y5es6O}iOH6|>n!G|f$na?JToTY z0&c=^LU2+ZLJac=z)^8}a`4JH!7E3(?E8|F{-I1wv61HAn@VLKbjVIMecx$N7>e7d z*vlmRWuE#Xff^X=^4hRn@2|$qWDUt6C+Fih{!up$3+q^`vICp^6$gq$X&F{PFF2h+*QK-no%&;=(df;F z>-d?+g*VXpfhMXUPW6Wg)@DncQpE7NzuQR64k^ z@)VX}nx!#wJBIg@o<0;GsZ#?XXAcnwudIU}8?4xoQAKPT3K;nvm%G+X(&+xVp$eRk zxU>+8$L;*CT`Ar}Xo)Bxt*_B01bO&17Wt8Fd)!WeS`AelB6A*G_*{}3+kEs#r%1iM z?1X|!8fns>;(zB{V7}^IjK37Ty6dnNncfBatVvSn47lhN3ZZEwfqVj?*R&TC-!qp; z+;ynStnWI}ADmEX0{rbSrX`B3tN8#zupXY9^bX-dQ1P<-Y64wrPT3xgNo^ z&r}OINd$u6rV!r=>idGwAS<7GU};|1&U_~_*>Rth)LoKy6tiyeyG~(G-d#tr?>>c5 z2AW|MNblePY&0zNY%%G;XfPkZ!Li+r268xv3dM$i&}v493hoBuHlltfG&Xv1Ya22+ zwg_vB$7f+}z{F>m(<5+rI*EYOt8fteZfc14WE%_?o8pAE_ESQzwscAo)*ej>-nKQY z)0wcP3mIPg2_p#TLPqS{|fcC z*66zGJSc)J?>&O-{}_fLEeEi`Ljn(f!<6cbpfpSXN@*bD`!tY>qeGa&?Bn|qV}5FT z=lcBl++BtG_;c*ezmVVXu<_PMB7(AE#ipJM4MYzEp<3vm-?y6TwJ<<2FjD;vCWsow z2F1V!!Q8C>i4VfR191sK|?~E8U2{T?lLyc7|Q15#5)S$ZxS-(RA z5`_6y|A-z$0xQk+;;bNUSoG?hI6xD35;EMN$9H@o{Gb&)n0pp7AcZ?xqdds$u1Bj3 z+P?DuLlyMlPD{H6h~RFFvpS&0yX1B;(XPwCy=#aL<)jDE)wk<``tLME7=u2+E)CWz z*nm>+tnb)?&|vX`UbuqzZjD1Z-hp5#1vPvJg5?l2^&JRy84;@N4kCwMz5}tq80p30J?hIO7K0gQC+cXt+V#h$~+DefRySZC86Bz0Gu|GB0J74*2f$q2Rc z0FlFwAwc46C?Gco^w7^9APkt$;w>Qe;2t1^#5_P{Q<4M06Cm8)yM$fXg9}oe|SE6aIq79&Em14ocJ^72(6ME zA_UWt5X$wBho5f&GaCSS@h|bIKS0EDgsF&(1K~n`nWDi^SWKAKp9wnxnY96gkpC~M zw9qkskQ6M&7)Zlp_y9v2Fh;4rm^MA2Je}stgryUs*d+RC^c-t zU=g^wMLK+82vjr>#0c|az;!kZ3e3#`#{cF~DAX_TK9AzQVd9zt&Q<}w{JjhuLV@u; zf}#Y07+^-Yg8(DE;kQJ{ZX^aICL9Ht?0uiJFDwm|&;VQFKuZ3dvuV%|LHD*Kggn%k z06Vk*pe*dF^ot1cVL#mfKC4d7+5}m4p~Y-gSG=H0&{5e7JQrp>8Qnr z-UNdfVMOK-fEWt>hll|+3%Os6KDWsC6n0+|MZ*A2`1iM*x5pgdT!{?z z4g*oZ)TG~nj@f^K%V8j5SdNHwZ0aKcbJGfZ|NDY?p5LdO|CWH@3{(niJK(E6=C`;(Q;>Oyb0ct?$Ht=Qn%azAP_fi-T?IKL*r-=JG9f<(qkz4#9mF>kO z&>~=DuwZdT0^m-`EeJJ?1hK-1(YHj-GJr?{;lg?Vc~yo4Mg2$J+AWw_{tpPHjsg+E zLi^nyz?}+6Lo|FiIQqXlGpYi(X`!xBAlMEIjfetNbk+hycGmyhLpsFfl+A%K-yYlk zUg=v&(f14eKS$61GaWh2knCn2*scXzuZ`%UChLGNRzS4=UPBDfj_CU}r1s~c2^(Oj z2fploIj-FXsH1~;wqgD|v;Ur7|2G#te!AtpEuy!FS)_kAv-TKZy!Guc^d{y$T!CeQ zeusdyF2JhTUsg9dpxLpYN4J%f2x=D#!h;RP$32q%4B!g~`2WsaPU!nskOYj$wO0)N z_7Is5FbVyo)CCHP1HFJvuUy=%J3V(sfLi+yHhqqcD;&2~O9=?--=Wg)gL21%XrYI3 zAX*q}rq)c6CBUiyunPQTg=FBC^{yN%TSy@V186hwW%`S2W)PA+^a$D*f1eK{@qj}) zLjaKj$_zYhz>IJ<(NE(8Mo<7FjDLxTjsTn#(CUc$gM>E(5MLd=B?1+m5P~y?1pO3$ zpWv&v;FmF&1W?9tp)3jaR>czlq;VX`Lh{>+i~|k%2T8w0AQMpBL=XdX1)#!W`|mTr z|Hjq?ij#OBTkS+ZRBuhK9S}kMF;R^k3n@f!lx93}a=1 zawOd=xINIpgQnxBX`miSAT(HbPT%1WngJX6?P{a?FI{uOtoXdXz?goIH^)KCDpvq7X>~~#2qoIIPv@5sL z&^DkCORdFQ;^Nw!$~6ioP0Iaf|MPSMsQkNZJ^Tt&0X*=~!&Jm111dDX!HA!LK8(0@ zOSIpF5iwKl_ZZF;fY|XJAi~NNv@#Eb3N13clOTL#mEx|4%7SClfh) z2rz?z76--x{4$UKeDeIB zLaQ=CVlcOkG67TO=y&qsgn+zQ)_u9q&boy#{tKdd55k0g%mR_YM8|LOYs|m#yHm~6 z_W(qJ{~w45s)P@`Az{wE4>9uL)UyV_AqBv-r~h&6HpJ)z{}G~0%D%5CQIi~7O#s{N zs+9hVofgWS4N`}>6P69w6es$RI2{yB1jIxx>)vLAQ75r6FiTRvTN{nPlsq8$TL>4b z9(=zzQgQ&L3uJ%eNYLK^8D^9`7r>b*|AW&)-E!|mqi!L7>i>dvazO+zDNr5&UDNyr zB7$-(htd{-sG!Ap_X~dfmimhIj*5|g|9mT)4^RU*?x^oMK*ax^ zU{h})E$%yL8W4b`(bs9oPic5?aNh;t;F$l41C;-c^+~~f2D~l+6u8UWQIljqB>(De zzJ&(l?;w#h5COEb=zhayIZfsY24*S>c)WP=mjQ0&TYgrkRpGraNfo5Ov;a0!l>gn^ zDOB%RR|`S3uxwT)mM$3t7FYrBJoR@rk3ngQ?z7pb2=Ho42f9`SqJd@>fgZv{|9#o; zzelB9=xWjZF1$sJyygNtLEsSoul_V+Xm&A>NsY!JJXio=N++B(_~n3f8UuX#d#BKY yzAwH%F{KVV%(nyimW27g_3zs5PAQ2!2!}{X?g79A99e)rvOqme0#>>2>)%R z8Na(jOR~PEn9F)_o9sf6Vu4+^K#_c;)4^#PMl~Q$(Nt>A2#@z2}}&k9JOU)@(3qzg zr4yFzf4AjG?}y+e`H>_wYnx|uZ-X$?TCXjgH)&hMSbmoJbIJrB#~{&%V%r^>LaSE#!PqPcx%m zA|@H!@5EkFY>mTguDYn}Nx&?r`iN(97}((QY>TliE`p{e~1; zA)SV-)HwDlQfBDPike_|1Z_)40nhs022^zO%Z+D1GdFD41!OZpG?Ey$QZiZejgH#UTIPc?AC!Tf(dZ*8=G`0j!m+&TQc;LsIqeLKAV z1~uXP!eyRjX0HTpFxj8a8lw`L6m}%ogpye5xU{&xJohO>7Ai7ub1uU zuyXDkP~Y$+NF9e0hE4bi{0%4C^GF)ToB91);BQGB-Hw*dS<^7ytQ*$CWA#x2)kIz4 zX|VlGCQ$~Jez)3aBc+sP4{L5+Z0+2o%C$nkw8M>m0$6K%{p01W_M9HKeF^59yp4ei z<1<8NshP{TdF!`fJ@Su!7lz#`Z%g^e2(BycLPf5$F15a%#uH^zBhavsT|)%V;d zlu6(sO(~B)qCgtv*QqwoG~1<|Zurq|u@ZjOQr_ka-yXk;y84n9C^HJx^b5ZYGXaB3 zPiw#adW{Rx>_b-a#t20u6ViRkpS~=ZBF$t!Y$!YMsekj;m&-S4H(5=)9?|j|B6;qz zZ32aQ2@g~|+BdN4eImi%@YiUHqU3(a=gU9RC1TIsSLmro`{C2CR+J={D>wN;AVsq$ zC?>3WP+Lml$H&2T?o2J!mj>AGGQg;TW3V-_z51S{&OG6ZPVLJkFN!J5Cf|G2I_R$Y zh@E0HymbhnC_4gyXxTcXXI?&$#nbFWa((aBfV_JNi(>nR9OGpn`B8Y%pufI^7LkY_gB+{eyS|mx*Op=u`&8CsVpo`ma#0{?tMmsUq4z_vS6CUTcBMAgR@!6 zAoh0Jy7HsysQu%&(wHb-+%0+Iot-(|yJ>D}_O0gJkYAbm z$$|NI+T9nz^9hyCn0{2>SRN^7AG@IowNqu2b_7k*qFy+@etB+-D#4Zh=J#qJ{h~(I zk43?@oNOfHTHhbPRSXP>-aIeO7o-J0AUK&%`~40_V_{N5230O2{SwK$c(qSa%X`kG zSf^L-VBn2Tp`&~c-)f0zw7SJ)fSaI?NI4CqB27v1hL96$R5qE>B->Ac>eG+(lQ%xf z#KHpphz2>75{gF@4egzy2X4|0nr?atMIYv51Ij*b7dLpEYGaB6SRlhJb|>HmcQRqS7I@Zk%KBxMa2R7jSlyl9#&r zf`*Kwtv}^skXv&^-VgL)ISmc&)Or;ix#np)c^aw_n;9NktZlBAuU0NrGGt+)d{ict z&ktx97Y$P7HXWpES2$W+qlOp|o}{2tA>a`yhEsiG|Am}v`(kDeBx8`|Za>fFY%k64 zx;D5rv*DK7ZLMF(2~8AT)dI%~8<$t6p*@z-lGAgZZXiCAQlESt^pwNF+EleF=xtR~ z=xH?pt(M$YXaNgCnYUVN|SqlMnv zMNq9SAWi8d$-~YMcBYFJFx=Wg@ln-}rWF&#BIEC2!f@>z4feT@%* w_Syrl7>+lX~!wl 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 + + + + + + diff --git a/weaver/src/org/aspectj/weaver/AjAttribute.java b/weaver/src/org/aspectj/weaver/AjAttribute.java index e3a4c2457..56e8a94ad 100644 --- a/weaver/src/org/aspectj/weaver/AjAttribute.java +++ b/weaver/src/org/aspectj/weaver/AjAttribute.java @@ -24,6 +24,7 @@ import org.aspectj.bridge.MessageUtil; import org.aspectj.bridge.Version; import org.aspectj.util.FileUtil; import org.aspectj.weaver.patterns.Declare; +import org.aspectj.weaver.patterns.IScope; import org.aspectj.weaver.patterns.PerClause; import org.aspectj.weaver.patterns.Pointcut; @@ -559,6 +560,7 @@ public abstract class AjAttribute { return AttributeName; } private PerClause perClause; + private IScope resolutionScope; public Aspect(PerClause perClause) { this.perClause = perClause; @@ -568,10 +570,19 @@ public abstract class AjAttribute { //XXXperClause.concretize(inAspect); return perClause; } + + public PerClause reifyFromAtAspectJ(ResolvedType inAspect) { + perClause.resolve(resolutionScope); + return perClause; + } public void write(DataOutputStream s) throws IOException { perClause.write(s); } + + public void setResolutionScope(IScope binding) { + this.resolutionScope = binding; + } } public static class PrivilegedAttribute extends AjAttribute { diff --git a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java index a488376a2..e07f44c42 100644 --- a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java +++ b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java @@ -338,6 +338,7 @@ public class AtAjAttributes { } struct.ajAttributes.addAll(fstruct.ajAttributes); } + return struct.ajAttributes; } @@ -462,7 +463,8 @@ public class AtAjAttributes { // Note: field annotation are for ITD and DEOW - processed at class level directly return Collections.EMPTY_LIST; } - + + /** * Read @Aspect * @@ -507,7 +509,8 @@ public class AtAjAttributes { perClause.setLocation(struct.context, struct.context.getOffset(), struct.context.getOffset()+1);//FIXME AVASM // FIXME asc see related comment way about about the version... struct.ajAttributes.add(new AjAttribute.WeaverVersionInfo()); - struct.ajAttributes.add(new AjAttribute.Aspect(perClause)); + AjAttribute.Aspect aspectAttribute = new AjAttribute.Aspect(perClause); + struct.ajAttributes.add(aspectAttribute); FormalBinding[] bindings = new org.aspectj.weaver.patterns.FormalBinding[0]; final IScope binding; binding = new BindingScope( @@ -515,7 +518,14 @@ public class AtAjAttributes { struct.context, bindings ); - perClause.resolve(binding); + +// // we can't resolve here since the perclause typically refers to pointcuts +// // defined in the aspect that we haven't told the BcelObjectType about yet. +// +// perClause.resolve(binding); + + // so we prepare to do it later... + aspectAttribute.setResolutionScope(binding); return true; } } @@ -531,25 +541,25 @@ public class AtAjAttributes { */ private static PerClause parsePerClausePointcut(String perClauseString, AjAttributeStruct struct) { final String pointcutString; - Pointcut poincut = null; + Pointcut pointcut = null; TypePattern typePattern = null; final PerClause perClause; if (perClauseString.startsWith(PerClause.KindAnnotationPrefix.PERCFLOW.getName())) { pointcutString = PerClause.KindAnnotationPrefix.PERCFLOW.extractPointcut(perClauseString); - poincut = parsePointcut(pointcutString, struct, false); - perClause = new PerCflow(poincut, false); + pointcut = parsePointcut(pointcutString, struct, false); + perClause = new PerCflow(pointcut, false); } else if (perClauseString.startsWith(PerClause.KindAnnotationPrefix.PERCFLOWBELOW.getName())) { pointcutString = PerClause.KindAnnotationPrefix.PERCFLOWBELOW.extractPointcut(perClauseString); - poincut = parsePointcut(pointcutString, struct, false); - perClause = new PerCflow(poincut, true); + pointcut = parsePointcut(pointcutString, struct, false); + perClause = new PerCflow(pointcut, true); } else if (perClauseString.startsWith(PerClause.KindAnnotationPrefix.PERTARGET.getName())) { pointcutString = PerClause.KindAnnotationPrefix.PERTARGET.extractPointcut(perClauseString); - poincut = parsePointcut(pointcutString, struct, false); - perClause = new PerObject(poincut, false); + pointcut = parsePointcut(pointcutString, struct, false); + perClause = new PerObject(pointcut, false); } else if (perClauseString.startsWith(PerClause.KindAnnotationPrefix.PERTHIS.getName())) { pointcutString = PerClause.KindAnnotationPrefix.PERTHIS.extractPointcut(perClauseString); - poincut = parsePointcut(pointcutString, struct, false); - perClause = new PerObject(poincut, true); + pointcut = parsePointcut(pointcutString, struct, false); + perClause = new PerObject(pointcut, true); } else if (perClauseString.startsWith(PerClause.KindAnnotationPrefix.PERTYPEWITHIN.getName())) { pointcutString = PerClause.KindAnnotationPrefix.PERTYPEWITHIN.extractPointcut(perClauseString); typePattern = parseTypePattern(pointcutString, struct); @@ -564,7 +574,7 @@ public class AtAjAttributes { if (!PerClause.SINGLETON.equals(perClause.getKind()) && !PerClause.PERTYPEWITHIN.equals(perClause.getKind()) - && poincut == null) { + && pointcut == null) { // we could not parse the pointcut return null; } diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java index 59dcea110..8ee6ab638 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java @@ -273,20 +273,31 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate { List l = BcelAttributes.readAjAttributes(javaClass.getClassName(),javaClass.getAttributes(), getResolvedTypeX().getSourceContext(),getResolvedTypeX().getWorld().getMessageHandler(),AjAttribute.WeaverVersionInfo.UNKNOWN); processAttributes(l,pointcuts,false); l = AtAjAttributes.readAj5ClassAttributes(javaClass, getResolvedTypeX(), getResolvedTypeX().getSourceContext(), getResolvedTypeX().getWorld().getMessageHandler(),isCodeStyleAspect); - processAttributes(l,pointcuts,true); + AjAttribute.Aspect deferredAspectAttribute = processAttributes(l,pointcuts,true); this.pointcuts = (ResolvedPointcutDefinition[]) pointcuts.toArray(new ResolvedPointcutDefinition[pointcuts.size()]); + + if (deferredAspectAttribute != null) { + // we can finally process the aspect and its associated perclause... + perClause = deferredAspectAttribute.reifyFromAtAspectJ(this.getResolvedTypeX()); + } + } - private void processAttributes(List attributeList, List pointcuts, boolean fromAnnotations) { + private AjAttribute.Aspect processAttributes(List attributeList, List pointcuts, boolean fromAnnotations) { + AjAttribute.Aspect deferredAspectAttribute = null; for (Iterator iter = attributeList.iterator(); iter.hasNext();) { AjAttribute a = (AjAttribute) iter.next(); //System.err.println("unpacking: " + this + " and " + a); if (a instanceof AjAttribute.Aspect) { - perClause = ((AjAttribute.Aspect)a).reify(this.getResolvedTypeX()); - if (!fromAnnotations) isCodeStyleAspect = true; + if (fromAnnotations) { + deferredAspectAttribute = (AjAttribute.Aspect) a; + } else { + perClause = ((AjAttribute.Aspect)a).reify(this.getResolvedTypeX()); + isCodeStyleAspect = true; + } } else if (a instanceof AjAttribute.PointcutDeclarationAttribute) { pointcuts.add(((AjAttribute.PointcutDeclarationAttribute)a).reify()); } else if (a instanceof AjAttribute.WeaverState) { @@ -307,6 +318,7 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate { throw new BCException("bad attribute " + a); } } + return deferredAspectAttribute; } public PerClause getPerClause() { -- 2.39.5