summaryrefslogtreecommitdiffstats
path: root/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java')
-rw-r--r--src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java128
1 files changed, 128 insertions, 0 deletions
diff --git a/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java b/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
new file mode 100644
index 0000000..53f4a77
--- /dev/null
+++ b/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
@@ -0,0 +1,128 @@
+/*
+ * 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.cfg;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.jetbrains.java.decompiler.main.DecompilerContext;
+
+public class ExceptionRangeCFG {
+
+ private List<BasicBlock> protectedRange = new ArrayList<BasicBlock>(); // FIXME: replace with set
+
+ private BasicBlock handler;
+
+ private List<String> exceptionTypes;
+
+ public ExceptionRangeCFG(List<BasicBlock> protectedRange, BasicBlock handler, List<String> exceptionType) {
+ this.protectedRange = protectedRange;
+ this.handler = handler;
+
+ if(exceptionType != null) {
+ this.exceptionTypes = new ArrayList<String>(exceptionType);
+ }
+ }
+
+ public boolean isCircular() {
+ return protectedRange.contains(handler);
+ }
+
+ public String toString() {
+
+ String new_line_separator = DecompilerContext.getNewLineSeparator();
+
+ StringBuffer buf = new StringBuffer();
+
+ buf.append("exceptionType:");
+ for(String exception_type : exceptionTypes) {
+ buf.append(" "+exception_type);
+ }
+ buf.append(new_line_separator);
+
+ buf.append("handler: "+handler.id+new_line_separator);
+ buf.append("range: ");
+ for(int i=0;i<protectedRange.size();i++) {
+ buf.append(protectedRange.get(i).id+" ");
+ }
+ buf.append(new_line_separator);
+
+ return buf.toString();
+ }
+
+ public BasicBlock getHandler() {
+ return handler;
+ }
+
+ public void setHandler(BasicBlock handler) {
+ this.handler = handler;
+ }
+
+ public List<BasicBlock> getProtectedRange() {
+ return protectedRange;
+ }
+
+ public void setProtectedRange(List<BasicBlock> protectedRange) {
+ this.protectedRange = protectedRange;
+ }
+
+ public List<String> getExceptionTypes() {
+ return this.exceptionTypes;
+ }
+
+ public void addExceptionType(String exceptionType) {
+
+ if(this.exceptionTypes == null) {
+ return;
+ }
+
+ if(exceptionType == null) {
+ this.exceptionTypes = null;
+ } else {
+ this.exceptionTypes.add(exceptionType);
+ }
+ }
+
+ public String getUniqueExceptionsString() {
+
+ if(exceptionTypes == null) {
+ return null;
+ }
+
+ Set<String> setExceptionStrings = new HashSet<String>();
+
+ for(String exceptionType : exceptionTypes) { // normalize order
+ setExceptionStrings.add(exceptionType);
+ }
+
+ String ret = "";
+ for(String exception : setExceptionStrings) {
+ if(!ret.isEmpty()) {
+ ret += ":";
+ }
+ ret += exception;
+ }
+
+ return ret;
+ }
+
+
+// public void setExceptionType(String exceptionType) {
+// this.exceptionType = exceptionType;
+// }
+
+}