From 6fdfa74facd311318bc0527325dbbaf0f3c2bed2 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 1 Sep 2017 17:30:01 +0700 Subject: [PATCH] LiveVariablesAnalyzer#findLiveVars: clone or'ed BitSet as well We should ensure that runDFA lambda never returns an object which will be mutated afterwards as this object used as part of `processed` Set key (inside InstructionState). --- .../codeInspection/dataFlow/LiveVariablesAnalyzer.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java index 0c559889e31d..18f2f5f36fc0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java @@ -146,8 +146,9 @@ public class LiveVariablesAnalyzer { BitSet set = result.get(instruction); if (set != null) { set.or(liveVars); - return set; - } else { + return (BitSet)set.clone(); + } + else if (!liveVars.isEmpty()) { result.put((FinishElementInstruction)instruction, (BitSet)liveVars.clone()); } }