From ad44ca69004ded42c5c6f314da8a2ac743fa1dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Fri, 18 Apr 2014 19:30:28 +0200 Subject: [PATCH] mark levels recursion as warning, not severe --- .../src/com/jpexs/decompiler/graph/Graph.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/graph/Graph.java b/trunk/src/com/jpexs/decompiler/graph/Graph.java index eab389b5d..b7746342b 100644 --- a/trunk/src/com/jpexs/decompiler/graph/Graph.java +++ b/trunk/src/com/jpexs/decompiler/graph/Graph.java @@ -46,6 +46,8 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.Stack; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -424,7 +426,7 @@ public class Graph { System.out.println(el); } System.out.println("");*/ - getPrecontinues(localData, null, heads.get(0), allParts, loops, null); + getPrecontinues(path,localData, null, heads.get(0), allParts, loops, null); /*System.err.println(""); for (Loop el : loops) { System.err.println(el); @@ -689,8 +691,8 @@ public class Graph { return loopItem; } - private void getPrecontinues(BaseLocalData localData, GraphPart parent, GraphPart part, List allParts, List loops, List stopPart) throws InterruptedException { - markLevels(localData, part, allParts, loops); + private void getPrecontinues(String path,BaseLocalData localData, GraphPart parent, GraphPart part, List allParts, List loops, List stopPart) throws InterruptedException { + markLevels(path,localData, part, allParts, loops); //Note: this also marks part as precontinue when there is if /* while(k<10){ @@ -741,19 +743,20 @@ public class Graph { clearLoops(loops);*/ } - private void markLevels(BaseLocalData localData, GraphPart part, List allParts, List loops) throws InterruptedException { + private void markLevels(String path, BaseLocalData localData, GraphPart part, List allParts, List loops) throws InterruptedException { clearLoops(loops); - markLevels(localData, part, allParts, loops, new ArrayList(), 1, new ArrayList(), 0); + markLevels(path,localData, part, allParts, loops, new ArrayList(), 1, new ArrayList(), 0); clearLoops(loops); } - private void markLevels(BaseLocalData localData, GraphPart part, List allParts, List loops, List stopPart, int level, List visited, int recursionLevel) throws InterruptedException { + private void markLevels(String path,BaseLocalData localData, GraphPart part, List allParts, List loops, List stopPart, int level, List visited, int recursionLevel) throws InterruptedException { boolean debugMode = false; if (stopPart == null) { stopPart = new ArrayList<>(); } if (recursionLevel > allParts.size() + 1) { - throw new TranslateException("markLevels max recursion level reached."); + Logger.getLogger(Graph.class.getName()).log(Level.WARNING, "{0} : markLevels max recursion level reached", path); + return; } if (debugMode) { @@ -815,13 +818,13 @@ public class Graph { stopParts2.add(stopPart.get(stopPart.size() - 1)); } if (next != nextParts.get(0)) { - markLevels(localData, nextParts.get(0), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); + markLevels(path,localData, nextParts.get(0), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); } if (next != nextParts.get(1)) { - markLevels(localData, nextParts.get(1), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); + markLevels(path,localData, nextParts.get(1), allParts, loops, next == null ? stopPart : stopParts2, level + 1, visited, recursionLevel + 1); } if (next != null) { - markLevels(localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path,localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } @@ -847,17 +850,17 @@ public class Graph { } } if (next != p) { - markLevels(localData, p, allParts, loops, stopPart2, level + 1, visited, recursionLevel + 1); + markLevels(path,localData, p, allParts, loops, stopPart2, level + 1, visited, recursionLevel + 1); vis.add(p); } } if (next != null) { - markLevels(localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path,localData, next, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } if (nextParts.size() == 1) { - markLevels(localData, nextParts.get(0), allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path,localData, nextParts.get(0), allParts, loops, stopPart, level, visited, recursionLevel + 1); } for (GraphPart t : part.throwParts) { @@ -873,14 +876,14 @@ public class Graph { stopPart2 = stopPart; } - markLevels(localData, t, allParts, loops, stopPart2, level, visited, recursionLevel + 1); + markLevels(path,localData, t, allParts, loops, stopPart2, level, visited, recursionLevel + 1); } } if (isLoop) { if (currentLoop.loopBreak != null) { currentLoop.phase = 2; - markLevels(localData, currentLoop.loopBreak, allParts, loops, stopPart, level, visited, recursionLevel + 1); + markLevels(path,localData, currentLoop.loopBreak, allParts, loops, stopPart, level, visited, recursionLevel + 1); } } }