Update JD GUI to 1.6.6
This commit is contained in:
parent
07c6d16af8
commit
a2fe9b4f2d
16 changed files with 162 additions and 639 deletions
Binary file not shown.
BIN
libs/jd-gui-1.6.6.jar
Normal file
BIN
libs/jd-gui-1.6.6.jar
Normal file
Binary file not shown.
|
@ -634,7 +634,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||
|
||||
JD-GUI, a standalone graphical utility that displays Java sources from
|
||||
CLASS files
|
||||
Copyright (C) 2008-2015 Emmanuel Dupuy
|
||||
Copyright (C) 2008-2019 Emmanuel Dupuy
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -654,7 +654,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
JD-GUI Copyright (C) 2008-2015 Emmanuel Dupuy
|
||||
JD-GUI Copyright (C) 2008-2019 Emmanuel Dupuy
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
@ -673,4 +673,4 @@ into proprietary programs. If your program is a subroutine library, you
|
|||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
|
4
pom.xml
4
pom.xml
|
@ -159,9 +159,9 @@
|
|||
<dependency>
|
||||
<groupId>com.jd</groupId>
|
||||
<artifactId>jd-gui</artifactId>
|
||||
<version>1.0.0-RC4</version>
|
||||
<version>1.6.6</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/libs/jd-gui-1.0.0-RC4.jar</systemPath>
|
||||
<systemPath>${project.basedir}/libs/jd-gui-1.6.6.jar</systemPath>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.tinyjee.jgraphx</groupId>
|
||||
|
|
|
@ -634,7 +634,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
|||
|
||||
JD-GUI, a standalone graphical utility that displays Java sources from
|
||||
CLASS files
|
||||
Copyright (C) 2008-2015 Emmanuel Dupuy
|
||||
Copyright (C) 2008-2019 Emmanuel Dupuy
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -654,7 +654,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
JD-GUI Copyright (C) 2008-2015 Emmanuel Dupuy
|
||||
JD-GUI Copyright (C) 2008-2019 Emmanuel Dupuy
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
@ -673,4 +673,4 @@ into proprietary programs. If your program is a subroutine library, you
|
|||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
|
|
@ -2,12 +2,13 @@ package jd.cli;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ServiceLoader;
|
||||
import jd.cli.loader.DirectoryLoader;
|
||||
import jd.cli.preferences.CommonPreferences;
|
||||
import jd.cli.printer.text.PlainTextPrinter;
|
||||
import jd.cli.util.ClassFileUtil;
|
||||
import jd.core.Decompiler;
|
||||
import jd.core.process.DecompilerImpl;
|
||||
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
|
||||
import org.jd.core.v1.api.Decompiler;
|
||||
|
||||
|
||||
public class Main {
|
||||
|
@ -39,8 +40,8 @@ public class Main {
|
|||
PrintStream ps = new PrintStream("test.txt");
|
||||
PlainTextPrinter printer = new PlainTextPrinter(preferences, ps);
|
||||
|
||||
Decompiler decompiler = new DecompilerImpl();
|
||||
decompiler.decompile(preferences, loader, printer, internalPath);
|
||||
Decompiler decompiler = new ClassFileToJavaSourceDecompiler();
|
||||
decompiler.decompile(loader, printer, internalPath, preferences.getPreferences());
|
||||
|
||||
System.out.println("done.");
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package jd.cli.loader;
|
||||
|
||||
import java.io.File;
|
||||
import jd.core.loader.Loader;
|
||||
import org.jd.core.v1.api.loader.Loader;
|
||||
|
||||
public abstract class BaseLoader implements Loader {
|
||||
protected String codebase;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package jd.cli.loader;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import jd.core.loader.LoaderException;
|
||||
import java.io.IOException;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.jd.core.v1.api.loader.LoaderException;
|
||||
|
||||
|
||||
public class DirectoryLoader extends BaseLoader {
|
||||
|
@ -17,14 +17,14 @@ public class DirectoryLoader extends BaseLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DataInputStream load(String internalPath)
|
||||
public byte[] load(String internalPath)
|
||||
throws LoaderException {
|
||||
File file = new File(this.codebase, internalPath);
|
||||
|
||||
try {
|
||||
return new DataInputStream(
|
||||
return IOUtils.toByteArray(
|
||||
new BufferedInputStream(new FileInputStream(file)));
|
||||
} catch (FileNotFoundException e) {
|
||||
} catch (IOException e) {
|
||||
throw new LoaderException(
|
||||
"'" + file.getAbsolutePath() + "' not found.");
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package jd.cli.loader;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
import jd.core.loader.LoaderException;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.jd.core.v1.api.loader.LoaderException;
|
||||
|
||||
|
||||
public class JarLoader extends BaseLoader {
|
||||
|
@ -26,7 +26,7 @@ public class JarLoader extends BaseLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DataInputStream load(String internalPath)
|
||||
public byte[] load(String internalPath)
|
||||
throws LoaderException {
|
||||
ZipEntry zipEntry = this.zipFile.getEntry(internalPath);
|
||||
|
||||
|
@ -35,7 +35,7 @@ public class JarLoader extends BaseLoader {
|
|||
}
|
||||
|
||||
try {
|
||||
return new DataInputStream(this.zipFile.getInputStream(zipEntry));
|
||||
return IOUtils.toByteArray(this.zipFile.getInputStream(zipEntry));
|
||||
} catch (IOException e) {
|
||||
throw new LoaderException("Error reading '" + internalPath + "'");
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package jd.cli.loader;
|
|||
import java.io.File;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import jd.core.loader.LoaderException;
|
||||
import org.jd.core.v1.api.loader.LoaderException;
|
||||
|
||||
public class LoaderManager {
|
||||
protected final static String JAR_SUFFIX = ".jar";
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
package jd.cli.preferences;
|
||||
|
||||
import jd.core.preferences.Preferences;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class CommonPreferences extends Preferences {
|
||||
public class CommonPreferences {
|
||||
private Map<String, Object> preferences;
|
||||
protected boolean showDefaultConstructor;
|
||||
protected boolean realignmentLineNumber;
|
||||
protected boolean showPrefixThis;
|
||||
protected boolean mergeEmptyLines;
|
||||
protected boolean unicodeEscape;
|
||||
|
@ -13,17 +17,28 @@ public class CommonPreferences extends Preferences {
|
|||
this.mergeEmptyLines = false;
|
||||
this.unicodeEscape = false;
|
||||
this.showLineNumbers = true;
|
||||
this.preferences = new HashMap<>();
|
||||
}
|
||||
|
||||
public CommonPreferences(
|
||||
boolean showDefaultConstructor, boolean realignmentLineNumber,
|
||||
boolean showPrefixThis, boolean mergeEmptyLines,
|
||||
boolean unicodeEscape, boolean showLineNumbers) {
|
||||
super(showDefaultConstructor, realignmentLineNumber);
|
||||
this.showDefaultConstructor = showDefaultConstructor;
|
||||
this.realignmentLineNumber = realignmentLineNumber;
|
||||
this.showPrefixThis = showPrefixThis;
|
||||
this.mergeEmptyLines = mergeEmptyLines;
|
||||
this.unicodeEscape = unicodeEscape;
|
||||
this.showLineNumbers = showLineNumbers;
|
||||
this.preferences = new HashMap<>();
|
||||
}
|
||||
|
||||
public boolean isShowDefaultConstructor() {
|
||||
return showDefaultConstructor;
|
||||
}
|
||||
|
||||
public boolean isRealignmentLineNumber() {
|
||||
return realignmentLineNumber;
|
||||
}
|
||||
|
||||
public boolean isShowPrefixThis() {
|
||||
|
@ -41,4 +56,8 @@ public class CommonPreferences extends Preferences {
|
|||
public boolean isShowLineNumbers() {
|
||||
return showLineNumbers;
|
||||
}
|
||||
|
||||
public Map<String, Object> getPreferences() {
|
||||
return preferences;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,7 @@ package jd.cli.printer.html;
|
|||
|
||||
import java.io.PrintStream;
|
||||
import jd.cli.util.VersionUtil;
|
||||
import jd.core.CoreConstants;
|
||||
import jd.core.printer.Printer;
|
||||
import org.jd.core.v1.api.printer.Printer;
|
||||
|
||||
/*
|
||||
* CSS
|
||||
|
@ -50,64 +49,6 @@ public class HtmlPrinter implements Printer {
|
|||
this.sbCode = new StringBuffer(30 * 1024);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(byte b) {
|
||||
this.sbCode.append(String.valueOf(b));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(char c) {
|
||||
switch (c) {
|
||||
case '<':
|
||||
this.sbCode.append("<");
|
||||
break;
|
||||
case '>':
|
||||
this.sbCode.append(">");
|
||||
break;
|
||||
default:
|
||||
this.sbCode.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(int i) {
|
||||
this.sbCode.append(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(String s) {
|
||||
this.sbCode.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printNumeric(String s) {
|
||||
this.sbCode.append("<u>");
|
||||
this.sbCode.append(s);
|
||||
this.sbCode.append("</u>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printString(String s, String scopeInternalName) {
|
||||
this.sbCode.append("<u>");
|
||||
|
||||
// Replace '<' by '<'
|
||||
int length = s.length();
|
||||
|
||||
if (length > 0) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
char c = s.charAt(i);
|
||||
|
||||
if (c == '<')
|
||||
this.sbCode.append("<");
|
||||
else
|
||||
this.sbCode.append(c);
|
||||
}
|
||||
}
|
||||
|
||||
this.sbCode.append("</u>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printKeyword(String s) {
|
||||
if (this.commentJavadocErrorDepth == 0) {
|
||||
|
@ -120,102 +61,11 @@ public class HtmlPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void printJavaWord(String s) {
|
||||
printKeyword(s);
|
||||
public void printDeclaration(int i, String s, String s1, String s2) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printType(String internalName, String name, String scopeInternalName) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printTypeDeclaration(String internalName, String name) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printTypeImport(String internalName, String name) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printField(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printFieldDeclaration(internalName, name, descriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printFieldDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
this.sbCode.append("<var>");
|
||||
this.sbCode.append(name);
|
||||
this.sbCode.append("</var>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticField(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printStaticFieldDeclaration(internalName, name, descriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticFieldDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
this.sbCode.append("<em>");
|
||||
this.sbCode.append(name);
|
||||
this.sbCode.append("</em>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printConstructor(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printConstructorDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticConstructorDeclaration(
|
||||
String internalName, String name) {
|
||||
this.sbCode.append("<samp>");
|
||||
this.sbCode.append(name);
|
||||
this.sbCode.append("</samp>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printMethod(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printMethodDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
this.sbCode.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticMethod(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printStaticMethodDeclaration(internalName, name, descriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticMethodDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
this.sbCode.append("<samp>");
|
||||
this.sbCode.append(name);
|
||||
this.sbCode.append("</samp>");
|
||||
public void printReference(int i, String s, String s1, String s2, String s3) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -308,25 +158,59 @@ public class HtmlPrinter implements Printer {
|
|||
this.printStream.print("Java Class Version: " + VersionUtil.getJDKVersion(this.majorVersion,
|
||||
this.minorVersion) + "<br>");
|
||||
this.printStream.print("JD-CL Version: " + "0.1.0" + "<br>");
|
||||
this.printStream.print("JD-Core Version: " + CoreConstants.JD_CORE_VERSION);
|
||||
// TODO: Where can I find this dynamically?
|
||||
this.printStream.print("JD-Core Version: " + "1.6.6");
|
||||
this.printStream.print("</div>");
|
||||
|
||||
this.printStream.print("</div></div></div></body></html>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printText(String s) {
|
||||
this.sbCode.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printNumericConstant(String s) {
|
||||
this.sbCode.append("<u>");
|
||||
this.sbCode.append(s);
|
||||
this.sbCode.append("</u>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStringConstant(String s, String s1) {
|
||||
this.sbCode.append("<u>");
|
||||
|
||||
// Replace '<' by '<'
|
||||
int length = s.length();
|
||||
|
||||
if (length > 0) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
char c = s.charAt(i);
|
||||
|
||||
if (c == '<')
|
||||
this.sbCode.append("<");
|
||||
else
|
||||
this.sbCode.append(c);
|
||||
}
|
||||
}
|
||||
|
||||
this.sbCode.append("</u>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void indent() {
|
||||
this.indentationCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void desindent() {
|
||||
public void unindent() {
|
||||
if (this.indentationCount > 0)
|
||||
this.indentationCount--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfLine(int lineNumber) {
|
||||
public void startLine(int lineNumber) {
|
||||
this.realLineNumber++;
|
||||
|
||||
if (this.maxLineNumber > 0) {
|
||||
|
@ -354,7 +238,7 @@ public class HtmlPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void endOfLine() {
|
||||
public void endLine() {
|
||||
this.sbCode.append("<br>");
|
||||
}
|
||||
|
||||
|
@ -383,187 +267,11 @@ public class HtmlPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void startOfComment() {
|
||||
this.sbCode.append("<cite>");
|
||||
this.commentJavadocErrorDepth++;
|
||||
public void startMarker(int i) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfComment() {
|
||||
this.sbCode.append("</cite>");
|
||||
this.commentJavadocErrorDepth--;
|
||||
public void endMarker(int i) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfJavadoc() {
|
||||
this.sbCode.append("<dfn>");
|
||||
this.commentJavadocErrorDepth++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfJavadoc() {
|
||||
this.sbCode.append("</dfn>");
|
||||
this.commentJavadocErrorDepth--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfXdoclet() {
|
||||
this.sbCode.append("<b>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfXdoclet() {
|
||||
this.sbCode.append("</b>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfError() {
|
||||
this.sbCode.append("<span>");
|
||||
this.commentJavadocErrorDepth++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfError() {
|
||||
this.sbCode.append("</span>");
|
||||
this.commentJavadocErrorDepth--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfImportStatements() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfImportStatements() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfTypeDeclaration(String internalPath) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfTypeDeclaration() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfAnnotationName() {
|
||||
this.sbCode.append("<del>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfAnnotationName() {
|
||||
this.sbCode.append("</del>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfOptionalPrefix() {
|
||||
this.sbCode.append("<kbd>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfOptionalPrefix() {
|
||||
this.sbCode.append("</kbd>");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debuglayoutblock' alt='block'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfSeparatorLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debugseparatorlayoutblock' alr='separator'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfSeparatorLayoutBlock(int min, int value, int max) {
|
||||
if (DEBUG) {
|
||||
// DEBUG // this.sb.append(min);
|
||||
// DEBUG // this.sb.append("<=");
|
||||
// DEBUG // this.sb.append(value);
|
||||
// DEBUG // this.sb.append("<=");
|
||||
// DEBUG // this.sb.append(max);
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfStatementsBlockLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debugstatementblocklayoutblock' alt='statement'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfStatementsBlockLayoutBlock(int min, int value, int max) {
|
||||
if (DEBUG) {
|
||||
// DEBUG // this.sb.append(min);
|
||||
// DEBUG // this.sb.append("<=");
|
||||
// DEBUG // this.sb.append(value);
|
||||
// DEBUG // this.sb.append("<=");
|
||||
// DEBUG // this.sb.append(max);
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfInstructionBlockLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debugenumblocklayoutblock' alt='numeric block'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfInstructionBlockLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfCommentDeprecatedLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debugcommentdeprecatedlayoutblock' alt='comment deprecated'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfCommentDeprecatedLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugMarker(String marker) {
|
||||
if (DEBUG) {
|
||||
// DEBUG // this.sb.append("<span class='debugmarker'>");
|
||||
// DEBUG // this.sb.append(marker);
|
||||
// DEBUG // this.sb.append("</span>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfCaseBlockLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("<span class='debugcaseblocklayoutblock' alt='case block'>");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfCaseBlockLayoutBlock() {
|
||||
if (DEBUG) {
|
||||
this.sbCode.append("</span>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,7 @@ package jd.cli.printer.text;
|
|||
|
||||
import java.io.PrintStream;
|
||||
import jd.cli.preferences.CommonPreferences;
|
||||
import jd.core.model.instruction.bytecode.instruction.Instruction;
|
||||
import jd.core.printer.Printer;
|
||||
import org.jd.core.v1.api.printer.Printer;
|
||||
|
||||
public class PlainTextPrinter implements Printer {
|
||||
protected static final String TAB = " ";
|
||||
|
@ -41,38 +40,6 @@ public class PlainTextPrinter implements Printer {
|
|||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
|
||||
|
||||
@Override
|
||||
public void print(byte b) {
|
||||
this.printStream.append(String.valueOf(b));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(int i) {
|
||||
this.printStream.append(String.valueOf(i));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(char c) {
|
||||
if (this.display)
|
||||
this.printStream.append(String.valueOf(c));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void print(String s) {
|
||||
if (this.display)
|
||||
printEscape(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printNumeric(String s) {
|
||||
this.printStream.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printString(String s, String scopeInternalName) {
|
||||
this.printStream.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printKeyword(String s) {
|
||||
if (this.display)
|
||||
|
@ -80,95 +47,14 @@ public class PlainTextPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void printJavaWord(String s) {
|
||||
this.printStream.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printType(String internalName, String name, String scopeInternalName) {
|
||||
if (this.display)
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printTypeDeclaration(String internalName, String name) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printTypeImport(String internalName, String name) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printField(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printFieldDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticField(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticFieldDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printConstructor(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printConstructorDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticConstructorDeclaration(
|
||||
String internalName, String name) {
|
||||
public void printDeclaration(int type, String internalTypeName, String name, String descriptor) {
|
||||
this.printStream.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printMethod(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printMethodDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticMethod(
|
||||
String internalName, String name,
|
||||
String descriptor, String scopeInternalName) {
|
||||
printEscape(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStaticMethodDeclaration(
|
||||
String internalName, String name, String descriptor) {
|
||||
printEscape(name);
|
||||
public void printReference(int type, String internalTypeName, String name, String descriptor,
|
||||
String ownerInternalName) {
|
||||
this.printStream.append(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -212,23 +98,39 @@ public class PlainTextPrinter implements Printer {
|
|||
public void end() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printText(String s) {
|
||||
if (this.display)
|
||||
printEscape(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printNumericConstant(String s) {
|
||||
this.printStream.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printStringConstant(String s, String s1) {
|
||||
this.printStream.append(s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void indent() {
|
||||
this.indentationCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void desindent() {
|
||||
public void unindent() {
|
||||
if (this.indentationCount > 0)
|
||||
this.indentationCount--;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfLine(int lineNumber) {
|
||||
public void startLine(int lineNumber) {
|
||||
if (this.maxLineNumber > 0) {
|
||||
this.printStream.append(this.lineNumberBeginPrefix);
|
||||
|
||||
if (lineNumber == Instruction.UNKNOWN_LINE_NUMBER) {
|
||||
if (lineNumber == UNKNOWN_LINE_NUMBER) {
|
||||
this.printStream.append(this.unknownLineNumberPrefix);
|
||||
} else {
|
||||
int left = 0;
|
||||
|
@ -248,7 +150,7 @@ public class PlainTextPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void endOfLine() {
|
||||
public void endLine() {
|
||||
this.printStream.append(NEWLINE);
|
||||
}
|
||||
|
||||
|
@ -268,124 +170,11 @@ public class PlainTextPrinter implements Printer {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void startOfComment() {
|
||||
public void startMarker(int i) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfComment() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfJavadoc() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfJavadoc() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfXdoclet() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfXdoclet() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfError() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfError() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfImportStatements() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfImportStatements() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfTypeDeclaration(String internalPath) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfTypeDeclaration() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfAnnotationName() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfAnnotationName() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startOfOptionalPrefix() {
|
||||
if (!this.preferences.isShowPrefixThis())
|
||||
this.display = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endOfOptionalPrefix() {
|
||||
this.display = true;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
|
||||
|
||||
@Override
|
||||
public void debugStartOfLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfSeparatorLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfSeparatorLayoutBlock(int min, int value, int max) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfStatementsBlockLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfStatementsBlockLayoutBlock(int min, int value, int max) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfInstructionBlockLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfInstructionBlockLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfCommentDeprecatedLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfCommentDeprecatedLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugMarker(String marker) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugStartOfCaseBlockLayoutBlock() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debugEndOfCaseBlockLayoutBlock() {
|
||||
public void endMarker(int i) {
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //
|
||||
|
|
|
@ -6,16 +6,17 @@ import java.io.File;
|
|||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
import jd.core.CoreConstants;
|
||||
import jd.core.model.classfile.constant.Constant;
|
||||
import jd.core.model.classfile.constant.ConstantClass;
|
||||
import jd.core.model.classfile.constant.ConstantConstant;
|
||||
import jd.core.model.classfile.constant.ConstantUtf8;
|
||||
import jd.core.process.deserializer.ClassFormatException;
|
||||
import jd.core.util.StringConstants;
|
||||
import org.jd.core.v1.model.classfile.constant.Constant;
|
||||
import org.jd.core.v1.model.classfile.constant.ConstantClass;
|
||||
import org.jd.core.v1.model.classfile.constant.ConstantUtf8;
|
||||
import org.jd.core.v1.service.deserializer.classfile.ClassFileFormatException;
|
||||
import org.jd.core.v1.service.deserializer.classfile.ClassFileReader;
|
||||
|
||||
|
||||
public class ClassFileUtil {
|
||||
public static final char INTERNAL_PACKAGE_SEPARATOR = '/';
|
||||
public static final String CLASS_FILE_SUFFIX = ".class";
|
||||
|
||||
/*
|
||||
* Lecture rapide de la structure de la classe et extraction du nom du
|
||||
* repoertoire de base.
|
||||
|
@ -30,8 +31,8 @@ public class ClassFileUtil {
|
|||
new FileInputStream(pathToClass)));
|
||||
|
||||
int magic = dis.readInt();
|
||||
if (magic != CoreConstants.JAVA_MAGIC_NUMBER)
|
||||
throw new ClassFormatException("Invalid Java .class file");
|
||||
if (magic != ClassFileReader.JAVA_MAGIC_NUMBER)
|
||||
throw new ClassFileFormatException("Invalid Java .class file");
|
||||
|
||||
/* int minor_version = */
|
||||
dis.readUnsignedShort();
|
||||
|
@ -44,23 +45,26 @@ public class ClassFileUtil {
|
|||
dis.readUnsignedShort();
|
||||
int this_class = dis.readUnsignedShort();
|
||||
|
||||
Constant c = Objects.requireNonNull(constants)[this_class];
|
||||
if ((c == null) || (c.tag != ConstantConstant.CONSTANT_Class))
|
||||
throw new ClassFormatException("Invalid contant pool");
|
||||
if (this_class > Objects.requireNonNull(constants).length) {
|
||||
throw new ClassFileFormatException("Unknown Java structure");
|
||||
}
|
||||
Constant c = constants[this_class];
|
||||
if ((c == null) || (c.getTag() != Constant.CONSTANT_Class))
|
||||
throw new ClassFileFormatException("Invalid constant pool");
|
||||
|
||||
c = constants[((ConstantClass) c).name_index];
|
||||
if ((c == null) || (c.tag != ConstantConstant.CONSTANT_Utf8))
|
||||
throw new ClassFormatException("Invalid contant pool");
|
||||
c = constants[((ConstantClass) c).getNameIndex()];
|
||||
if ((c == null) || (c.getTag() != Constant.CONSTANT_Utf8))
|
||||
throw new ClassFileFormatException("Invalid constant pool");
|
||||
|
||||
String internalClassName = ((ConstantUtf8) c).bytes;
|
||||
String internalClassName = ((ConstantUtf8) c).getValue();
|
||||
String pathSuffix = internalClassName.replace(
|
||||
StringConstants.INTERNAL_PACKAGE_SEPARATOR, File.separatorChar) +
|
||||
StringConstants.CLASS_FILE_SUFFIX;
|
||||
INTERNAL_PACKAGE_SEPARATOR, File.separatorChar) +
|
||||
CLASS_FILE_SUFFIX;
|
||||
|
||||
int index = pathToClass.indexOf(pathSuffix);
|
||||
|
||||
if (index < 0)
|
||||
throw new ClassFormatException("Invalid internal class name");
|
||||
throw new ClassFileFormatException("Invalid internal class name");
|
||||
|
||||
directoryPath = pathToClass.substring(0, index);
|
||||
} catch (IOException e) {
|
||||
|
@ -85,7 +89,7 @@ public class ClassFileUtil {
|
|||
|
||||
String s = pathToClass.substring(directoryPath.length());
|
||||
|
||||
return s.replace(File.separatorChar, StringConstants.INTERNAL_PACKAGE_SEPARATOR);
|
||||
return s.replace(File.separatorChar, INTERNAL_PACKAGE_SEPARATOR);
|
||||
}
|
||||
|
||||
private static Constant[] DeserializeConstants(DataInputStream dis)
|
||||
|
@ -100,28 +104,28 @@ public class ClassFileUtil {
|
|||
byte tag = dis.readByte();
|
||||
|
||||
switch (tag) {
|
||||
case ConstantConstant.CONSTANT_Class:
|
||||
constants[i] = new ConstantClass(tag, dis.readUnsignedShort());
|
||||
case Constant.CONSTANT_Class:
|
||||
constants[i] = new ConstantClass(dis.readUnsignedShort());
|
||||
break;
|
||||
case ConstantConstant.CONSTANT_Utf8:
|
||||
constants[i] = new ConstantUtf8(tag, dis.readUTF());
|
||||
case Constant.CONSTANT_Utf8:
|
||||
constants[i] = new ConstantUtf8(dis.readUTF());
|
||||
break;
|
||||
case ConstantConstant.CONSTANT_Long:
|
||||
case ConstantConstant.CONSTANT_Double:
|
||||
case Constant.CONSTANT_Long:
|
||||
case Constant.CONSTANT_Double:
|
||||
dis.read();
|
||||
dis.read();
|
||||
dis.read();
|
||||
dis.read();
|
||||
i++;
|
||||
case ConstantConstant.CONSTANT_Fieldref:
|
||||
case ConstantConstant.CONSTANT_Methodref:
|
||||
case ConstantConstant.CONSTANT_InterfaceMethodref:
|
||||
case ConstantConstant.CONSTANT_NameAndType:
|
||||
case ConstantConstant.CONSTANT_Integer:
|
||||
case ConstantConstant.CONSTANT_Float:
|
||||
case Constant.CONSTANT_FieldRef:
|
||||
case Constant.CONSTANT_MethodRef:
|
||||
case Constant.CONSTANT_InterfaceMethodRef:
|
||||
case Constant.CONSTANT_NameAndType:
|
||||
case Constant.CONSTANT_Integer:
|
||||
case Constant.CONSTANT_Float:
|
||||
dis.read();
|
||||
dis.read();
|
||||
case ConstantConstant.CONSTANT_String:
|
||||
case Constant.CONSTANT_String:
|
||||
dis.read();
|
||||
dis.read();
|
||||
break;
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package jd.cli.util;
|
||||
|
||||
import jd.core.util.TypeNameUtil;
|
||||
|
||||
public class CommonTypeNameUtil {
|
||||
public static String InternalPathToQualifiedTypeName(String internalPath) {
|
||||
String internalTypeName = internalPath.substring(0, internalPath.length() - 6);
|
||||
return TypeNameUtil.InternalTypeNameToQualifiedTypeName(internalTypeName);
|
||||
return InternalTypeNameToQualifiedTypeName(internalTypeName);
|
||||
}
|
||||
|
||||
public static String InternalTypeNameToQualifiedTypeName(String path) {
|
||||
return path.replace('/', '.').replace('$', '.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,8 +10,8 @@ import jd.cli.loader.DirectoryLoader;
|
|||
import jd.cli.preferences.CommonPreferences;
|
||||
import jd.cli.printer.text.PlainTextPrinter;
|
||||
import jd.cli.util.ClassFileUtil;
|
||||
import jd.core.process.DecompilerImpl;
|
||||
import me.konloch.kontainer.io.DiskReader;
|
||||
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
|
||||
import org.objectweb.asm.tree.ClassNode;
|
||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||
|
@ -99,8 +99,8 @@ public class JDGUIDecompiler extends Decompiler {
|
|||
PrintStream ps = new PrintStream(tempJava.getAbsolutePath());
|
||||
PlainTextPrinter printer = new PlainTextPrinter(preferences, ps);
|
||||
|
||||
jd.core.Decompiler decompiler = new DecompilerImpl();
|
||||
decompiler.decompile(preferences, loader, printer, internalPath);
|
||||
org.jd.core.v1.api.Decompiler decompiler = new ClassFileToJavaSourceDecompiler();
|
||||
decompiler.decompile(loader, printer, internalPath, preferences.getPreferences());
|
||||
|
||||
String decompiledSource;
|
||||
decompiledSource = DiskReader.loadAsString(tempJava.getAbsolutePath());
|
||||
|
|
Loading…
Reference in a new issue