diff options
author | Roman Shevchenko <roman.shevchenko@jetbrains.com> | 2014-08-29 21:58:12 +0400 |
---|---|---|
committer | Roman Shevchenko <roman.shevchenko@jetbrains.com> | 2014-08-29 21:58:12 +0400 |
commit | f5431c3bb14854025dc1f0ec470b77497f79494c (patch) | |
tree | 909c1c06492d849fa062a60c56a02dd26e7095b6 /src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java | |
parent | 63b8d35d08a198215ddabb42cca5b0e823232768 (diff) | |
download | fernflower-f5431c3bb14854025dc1f0ec470b77497f79494c.tar fernflower-f5431c3bb14854025dc1f0ec470b77497f79494c.tar.gz fernflower-f5431c3bb14854025dc1f0ec470b77497f79494c.tar.lz fernflower-f5431c3bb14854025dc1f0ec470b77497f79494c.tar.xz fernflower-f5431c3bb14854025dc1f0ec470b77497f79494c.zip |
java-decompiler: post-import cleanup (common fixes and optimizations)
Diffstat (limited to 'src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java')
-rw-r--r-- | src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java b/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java index f0e8591..0991fa4 100644 --- a/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java +++ b/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java @@ -67,6 +67,8 @@ public class ClassWrapper { setFieldNames.add(fd.getName()); } + int maxsec = Integer.parseInt(DecompilerContext.getProperty(IFernflowerPreferences.MAX_PROCESSING_METHOD).toString()); + for (StructMethod mt : classStruct.getMethods()) { DecompilerContext.getLogger().startMethod(mt.getName() + " " + mt.getDescriptor()); @@ -83,7 +85,6 @@ public class ClassWrapper { VarProcessor varproc = new VarProcessor(); DecompilerContext.setProperty(DecompilerContext.CURRENT_VAR_PROCESSOR, varproc); - Thread mtthread = null; RootStatement root = null; boolean isError = false; @@ -91,28 +92,25 @@ public class ClassWrapper { try { if (mt.containsCode()) { - int maxsec = 10 * Integer.parseInt(DecompilerContext.getProperty(IFernflowerPreferences.MAX_PROCESSING_METHOD).toString()); - if (maxsec == 0) { // blocking wait root = MethodProcessorThread.codeToJava(mt, varproc); } else { MethodProcessorThread mtproc = new MethodProcessorThread(mt, varproc, DecompilerContext.getCurrentContext()); - mtthread = new Thread(mtproc); + Thread mtthread = new Thread(mtproc); + long stopAt = System.currentTimeMillis() + maxsec * 1000; mtthread.start(); - int sec = 0; while (mtthread.isAlive()) { - synchronized (mtproc) { - mtproc.wait(100); + synchronized (mtproc.lock) { + mtproc.lock.wait(100); } - if (maxsec > 0 && ++sec > maxsec) { - DecompilerContext.getLogger().writeMessage("Processing time limit (" + maxsec + " sec.) for method " + - mt.getName() + " " + mt.getDescriptor() + " exceeded, execution interrupted.", - IFernflowerLogger.ERROR); + if (System.currentTimeMillis() >= stopAt) { + String message = "Processing time limit exceeded for method " + mt.getName() + ", execution interrupted."; + DecompilerContext.getLogger().writeMessage(message, IFernflowerLogger.ERROR); mtthread.stop(); isError = true; break; @@ -120,12 +118,7 @@ public class ClassWrapper { } if (!isError) { - if (mtproc.getError() != null) { - throw mtproc.getError(); - } - else { - root = mtproc.getRoot(); - } + root = mtproc.getResult(); } } } @@ -158,17 +151,6 @@ public class ClassWrapper { } } } - catch (ThreadDeath ex) { - try { - if (mtthread != null) { - mtthread.stop(); - } - } - catch (Throwable ignored) { - } - - throw ex; - } catch (Throwable ex) { DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be decompiled.", ex); isError = true; |