From 6bd3410d4867b93a0fe0b6d1cd4ff55558b9b42e Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 27 May 2015 14:09:18 +0200 Subject: [PATCH] groovy type dfa: start time measurement only for long analyses --- .../groovy/lang/psi/dataFlow/DFAEngine.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/dataFlow/DFAEngine.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/dataFlow/DFAEngine.java index 219503ee21d1..44516681c870 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/dataFlow/DFAEngine.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/dataFlow/DFAEngine.java @@ -78,15 +78,11 @@ public class DFAEngine { @Nullable private ArrayList performDFA(boolean timeout) { - long msLimit = Registry.intValue("ide.dfa.time.limit.online"); - WorkingTimeMeasurer measurer = new WorkingTimeMeasurer(msLimit * 1000 * 1000); + WorkingTimeMeasurer measurer = null; - ArrayList info = new ArrayList(myFlow.length); + ArrayList info = new ArrayList(Collections.nCopies(myFlow.length, myDfa.initial())); CallEnvironment env = new MyCallEnvironment(myFlow.length); - for (int i = 0; i < myFlow.length; i++) { - info.add(myDfa.initial()); - } - + boolean[] visited = new boolean[myFlow.length]; final boolean forward = myDfa.isForward(); @@ -103,7 +99,16 @@ public class DFAEngine { while (!workList.isEmpty()) { count++; - if (timeout && count % 512 == 0 && measurer.isTimeOver()) return null; + if (timeout && count % 512 == 0) { + if (measurer == null) { + long msLimit = Registry.intValue("ide.dfa.time.limit.online"); + + measurer = new WorkingTimeMeasurer(msLimit * 1000 * 1000); + } + else if (measurer.isTimeOver()) { + return null; + } + } ProgressManager.checkCanceled(); final Instruction curr = workList.remove();