diff options
author | Andy Clement <aclement@gopivotal.com> | 2015-03-23 12:54:54 -0700 |
---|---|---|
committer | Andy Clement <aclement@gopivotal.com> | 2015-03-23 12:54:54 -0700 |
commit | a1cfe944a602101d144c8efd7df217ab20e4b9ee (patch) | |
tree | ddb06c095990717713c90a2efb7cf0c0ab49f194 /weaver/src | |
parent | 3869f363bc6e473f4063faf2c296825283a21f1a (diff) | |
download | aspectj-a1cfe944a602101d144c8efd7df217ab20e4b9ee.tar.gz aspectj-a1cfe944a602101d144c8efd7df217ab20e4b9ee.zip |
462821: invokedynamic detection in hierarchy of aspects
Diffstat (limited to 'weaver/src')
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java index 668a0b2dc..64d6a1054 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelAdvice.java @@ -241,12 +241,27 @@ class BcelAdvice extends Advice { if (boType.javaClass.getMajor() == Constants.MAJOR_1_8) { if (containsInvokedynamic == 0) { containsInvokedynamic = 1; - LazyMethodGen lmg = boType.getLazyClassGen().getLazyMethodGen(this.signature); - InstructionList ilist = lmg.getBody(); - for (InstructionHandle src = ilist.getStart(); src != null; src = src.getNext()) { - if (src.getInstruction().opcode == Constants.INVOKEDYNAMIC) { - containsInvokedynamic = 2; - break; + LazyMethodGen lmg = boType.getLazyClassGen().getLazyMethodGen(this.signature.getName(), this.signature.getSignature(), true); + // Check Java8 supertypes + while (lmg == null) { + ResolvedType superType = boType.getSuperclass(); + if (superType == null) break; + ReferenceTypeDelegate rtd = ((ReferenceType)superType).getDelegate(); + if (rtd instanceof BcelObjectType) { + BcelObjectType bot = (BcelObjectType)rtd; + if (bot.javaClass.getMajor() < Constants.MAJOR_1_8) { + break; + } + lmg = bot.getLazyClassGen().getLazyMethodGen(this.signature.getName(), this.signature.getSignature(), true); + } + } + if (lmg != null) { + InstructionList ilist = lmg.getBody(); + for (InstructionHandle src = ilist.getStart(); src != null; src = src.getNext()) { + if (src.getInstruction().opcode == Constants.INVOKEDYNAMIC) { + containsInvokedynamic = 2; + break; + } } } } |