summaryrefslogtreecommitdiff
path: root/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java')
-rw-r--r--plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
new file mode 100644
index 000000000000..47e0e211424f
--- /dev/null
+++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ExceptionRangeCFG.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jetbrains.java.decompiler.code.cfg;
+
+import org.jetbrains.java.decompiler.main.DecompilerContext;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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();
+
+ StringBuilder buf = new StringBuilder();
+
+ buf.append("exceptionType:");
+ for (String exception_type : exceptionTypes) {
+ buf.append(" ").append(exception_type);
+ }
+ buf.append(new_line_separator);
+
+ buf.append("handler: ").append(handler.id).append(new_line_separator);
+ buf.append("range: ");
+ for (int i = 0; i < protectedRange.size(); i++) {
+ buf.append(protectedRange.get(i).id).append(" ");
+ }
+ 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;
+ // }
+}