diff --git a/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/SourceInterpreter.java b/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/SourceInterpreter.java index f55c19f3d4a2af6729928edf12d5278d2a72e29f..3aeb01b7483c1466a4d56211e29f7057dfe4df06 100644 --- a/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/SourceInterpreter.java +++ b/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/SourceInterpreter.java @@ -200,7 +200,7 @@ public class SourceInterpreter extends Interpreter implements Opcod return new SourceValue(Math.min(value1.size, value2.size), setUnion); } } - if (value1.size != value2.size || !value1.insns.containsAll(value2.insns)) { + if (value1.size != value2.size || !containsAll(value1.insns, value2.insns)) { HashSet setUnion = new HashSet(); setUnion.addAll(value1.insns); setUnion.addAll(value2.insns); @@ -208,4 +208,11 @@ public class SourceInterpreter extends Interpreter implements Opcod } return value1; } + + private static boolean containsAll(final Set self, final Set other) { + if (self.size() < other.size()) { + return false; + } + return self.containsAll(other); + } }