Update JD GUI to 1.6.6

This commit is contained in:
Nico Mexis 2021-04-13 11:32:35 +02:00
parent 07c6d16af8
commit a2fe9b4f2d
No known key found for this signature in database
GPG Key ID: 27D6E17CE092AB78
16 changed files with 162 additions and 639 deletions

Binary file not shown.

BIN
libs/jd-gui-1.6.6.jar Normal file

Binary file not shown.

View File

@ -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 JD-GUI, a standalone graphical utility that displays Java sources from
CLASS files 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 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 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 If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode: 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 program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details. under certain conditions; type `show c' for details.

View File

@ -159,9 +159,9 @@
<dependency> <dependency>
<groupId>com.jd</groupId> <groupId>com.jd</groupId>
<artifactId>jd-gui</artifactId> <artifactId>jd-gui</artifactId>
<version>1.0.0-RC4</version> <version>1.6.6</version>
<scope>system</scope> <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>
<dependency> <dependency>
<groupId>org.tinyjee.jgraphx</groupId> <groupId>org.tinyjee.jgraphx</groupId>

View File

@ -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 JD-GUI, a standalone graphical utility that displays Java sources from
CLASS files 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 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 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 If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode: 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 program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details. under certain conditions; type `show c' for details.

View File

@ -2,12 +2,13 @@ package jd.cli;
import java.io.File; import java.io.File;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.ServiceLoader;
import jd.cli.loader.DirectoryLoader; import jd.cli.loader.DirectoryLoader;
import jd.cli.preferences.CommonPreferences; import jd.cli.preferences.CommonPreferences;
import jd.cli.printer.text.PlainTextPrinter; import jd.cli.printer.text.PlainTextPrinter;
import jd.cli.util.ClassFileUtil; import jd.cli.util.ClassFileUtil;
import jd.core.Decompiler; import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
import jd.core.process.DecompilerImpl; import org.jd.core.v1.api.Decompiler;
public class Main { public class Main {
@ -39,8 +40,8 @@ public class Main {
PrintStream ps = new PrintStream("test.txt"); PrintStream ps = new PrintStream("test.txt");
PlainTextPrinter printer = new PlainTextPrinter(preferences, ps); PlainTextPrinter printer = new PlainTextPrinter(preferences, ps);
Decompiler decompiler = new DecompilerImpl(); Decompiler decompiler = new ClassFileToJavaSourceDecompiler();
decompiler.decompile(preferences, loader, printer, internalPath); decompiler.decompile(loader, printer, internalPath, preferences.getPreferences());
System.out.println("done."); System.out.println("done.");

View File

@ -1,7 +1,7 @@
package jd.cli.loader; package jd.cli.loader;
import java.io.File; import java.io.File;
import jd.core.loader.Loader; import org.jd.core.v1.api.loader.Loader;
public abstract class BaseLoader implements Loader { public abstract class BaseLoader implements Loader {
protected String codebase; protected String codebase;

View File

@ -1,11 +1,11 @@
package jd.cli.loader; package jd.cli.loader;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.IOException;
import jd.core.loader.LoaderException; import org.apache.commons.io.IOUtils;
import org.jd.core.v1.api.loader.LoaderException;
public class DirectoryLoader extends BaseLoader { public class DirectoryLoader extends BaseLoader {
@ -17,14 +17,14 @@ public class DirectoryLoader extends BaseLoader {
} }
@Override @Override
public DataInputStream load(String internalPath) public byte[] load(String internalPath)
throws LoaderException { throws LoaderException {
File file = new File(this.codebase, internalPath); File file = new File(this.codebase, internalPath);
try { try {
return new DataInputStream( return IOUtils.toByteArray(
new BufferedInputStream(new FileInputStream(file))); new BufferedInputStream(new FileInputStream(file)));
} catch (FileNotFoundException e) { } catch (IOException e) {
throw new LoaderException( throw new LoaderException(
"'" + file.getAbsolutePath() + "' not found."); "'" + file.getAbsolutePath() + "' not found.");
} }

View File

@ -1,11 +1,11 @@
package jd.cli.loader; package jd.cli.loader;
import java.io.DataInputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; 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 { public class JarLoader extends BaseLoader {
@ -26,7 +26,7 @@ public class JarLoader extends BaseLoader {
} }
@Override @Override
public DataInputStream load(String internalPath) public byte[] load(String internalPath)
throws LoaderException { throws LoaderException {
ZipEntry zipEntry = this.zipFile.getEntry(internalPath); ZipEntry zipEntry = this.zipFile.getEntry(internalPath);
@ -35,7 +35,7 @@ public class JarLoader extends BaseLoader {
} }
try { try {
return new DataInputStream(this.zipFile.getInputStream(zipEntry)); return IOUtils.toByteArray(this.zipFile.getInputStream(zipEntry));
} catch (IOException e) { } catch (IOException e) {
throw new LoaderException("Error reading '" + internalPath + "'"); throw new LoaderException("Error reading '" + internalPath + "'");
} }

View File

@ -3,7 +3,7 @@ package jd.cli.loader;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import jd.core.loader.LoaderException; import org.jd.core.v1.api.loader.LoaderException;
public class LoaderManager { public class LoaderManager {
protected final static String JAR_SUFFIX = ".jar"; protected final static String JAR_SUFFIX = ".jar";

View File

@ -1,8 +1,12 @@
package jd.cli.preferences; 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 showPrefixThis;
protected boolean mergeEmptyLines; protected boolean mergeEmptyLines;
protected boolean unicodeEscape; protected boolean unicodeEscape;
@ -13,17 +17,28 @@ public class CommonPreferences extends Preferences {
this.mergeEmptyLines = false; this.mergeEmptyLines = false;
this.unicodeEscape = false; this.unicodeEscape = false;
this.showLineNumbers = true; this.showLineNumbers = true;
this.preferences = new HashMap<>();
} }
public CommonPreferences( public CommonPreferences(
boolean showDefaultConstructor, boolean realignmentLineNumber, boolean showDefaultConstructor, boolean realignmentLineNumber,
boolean showPrefixThis, boolean mergeEmptyLines, boolean showPrefixThis, boolean mergeEmptyLines,
boolean unicodeEscape, boolean showLineNumbers) { boolean unicodeEscape, boolean showLineNumbers) {
super(showDefaultConstructor, realignmentLineNumber); this.showDefaultConstructor = showDefaultConstructor;
this.realignmentLineNumber = realignmentLineNumber;
this.showPrefixThis = showPrefixThis; this.showPrefixThis = showPrefixThis;
this.mergeEmptyLines = mergeEmptyLines; this.mergeEmptyLines = mergeEmptyLines;
this.unicodeEscape = unicodeEscape; this.unicodeEscape = unicodeEscape;
this.showLineNumbers = showLineNumbers; this.showLineNumbers = showLineNumbers;
this.preferences = new HashMap<>();
}
public boolean isShowDefaultConstructor() {
return showDefaultConstructor;
}
public boolean isRealignmentLineNumber() {
return realignmentLineNumber;
} }
public boolean isShowPrefixThis() { public boolean isShowPrefixThis() {
@ -41,4 +56,8 @@ public class CommonPreferences extends Preferences {
public boolean isShowLineNumbers() { public boolean isShowLineNumbers() {
return showLineNumbers; return showLineNumbers;
} }
public Map<String, Object> getPreferences() {
return preferences;
}
} }

View File

@ -2,8 +2,7 @@ package jd.cli.printer.html;
import java.io.PrintStream; import java.io.PrintStream;
import jd.cli.util.VersionUtil; import jd.cli.util.VersionUtil;
import jd.core.CoreConstants; import org.jd.core.v1.api.printer.Printer;
import jd.core.printer.Printer;
/* /*
* CSS * CSS
@ -50,64 +49,6 @@ public class HtmlPrinter implements Printer {
this.sbCode = new StringBuffer(30 * 1024); 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("&lt;");
break;
case '>':
this.sbCode.append("&gt;");
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 '&lt;'
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (c == '<')
this.sbCode.append("&lt;");
else
this.sbCode.append(c);
}
}
this.sbCode.append("</u>");
}
@Override @Override
public void printKeyword(String s) { public void printKeyword(String s) {
if (this.commentJavadocErrorDepth == 0) { if (this.commentJavadocErrorDepth == 0) {
@ -120,102 +61,11 @@ public class HtmlPrinter implements Printer {
} }
@Override @Override
public void printJavaWord(String s) { public void printDeclaration(int i, String s, String s1, String s2) {
printKeyword(s);
} }
@Override @Override
public void printType(String internalName, String name, String scopeInternalName) { public void printReference(int i, String s, String s1, String s2, String s3) {
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>");
} }
@Override @Override
@ -308,25 +158,59 @@ public class HtmlPrinter implements Printer {
this.printStream.print("Java Class Version: " + VersionUtil.getJDKVersion(this.majorVersion, this.printStream.print("Java Class Version: " + VersionUtil.getJDKVersion(this.majorVersion,
this.minorVersion) + "<br>"); this.minorVersion) + "<br>");
this.printStream.print("JD-CL Version: " + "0.1.0" + "<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>");
this.printStream.print("</div></div></div></body></html>"); 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 '&lt;'
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (c == '<')
this.sbCode.append("&lt;");
else
this.sbCode.append(c);
}
}
this.sbCode.append("</u>");
}
@Override @Override
public void indent() { public void indent() {
this.indentationCount++; this.indentationCount++;
} }
@Override @Override
public void desindent() { public void unindent() {
if (this.indentationCount > 0) if (this.indentationCount > 0)
this.indentationCount--; this.indentationCount--;
} }
@Override @Override
public void startOfLine(int lineNumber) { public void startLine(int lineNumber) {
this.realLineNumber++; this.realLineNumber++;
if (this.maxLineNumber > 0) { if (this.maxLineNumber > 0) {
@ -354,7 +238,7 @@ public class HtmlPrinter implements Printer {
} }
@Override @Override
public void endOfLine() { public void endLine() {
this.sbCode.append("<br>"); this.sbCode.append("<br>");
} }
@ -383,187 +267,11 @@ public class HtmlPrinter implements Printer {
} }
@Override @Override
public void startOfComment() { public void startMarker(int i) {
this.sbCode.append("<cite>");
this.commentJavadocErrorDepth++;
} }
@Override @Override
public void endOfComment() { public void endMarker(int i) {
this.sbCode.append("</cite>");
this.commentJavadocErrorDepth--;
} }
@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("&lt;=");
// DEBUG // this.sb.append(value);
// DEBUG // this.sb.append("&lt;=");
// 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("&lt;=");
// DEBUG // this.sb.append(value);
// DEBUG // this.sb.append("&lt;=");
// 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>");
}
}
} }

View File

@ -2,8 +2,7 @@ package jd.cli.printer.text;
import java.io.PrintStream; import java.io.PrintStream;
import jd.cli.preferences.CommonPreferences; import jd.cli.preferences.CommonPreferences;
import jd.core.model.instruction.bytecode.instruction.Instruction; import org.jd.core.v1.api.printer.Printer;
import jd.core.printer.Printer;
public class PlainTextPrinter implements Printer { public class PlainTextPrinter implements Printer {
protected static final String TAB = " "; 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 @Override
public void printKeyword(String s) { public void printKeyword(String s) {
if (this.display) if (this.display)
@ -80,95 +47,14 @@ public class PlainTextPrinter implements Printer {
} }
@Override @Override
public void printJavaWord(String s) { public void printDeclaration(int type, String internalTypeName, String name, String descriptor) {
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) {
this.printStream.append(name); this.printStream.append(name);
} }
@Override @Override
public void printMethod( public void printReference(int type, String internalTypeName, String name, String descriptor,
String internalName, String name, String ownerInternalName) {
String descriptor, String scopeInternalName) { this.printStream.append(name);
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);
} }
@Override @Override
@ -212,23 +98,39 @@ public class PlainTextPrinter implements Printer {
public void end() { 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 @Override
public void indent() { public void indent() {
this.indentationCount++; this.indentationCount++;
} }
@Override @Override
public void desindent() { public void unindent() {
if (this.indentationCount > 0) if (this.indentationCount > 0)
this.indentationCount--; this.indentationCount--;
} }
@Override @Override
public void startOfLine(int lineNumber) { public void startLine(int lineNumber) {
if (this.maxLineNumber > 0) { if (this.maxLineNumber > 0) {
this.printStream.append(this.lineNumberBeginPrefix); this.printStream.append(this.lineNumberBeginPrefix);
if (lineNumber == Instruction.UNKNOWN_LINE_NUMBER) { if (lineNumber == UNKNOWN_LINE_NUMBER) {
this.printStream.append(this.unknownLineNumberPrefix); this.printStream.append(this.unknownLineNumberPrefix);
} else { } else {
int left = 0; int left = 0;
@ -248,7 +150,7 @@ public class PlainTextPrinter implements Printer {
} }
@Override @Override
public void endOfLine() { public void endLine() {
this.printStream.append(NEWLINE); this.printStream.append(NEWLINE);
} }
@ -268,124 +170,11 @@ public class PlainTextPrinter implements Printer {
} }
@Override @Override
public void startOfComment() { public void startMarker(int i) {
} }
@Override @Override
public void endOfComment() { public void endMarker(int i) {
}
@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() {
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //

View File

@ -6,16 +6,17 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import jd.core.CoreConstants; import org.jd.core.v1.model.classfile.constant.Constant;
import jd.core.model.classfile.constant.Constant; import org.jd.core.v1.model.classfile.constant.ConstantClass;
import jd.core.model.classfile.constant.ConstantClass; import org.jd.core.v1.model.classfile.constant.ConstantUtf8;
import jd.core.model.classfile.constant.ConstantConstant; import org.jd.core.v1.service.deserializer.classfile.ClassFileFormatException;
import jd.core.model.classfile.constant.ConstantUtf8; import org.jd.core.v1.service.deserializer.classfile.ClassFileReader;
import jd.core.process.deserializer.ClassFormatException;
import jd.core.util.StringConstants;
public class ClassFileUtil { 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 * Lecture rapide de la structure de la classe et extraction du nom du
* repoertoire de base. * repoertoire de base.
@ -30,8 +31,8 @@ public class ClassFileUtil {
new FileInputStream(pathToClass))); new FileInputStream(pathToClass)));
int magic = dis.readInt(); int magic = dis.readInt();
if (magic != CoreConstants.JAVA_MAGIC_NUMBER) if (magic != ClassFileReader.JAVA_MAGIC_NUMBER)
throw new ClassFormatException("Invalid Java .class file"); throw new ClassFileFormatException("Invalid Java .class file");
/* int minor_version = */ /* int minor_version = */
dis.readUnsignedShort(); dis.readUnsignedShort();
@ -44,23 +45,26 @@ public class ClassFileUtil {
dis.readUnsignedShort(); dis.readUnsignedShort();
int this_class = dis.readUnsignedShort(); int this_class = dis.readUnsignedShort();
Constant c = Objects.requireNonNull(constants)[this_class]; if (this_class > Objects.requireNonNull(constants).length) {
if ((c == null) || (c.tag != ConstantConstant.CONSTANT_Class)) throw new ClassFileFormatException("Unknown Java structure");
throw new ClassFormatException("Invalid contant pool"); }
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]; c = constants[((ConstantClass) c).getNameIndex()];
if ((c == null) || (c.tag != ConstantConstant.CONSTANT_Utf8)) if ((c == null) || (c.getTag() != Constant.CONSTANT_Utf8))
throw new ClassFormatException("Invalid contant pool"); throw new ClassFileFormatException("Invalid constant pool");
String internalClassName = ((ConstantUtf8) c).bytes; String internalClassName = ((ConstantUtf8) c).getValue();
String pathSuffix = internalClassName.replace( String pathSuffix = internalClassName.replace(
StringConstants.INTERNAL_PACKAGE_SEPARATOR, File.separatorChar) + INTERNAL_PACKAGE_SEPARATOR, File.separatorChar) +
StringConstants.CLASS_FILE_SUFFIX; CLASS_FILE_SUFFIX;
int index = pathToClass.indexOf(pathSuffix); int index = pathToClass.indexOf(pathSuffix);
if (index < 0) if (index < 0)
throw new ClassFormatException("Invalid internal class name"); throw new ClassFileFormatException("Invalid internal class name");
directoryPath = pathToClass.substring(0, index); directoryPath = pathToClass.substring(0, index);
} catch (IOException e) { } catch (IOException e) {
@ -85,7 +89,7 @@ public class ClassFileUtil {
String s = pathToClass.substring(directoryPath.length()); 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) private static Constant[] DeserializeConstants(DataInputStream dis)
@ -100,28 +104,28 @@ public class ClassFileUtil {
byte tag = dis.readByte(); byte tag = dis.readByte();
switch (tag) { switch (tag) {
case ConstantConstant.CONSTANT_Class: case Constant.CONSTANT_Class:
constants[i] = new ConstantClass(tag, dis.readUnsignedShort()); constants[i] = new ConstantClass(dis.readUnsignedShort());
break; break;
case ConstantConstant.CONSTANT_Utf8: case Constant.CONSTANT_Utf8:
constants[i] = new ConstantUtf8(tag, dis.readUTF()); constants[i] = new ConstantUtf8(dis.readUTF());
break; break;
case ConstantConstant.CONSTANT_Long: case Constant.CONSTANT_Long:
case ConstantConstant.CONSTANT_Double: case Constant.CONSTANT_Double:
dis.read(); dis.read();
dis.read(); dis.read();
dis.read(); dis.read();
dis.read(); dis.read();
i++; i++;
case ConstantConstant.CONSTANT_Fieldref: case Constant.CONSTANT_FieldRef:
case ConstantConstant.CONSTANT_Methodref: case Constant.CONSTANT_MethodRef:
case ConstantConstant.CONSTANT_InterfaceMethodref: case Constant.CONSTANT_InterfaceMethodRef:
case ConstantConstant.CONSTANT_NameAndType: case Constant.CONSTANT_NameAndType:
case ConstantConstant.CONSTANT_Integer: case Constant.CONSTANT_Integer:
case ConstantConstant.CONSTANT_Float: case Constant.CONSTANT_Float:
dis.read(); dis.read();
dis.read(); dis.read();
case ConstantConstant.CONSTANT_String: case Constant.CONSTANT_String:
dis.read(); dis.read();
dis.read(); dis.read();
break; break;

View File

@ -1,10 +1,12 @@
package jd.cli.util; package jd.cli.util;
import jd.core.util.TypeNameUtil;
public class CommonTypeNameUtil { public class CommonTypeNameUtil {
public static String InternalPathToQualifiedTypeName(String internalPath) { public static String InternalPathToQualifiedTypeName(String internalPath) {
String internalTypeName = internalPath.substring(0, internalPath.length() - 6); 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('$', '.');
} }
} }

View File

@ -10,8 +10,8 @@ import jd.cli.loader.DirectoryLoader;
import jd.cli.preferences.CommonPreferences; import jd.cli.preferences.CommonPreferences;
import jd.cli.printer.text.PlainTextPrinter; import jd.cli.printer.text.PlainTextPrinter;
import jd.cli.util.ClassFileUtil; import jd.cli.util.ClassFileUtil;
import jd.core.process.DecompilerImpl;
import me.konloch.kontainer.io.DiskReader; import me.konloch.kontainer.io.DiskReader;
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.ClassNode;
import the.bytecode.club.bytecodeviewer.BytecodeViewer; import the.bytecode.club.bytecodeviewer.BytecodeViewer;
import the.bytecode.club.bytecodeviewer.util.MiscUtils; import the.bytecode.club.bytecodeviewer.util.MiscUtils;
@ -99,8 +99,8 @@ public class JDGUIDecompiler extends Decompiler {
PrintStream ps = new PrintStream(tempJava.getAbsolutePath()); PrintStream ps = new PrintStream(tempJava.getAbsolutePath());
PlainTextPrinter printer = new PlainTextPrinter(preferences, ps); PlainTextPrinter printer = new PlainTextPrinter(preferences, ps);
jd.core.Decompiler decompiler = new DecompilerImpl(); org.jd.core.v1.api.Decompiler decompiler = new ClassFileToJavaSourceDecompiler();
decompiler.decompile(preferences, loader, printer, internalPath); decompiler.decompile(loader, printer, internalPath, preferences.getPreferences());
String decompiledSource; String decompiledSource;
decompiledSource = DiskReader.loadAsString(tempJava.getAbsolutePath()); decompiledSource = DiskReader.loadAsString(tempJava.getAbsolutePath());