aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2008-06-19 18:12:43 +0000
committeraclement <aclement>2008-06-19 18:12:43 +0000
commit0e4a2c2bda107440aa76b9f42cbb00107146330f (patch)
tree2e3c4fcc85d73849f6248e0728579437126268bc
parent6aed5be0bd3a94dd1514bf85bf272fc14f9aa186 (diff)
downloadaspectj-0e4a2c2bda107440aa76b9f42cbb00107146330f.tar.gz
aspectj-0e4a2c2bda107440aa76b9f42cbb00107146330f.zip
231396: cache the member!
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/PerSingleton.java13
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);