diff options
author | aclement <aclement> | 2008-06-19 18:12:43 +0000 |
---|---|---|
committer | aclement <aclement> | 2008-06-19 18:12:43 +0000 |
commit | 0e4a2c2bda107440aa76b9f42cbb00107146330f (patch) | |
tree | 2e3c4fcc85d73849f6248e0728579437126268bc /weaver | |
parent | 6aed5be0bd3a94dd1514bf85bf272fc14f9aa186 (diff) | |
download | aspectj-0e4a2c2bda107440aa76b9f42cbb00107146330f.tar.gz aspectj-0e4a2c2bda107440aa76b9f42cbb00107146330f.zip |
231396: cache the member!
Diffstat (limited to 'weaver')
-rw-r--r-- | weaver/src/org/aspectj/weaver/patterns/PerSingleton.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/PerSingleton.java b/weaver/src/org/aspectj/weaver/patterns/PerSingleton.java index f2d6d39c6..065a82777 100644 --- a/weaver/src/org/aspectj/weaver/patterns/PerSingleton.java +++ b/weaver/src/org/aspectj/weaver/patterns/PerSingleton.java @@ -20,6 +20,7 @@ import java.util.Map; import org.aspectj.util.FuzzyBoolean; import org.aspectj.weaver.AjcMemberMaker; import org.aspectj.weaver.ISourceContext; +import org.aspectj.weaver.ResolvedMember; import org.aspectj.weaver.ResolvedType; import org.aspectj.weaver.Shadow; import org.aspectj.weaver.VersionedDataInputStream; @@ -30,6 +31,9 @@ import org.aspectj.weaver.ast.Test; import org.aspectj.weaver.bcel.BcelAccessForInlineMunger; public class PerSingleton extends PerClause { + + private ResolvedMember perSingletonAspectOfMethod; + public PerSingleton() { } @@ -57,6 +61,7 @@ public class PerSingleton extends PerClause { return this; } + public Test findResidueInternal(Shadow shadow, ExposedState state) { // TODO: the commented code is for slow Aspects.aspectOf() style - keep or remove // @@ -71,9 +76,11 @@ public class PerSingleton extends PerClause { // // aspect before we are bound // return Literal.TRUE; // if (!Ajc5MemberMaker.isSlowAspect(inAspect)) { - Expr myInstance = - Expr.makeCallExpr(AjcMemberMaker.perSingletonAspectOfMethod(inAspect), - Expr.NONE, inAspect); + if (perSingletonAspectOfMethod==null) { + // Build this just once + perSingletonAspectOfMethod = AjcMemberMaker.perSingletonAspectOfMethod(inAspect); + } + Expr myInstance = Expr.makeCallExpr(perSingletonAspectOfMethod, Expr.NONE, inAspect); state.setAspectInstance(myInstance); |