From bc8005b4d6cfb2ce5c2e33044ab647b84bd853c2 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 3 May 2017 15:22:20 +0300 Subject: [PATCH] IDEA-149077 Default decompiler is chosen for several classes instead of Fernflower - fixes for IDEA-CR-20517 --- .../java/decompiler/main/ClassWriter.java | 9 ++++-- .../main/decompiler/PrintStreamLogger.java | 8 +++--- .../main/extern/IFernflowerLogger.java | 8 ++++-- .../decompiler/main/rels/ClassWrapper.java | 4 ++- .../jetbrains/java/decompiler/IdeaLogger.kt | 28 +++++++++++++------ 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java index 59b744c8b316..764b4d4945b8 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassWriter.java @@ -529,7 +529,9 @@ public class ClassWriter { buffer.append(root.toJava(indent, tracer)); } catch (Throwable ex) { - DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be written.", ex); + DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be written.", + IFernflowerLogger.Severity.WARN, + ex); methodWrapper.decompiledWithErrors = true; } } @@ -832,7 +834,10 @@ public class ClassWriter { buffer.append(code); } catch (Throwable ex) { - DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be written.", ex); + DecompilerContext.getLogger() + .writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be written.", + IFernflowerLogger.Severity.WARN, + ex); methodWrapper.decompiledWithErrors = true; } } diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/decompiler/PrintStreamLogger.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/decompiler/PrintStreamLogger.java index a201000412e6..5ed82ed19a70 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/decompiler/PrintStreamLogger.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/decompiler/PrintStreamLogger.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -38,9 +38,9 @@ public class PrintStreamLogger extends IFernflowerLogger { } @Override - public void writeMessage(String message, Throwable t) { - if (accepts(Severity.ERROR)) { - writeMessage(message, Severity.ERROR); + public void writeMessage(String message, Severity severity, Throwable t) { + if (accepts(severity)) { + writeMessage(message, severity); t.printStackTrace(stream); } } diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerLogger.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerLogger.java index db76c77b081f..23d5c6309c98 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerLogger.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerLogger.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -39,7 +39,11 @@ public abstract class IFernflowerLogger { public abstract void writeMessage(String message, Severity severity); - public abstract void writeMessage(String message, Throwable t); + public abstract void writeMessage(String message, Severity severity, Throwable t); + + public void writeMessage(String message, Throwable t) { + writeMessage(message, Severity.ERROR, t); + } public void startReadingClass(String className) { } diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java index fdabfde0b881..3a3346ee61e8 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/rels/ClassWrapper.java @@ -142,7 +142,9 @@ public class ClassWrapper { } } catch (Throwable ex) { - DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be decompiled.", ex); + DecompilerContext.getLogger().writeMessage("Method " + mt.getName() + " " + mt.getDescriptor() + " couldn't be decompiled.", + IFernflowerLogger.Severity.WARN, + ex); isError = true; } diff --git a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaLogger.kt b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaLogger.kt index ce54b7c16fda..e005b5640835 100644 --- a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaLogger.kt +++ b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaLogger.kt @@ -18,6 +18,7 @@ package org.jetbrains.java.decompiler import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.progress.ProcessCanceledException import org.jetbrains.java.decompiler.main.extern.IFernflowerLogger +import org.jetbrains.java.decompiler.main.extern.IFernflowerLogger.Severity.* class IdeaLogger : IFernflowerLogger() { private val LOG = Logger.getInstance(IdeaDecompiler::class.java) @@ -29,18 +30,29 @@ class IdeaLogger : IFernflowerLogger() { override fun writeMessage(message: String, severity: IFernflowerLogger.Severity) { val text = extendMessage(message) when (severity) { - IFernflowerLogger.Severity.ERROR -> LOG.warn(text) - IFernflowerLogger.Severity.WARN -> LOG.warn(text) - IFernflowerLogger.Severity.INFO -> LOG.info(text) + ERROR -> LOG.warn(text) + WARN -> LOG.warn(text) + INFO -> LOG.info(text) else -> LOG.debug(text) } } - override fun writeMessage(message: String, t: Throwable) { - when (t) { - is ProcessCanceledException -> throw t - is InterruptedException -> throw ProcessCanceledException(t) - else -> LOG.warn(message, t) + override fun writeMessage(message: String, severity: IFernflowerLogger.Severity, t: Throwable) { + if (severity == ERROR) { + when (t) { + is InternalException -> throw t + is ProcessCanceledException -> throw t + is InterruptedException -> throw ProcessCanceledException(t) + else -> throw InternalException(extendMessage(message), t) + } + } + else { + val text = extendMessage(message) + when (severity) { + WARN -> LOG.warn(text, t) + INFO -> LOG.info(text, t) + else -> LOG.debug(text, t) + } } }