diff options
Diffstat (limited to 'src/org/jetbrains/java/decompiler/code/ExceptionTable.java')
-rw-r--r-- | src/org/jetbrains/java/decompiler/code/ExceptionTable.java | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/org/jetbrains/java/decompiler/code/ExceptionTable.java b/src/org/jetbrains/java/decompiler/code/ExceptionTable.java new file mode 100644 index 0000000..da8ec22 --- /dev/null +++ b/src/org/jetbrains/java/decompiler/code/ExceptionTable.java @@ -0,0 +1,57 @@ +/* + * Fernflower - The Analytical Java Decompiler + * http://www.reversed-java.com + * + * (C) 2008 - 2010, Stiver + * + * This software is NEITHER public domain NOR free software + * as per GNU License. See license.txt for more details. + * + * This software is distributed WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. + */ + +package org.jetbrains.java.decompiler.code; + +import java.util.ArrayList; +import java.util.List; + +import org.jetbrains.java.decompiler.code.interpreter.Util; +import org.jetbrains.java.decompiler.struct.StructContext; + +public class ExceptionTable { + + private List<ExceptionHandler> handlers = new ArrayList<ExceptionHandler>(); + + public ExceptionTable() {} + + public ExceptionTable(List<ExceptionHandler> handlers) { + this.handlers = handlers; + } + + + public ExceptionHandler getHandlerByClass(StructContext context, int line, String valclass, boolean withany) { + + ExceptionHandler res = null; // no handler found + + for(ExceptionHandler handler : handlers) { + if(handler.from<=line && handler.to>line) { + String name = handler.exceptionClass; + + if((withany && name==null) || // any -> finally or synchronized handler + (name!=null && Util.instanceOf(context, valclass, name))) { + res = handler; + break; + } + } + } + + return res; + } + + public List<ExceptionHandler> getHandlers() { + return handlers; + } + +} |