From c2573b141355214954801ceeafdcedf6fc2008a1 Mon Sep 17 00:00:00 2001 From: AnakinSklavenwalker Date: Tue, 2 Jun 2020 17:50:14 +0200 Subject: [PATCH] added and integrated BoomerangAbortedException BoomerangTimeoutException extends the new Exception. Replaced in catch clauses and added code that checks for timeout as well as custom behavior. --- .../boomerang/BoomerangAbortedException.java | 23 +++++++++ .../boomerang/BoomerangTimeoutException.java | 14 +++--- .../java/boomerang/WeightedBoomerang.java | 49 +++++++++++-------- .../src/main/java/ideal/IDEALSeedSolver.java | 2 +- 4 files changed, 61 insertions(+), 27 deletions(-) create mode 100644 boomerangPDS/src/main/java/boomerang/BoomerangAbortedException.java diff --git a/boomerangPDS/src/main/java/boomerang/BoomerangAbortedException.java b/boomerangPDS/src/main/java/boomerang/BoomerangAbortedException.java new file mode 100644 index 00000000..15eb1a5a --- /dev/null +++ b/boomerangPDS/src/main/java/boomerang/BoomerangAbortedException.java @@ -0,0 +1,23 @@ +package boomerang; + +import boomerang.stats.IBoomerangStats; + +public class BoomerangAbortedException extends RuntimeException { + + private static final long serialVersionUID = 3767732949845559629L; + + private final IBoomerangStats stats; + + public BoomerangAbortedException(IBoomerangStats stats) { + this.stats = stats; + } + + public IBoomerangStats getStats() { + return stats; + } + + @Override + public String toString() { + return "Boomerang aborted " + getStats(); + } +} diff --git a/boomerangPDS/src/main/java/boomerang/BoomerangTimeoutException.java b/boomerangPDS/src/main/java/boomerang/BoomerangTimeoutException.java index c18ff5dd..9c0e77a2 100644 --- a/boomerangPDS/src/main/java/boomerang/BoomerangTimeoutException.java +++ b/boomerangPDS/src/main/java/boomerang/BoomerangTimeoutException.java @@ -13,18 +13,20 @@ import boomerang.stats.IBoomerangStats; -public class BoomerangTimeoutException extends RuntimeException { +public class BoomerangTimeoutException extends BoomerangAbortedException { - private IBoomerangStats stats; - private long elapsed; + private static final long serialVersionUID = 3767732949845559629L; - BoomerangTimeoutException(long elapsed, IBoomerangStats stats) { + private final long elapsed; + + public BoomerangTimeoutException(long elapsed, IBoomerangStats stats) { + super(stats); this.elapsed = elapsed; - this.stats = stats; } @Override public String toString() { - return "Boomerang Timeout after " + elapsed + "ms\n " + stats; + return "Boomerang Timeout after " + elapsed + "ms\n " + getStats(); } } + diff --git a/boomerangPDS/src/main/java/boomerang/WeightedBoomerang.java b/boomerangPDS/src/main/java/boomerang/WeightedBoomerang.java index 277c5558..fe00012d 100644 --- a/boomerangPDS/src/main/java/boomerang/WeightedBoomerang.java +++ b/boomerangPDS/src/main/java/boomerang/WeightedBoomerang.java @@ -172,7 +172,7 @@ public void run() { @Override public void onWeightAdded(Transition> t, W w, WeightedPAutomaton, W> aut) { - checkTimeout(); + throwOnEarlyTermination(); } }); solver.getFieldAutomaton().registerListener(new WPAUpdateListener>, W>() { @@ -180,7 +180,7 @@ public void onWeightAdded(Transition> t, W w, @Override public void onWeightAdded(Transition>> t, W w, WeightedPAutomaton>, W> aut) { - checkTimeout(); + throwOnEarlyTermination(); } }); SeedFactory seedFactory = getSeedFactory(); @@ -204,6 +204,15 @@ private void registerUnbalancedPopListener(Node 0) { long elapsed = analysisWatch.elapsed(TimeUnit.MILLISECONDS); @@ -301,7 +310,7 @@ protected WeightFunctions getCallWeights() { @Override protected void onManyStateListenerRegister() { - checkTimeout(); + throwOnEarlyTermination(); } }; @@ -423,7 +432,7 @@ public void addCallRule(Rule, W> rule) { @Override protected void onManyStateListenerRegister() { - checkTimeout(); + throwOnEarlyTermination(); } }; @@ -606,7 +615,7 @@ protected void forwardHandleFieldWrite(final Node node, final Fi public BackwardBoomerangResults backwardSolveUnderScope(BackwardQuery backwardQuery, ForwardQuery forwardQuery, Node node) { scopedQueries.add(backwardQuery); - boolean timedout = false; + boolean aborted = false; try { backwardSolve(backwardQuery); final AbstractBoomerangSolver bwSolver = queryToSolvers.getOrCreate(backwardQuery); @@ -634,12 +643,12 @@ public void anyContext(Statement end) { } } }); - } catch (BoomerangTimeoutException e) { - timedout = true; + } catch (BoomerangAbortedException e) { + aborted = true; cleanup(); } - return new BackwardBoomerangResults(backwardQuery, timedout, this.queryToSolvers, getStats(), analysisWatch); + return new BackwardBoomerangResults(backwardQuery, aborted, this.queryToSolvers, getStats(), analysisWatch); } private void cleanup() { @@ -653,7 +662,7 @@ private void cleanup() { public BackwardBoomerangResults backwardSolveUnderScope(BackwardQuery backwardQuery, IContextRequester requester) { scopedQueries.add(backwardQuery); - boolean timedout = false; + boolean aborted = false; try { if (analysisWatch.isRunning()) { analysisWatch.stop(); @@ -670,12 +679,12 @@ public BackwardBoomerangResults backwardSolveUnderScope(BackwardQuery backwar if (analysisWatch.isRunning()) { analysisWatch.stop(); } - } catch (BoomerangTimeoutException e) { - timedout = true; + } catch (BoomerangAbortedException e) { + aborted = true; cleanup(); } - return new BackwardBoomerangResults(backwardQuery, timedout, this.queryToSolvers, getStats(), analysisWatch); + return new BackwardBoomerangResults(backwardQuery, aborted, this.queryToSolvers, getStats(), analysisWatch); } private final class UnbalancedPopCallerListener implements CallerListener { @@ -1077,13 +1086,13 @@ public ForwardBoomerangResults solve(ForwardQuery query) { if (!analysisWatch.isRunning()) { analysisWatch.start(); } - boolean timedout = false; + boolean aborted = false; try { logger.debug("Starting forward analysis of: {}", query); forwardSolve(query); logger.debug("Terminated forward analysis of: {}", query); - } catch (BoomerangTimeoutException e) { - timedout = true; + } catch (BoomerangAbortedException e) { + aborted = true; cleanup(); logger.debug("Timeout of query: {}", query); } @@ -1091,7 +1100,7 @@ public ForwardBoomerangResults solve(ForwardQuery query) { if (analysisWatch.isRunning()) { analysisWatch.stop(); } - return new ForwardBoomerangResults(query, icfg(), timedout, this.queryToSolvers, getStats(), analysisWatch); + return new ForwardBoomerangResults(query, icfg(), aborted, this.queryToSolvers, getStats(), analysisWatch); } public BackwardBoomerangResults solve(BackwardQuery query) { @@ -1103,13 +1112,13 @@ public BackwardBoomerangResults solve(BackwardQuery query, boolean timing) { if (timing && !analysisWatch.isRunning()) { analysisWatch.start(); } - boolean timedout = false; + boolean aborted = false; try { logger.debug("Starting backward analysis of: {}", query); backwardSolve(query); logger.debug("Terminated backward analysis of: {}", query); - } catch (BoomerangTimeoutException e) { - timedout = true; + } catch (BoomerangAbortedException e) { + aborted = true; cleanup(); logger.debug("Timeout of query: {}", query); } @@ -1117,7 +1126,7 @@ public BackwardBoomerangResults solve(BackwardQuery query, boolean timing) { analysisWatch.stop(); } - return new BackwardBoomerangResults(query, timedout, this.queryToSolvers, getStats(), analysisWatch); + return new BackwardBoomerangResults(query, aborted, this.queryToSolvers, getStats(), analysisWatch); } protected void backwardSolve(BackwardQuery query) { diff --git a/idealPDS/src/main/java/ideal/IDEALSeedSolver.java b/idealPDS/src/main/java/ideal/IDEALSeedSolver.java index fe937541..1c3ac953 100644 --- a/idealPDS/src/main/java/ideal/IDEALSeedSolver.java +++ b/idealPDS/src/main/java/ideal/IDEALSeedSolver.java @@ -237,7 +237,7 @@ public void anyContext(Statement end) { @Override public void stackElement(Statement callSite) { - boomerang.checkTimeout(); + boomerang.throwOnEarlyTermination(); addAffectedPotentialStrongUpdate(strongUpdateNode, callSite); for (ForwardQuery e : queryAllocationSites) { AbstractBoomerangSolver solver = boomerang.getSolvers().get(e);