aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java b/weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java
index b55d00545..f46980be5 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelRenderer.java
@@ -140,11 +140,21 @@ public final class BcelRenderer implements ITestVisitor, IExprVisitor {
// in Java:
// foo.class.isAnnotationPresent(annotationClass);
// in bytecode:
+
+ // ifnull? skip to the end if it is as getClass() will fail (see pr 257833)
+
// load var onto the stack (done for us later)
// invokevirtual java/lang/Object.getClass:()Ljava/lang/Class
// ldc_w annotationClass
// invokevirtual java/lang/Class.isAnnotationPresent:(Ljava/lang/Class;)Z
InstructionList il = new InstructionList();
+
+ // If it is null jump past the advice call
+ il.append(fact.createBranchInstruction(Constants.IFNULL, fk));
+
+ // Load up the var again
+ il.append(((BcelVar) hasAnnotation.getVar()).createLoad(fact));
+
Member getClass = MemberImpl.method(UnresolvedType.OBJECT, 0, UnresolvedType.JAVA_LANG_CLASS, "getClass",
UnresolvedType.NONE);
il.append(Utility.createInvoke(fact, world, getClass));