From 93f189f42e6bcee82ce399dea45b9396a9ddbc2d Mon Sep 17 00:00:00 2001 From: sjfink Date: Mon, 19 Nov 2007 16:24:11 +0000 Subject: [PATCH] special CancelException support during tabulation git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@2058 f5eafffb-2e1d-0410-98e4-8ec43c5233c4 --- .../IFDS/TabulationCancelException.java | 35 +++++++++++++++++++ .../wala/dataflow/IFDS/TabulationSolver.java | 14 +++++--- .../wala/eclipse/util/CancelException.java | 6 +++- 3 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationCancelException.java diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationCancelException.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationCancelException.java new file mode 100644 index 000000000..de9b6d8ca --- /dev/null +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationCancelException.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package com.ibm.wala.dataflow.IFDS; + +import com.ibm.wala.dataflow.IFDS.TabulationSolver.Result; +import com.ibm.wala.eclipse.util.CancelException; + +/** + * A {@link CancelException} thrown during tabulation; holds a pointer to a partial {@link Result}. + * Use with care, this can hold on to a lot of memory. + * + * @author sjfink + */ +public class TabulationCancelException extends CancelException { + + private final Result result; + + protected TabulationCancelException(CancelException cause, Result r) { + super(cause); + this.result = r; + } + + public Result getResult() { + return result; + } + +} diff --git a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java index 4941415de..94281d851 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java +++ b/com.ibm.wala.core/src/com/ibm/wala/dataflow/IFDS/TabulationSolver.java @@ -209,10 +209,16 @@ public class TabulationSolver { */ public TabulationResult solve() throws CancelException { - initialize(); - forwardTabulateSLRPs(); - Result r = new Result(); - return r; + try { + initialize(); + forwardTabulateSLRPs(); + Result r = new Result(); + return r; + } catch (CancelException e) { + // store a partially-tabulated result in the thrown exception. + Result r = new Result(); + throw new TabulationCancelException(e, r); + } } /** diff --git a/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/CancelException.java b/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/CancelException.java index d45230b28..74e615ff0 100644 --- a/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/CancelException.java +++ b/com.ibm.wala.core/src/com/ibm/wala/eclipse/util/CancelException.java @@ -18,9 +18,13 @@ package com.ibm.wala.eclipse.util; */ public class CancelException extends Exception { - private CancelException(String msg) { + protected CancelException(String msg) { super(msg); } + + protected CancelException(Exception cause) { + super(cause); + } public static CancelException make(String msg) { return new CancelException(msg);