aboutsummaryrefslogtreecommitdiffstats
path: root/weaver/src
diff options
context:
space:
mode:
authorAndy Clement <aclement@gopivotal.com>2015-03-23 12:54:54 -0700
committerAndy Clement <aclement@gopivotal.com>2015-03-23 12:54:54 -0700
commita1cfe944a602101d144c8efd7df217ab20e4b9ee (patch)
treeddb06c095990717713c90a2efb7cf0c0ab49f194 /weaver/src
parent3869f363bc6e473f4063faf2c296825283a21f1a (diff)
downloadaspectj-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.java27
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;
+ }
}
}
}