From fd87bd57bd3c0b1533cc2803f06e7569b2f363b6 Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Thu, 7 Jan 2016 12:56:05 -0800 Subject: [PATCH] Fix 470658: Corrupted Local Variable Table --- weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java index 97e73832b..869ed5819 100644 --- a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java +++ b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java @@ -1324,6 +1324,16 @@ public final class LazyMethodGen implements Traceable { } } } + if (!this.enclosingClass.getWorld().generateNewLvts) { + // Here the generateNewLvts option is used to control "Do not damage unusually positioned local + // variables that represent method parameters". Strictly speaking local variables that represent + // method parameters effectively have a bytecode range from 0..end_of_method - however some + // tools generate bytecode that specifies a compressed range. The code below would normally + // extend the parameter local variables to cover the full method but by setting paramSlots to -1 + // here we cause the code below to avoid modifying any local vars that represent method + // parameters. + paramSlots = -1; + } Map> duplicatedLocalMap = new HashMap>(); for (LocalVariableTag tag : localVariables.keySet()) { -- 2.39.5