2.4.0 Release
12/19/2014 - Afffsdd made the Bytecode Viewer directory hidden. 12/19/2014 - Added save Java file as, for singular class file decompilation (this is threaded). 12/19/2014 - Removed unused Bytecode Decompiler debug code. 12/20/2014 - Made a new outdated pane - http://i.imgur.com/xMxkwJ9.png 12/20/2014 - Added an expand/collapse the packages in the file navigator. 12/20/2014 - Moved all of the settings to the.bytecode.club.bytecodeviewer.Settings 12/20/2014 - If the class file does not start with CAFEBABE it won't be processed. 12/20/2014 - Properly handled file not found error. 12/21/2014 - Fixed the Refresh Class causing a dupe.
This commit is contained in:
parent
a42ba6949e
commit
e88eff5e32
16 changed files with 783 additions and 497 deletions
Binary file not shown.
11
README.txt
11
README.txt
|
@ -209,4 +209,13 @@ Changelog:
|
||||||
12/18/2014 - Fixed not escaping the Java strings by default for the Bytecode decompiler. - http://i.imgur.com/YrRnZA7.png
|
12/18/2014 - Fixed not escaping the Java strings by default for the Bytecode decompiler. - http://i.imgur.com/YrRnZA7.png
|
||||||
12/18/2014 - Used Eclipse's code formatting tool and formatted the code
|
12/18/2014 - Used Eclipse's code formatting tool and formatted the code
|
||||||
12/19/2014 - Priav03 fixed the quick class searcher.
|
12/19/2014 - Priav03 fixed the quick class searcher.
|
||||||
|
--- 2.4.0 ---:
|
||||||
|
12/19/2014 - Afffsdd made the Bytecode Viewer directory hidden.
|
||||||
|
12/19/2014 - Added save Java file as, for singular class file decompilation (this is threaded).
|
||||||
|
12/19/2014 - Removed unused Bytecode Decompiler debug code.
|
||||||
|
12/20/2014 - Made a new outdated pane - http://i.imgur.com/xMxkwJ9.png
|
||||||
|
12/20/2014 - Added an expand/collapse the packages in the file navigator.
|
||||||
|
12/20/2014 - Moved all of the settings to the.bytecode.club.bytecodeviewer.Settings
|
||||||
|
12/20/2014 - If the class file does not start with CAFEBABE it won't be processed.
|
||||||
|
12/20/2014 - Properly handled file not found error.
|
||||||
|
12/21/2014 - Fixed the Refresh Class causing a dupe.
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
2.3.0
|
2.4.0
|
File diff suppressed because one or more lines are too long
|
@ -35,6 +35,7 @@ public class JarUtils {
|
||||||
final HashMap<String, ClassNode> clazzList) throws IOException {
|
final HashMap<String, ClassNode> clazzList) throws IOException {
|
||||||
jis = new JarInputStream(new FileInputStream(jarFile));
|
jis = new JarInputStream(new FileInputStream(jarFile));
|
||||||
while ((entry = jis.getNextJarEntry()) != null) {
|
while ((entry = jis.getNextJarEntry()) != null) {
|
||||||
|
try {
|
||||||
final String name = entry.getName();
|
final String name = entry.getName();
|
||||||
if (!name.endsWith(".class")) {
|
if (!name.endsWith(".class")) {
|
||||||
BytecodeViewer.loadedResources.put(name, getBytes(jis));
|
BytecodeViewer.loadedResources.put(name, getBytes(jis));
|
||||||
|
@ -42,11 +43,24 @@ public class JarUtils {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final ClassNode cn = getNode(getBytes(jis));
|
byte[] bytes = getBytes(jis);
|
||||||
|
String cafebabe = String.format("%02X", bytes[0])
|
||||||
|
+ String.format("%02X", bytes[1])
|
||||||
|
+ String.format("%02X", bytes[2])
|
||||||
|
+ String.format("%02X", bytes[3]);
|
||||||
|
if(cafebabe.toLowerCase().equals("cafebabe")) {
|
||||||
|
final ClassNode cn = getNode(bytes);
|
||||||
clazzList.put(cn.name, cn);
|
clazzList.put(cn.name, cn);
|
||||||
|
} else {
|
||||||
|
System.out.println(jarFile+">"+name+": Header does not start with CAFEBABE, ignoring.");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
jis.closeEntry();
|
jis.closeEntry();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
jis.close();
|
jis.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
267
src/the/bytecode/club/bytecodeviewer/Settings.java
Normal file
267
src/the/bytecode/club/bytecodeviewer/Settings.java
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer;
|
||||||
|
|
||||||
|
import me.konloch.kontainer.io.DiskReader;
|
||||||
|
import me.konloch.kontainer.io.DiskWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to handle loading/saving the GUI (options).
|
||||||
|
*
|
||||||
|
* @author Konloch
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Settings {
|
||||||
|
|
||||||
|
public static void saveGUI() {
|
||||||
|
try {
|
||||||
|
DiskWriter.replaceFile(BytecodeViewer.settingsName, "", false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.rbr.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.rsy.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.din.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.dc4.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.das.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hes.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hdc.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.dgs.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.ner.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.den.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.rgn.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.bto.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.nns.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.uto.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.udv.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.rer.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.fdi.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.asc.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodeenumswitch.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.sugarenums.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodestringswitch.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.arrayiter.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.collectioniter.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.innerclasses.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.removeboilerplate.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.removeinnerclasssynthetics.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodelambdas.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hidebridgemethods.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.liftconstructorinit.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.removedeadmethods.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.removebadgenerics.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.sugarasserts.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.sugarboxing.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.showversion.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.decodefinally.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.tidymonitors.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.lenient.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.dumpclasspath.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.comments.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forcetopsort.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forcetopsortaggress.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.stringbuffer.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.stringbuilder.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.silent.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.recover.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.eclipse.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.override.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.showinferrable.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.aexagg.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forcecondpropagate.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hideutf.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hidelongstrings.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.commentmonitor.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.allowcorrecting.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.labelledblocks.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.j14classobj.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.hidelangimports.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.recoverytypeclash.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.recoverytypehints.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forceturningifs.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forloopaggcapture.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.forceexceptionprune.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmShowDebugLine.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmSimplifyMemberReferences.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.mnMergeVariables.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_1.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_2.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_3.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_4.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_5.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_6.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_7.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_8.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_9.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_10.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_11.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmAppendBrackets.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.debugHelpers.isSelected()), false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "deprecated", false);
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, String.valueOf(BytecodeViewer.viewer.chckbxmntmNewCheckItem_12.isSelected()), false);
|
||||||
|
if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1None.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1Proc.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "1", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1CFR.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "2", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1Fern.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "3", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1Bytecode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "4", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup1.isSelected(BytecodeViewer.viewer.panel1Hexcode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "5", false);
|
||||||
|
|
||||||
|
if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2None.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2Proc.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "1", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2CFR.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "2", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2Fern.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "3", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2Bytecode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "4", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup2.isSelected(BytecodeViewer.viewer.panel2Hexcode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "5", false);
|
||||||
|
|
||||||
|
if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3None.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "0", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3Proc.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "1", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3CFR.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "2", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3Fern.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "3", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3Bytecode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "4", false);
|
||||||
|
else if(BytecodeViewer.viewer.decompilerGroup3.isSelected(BytecodeViewer.viewer.panel3Hexcode.getModel()))
|
||||||
|
DiskWriter.writeNewLine(BytecodeViewer.settingsName, "5", false);
|
||||||
|
} catch(Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadGUI() { //utilizes the Disk Reader's caching system.
|
||||||
|
try {
|
||||||
|
BytecodeViewer.viewer.rbr.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 1, true)));
|
||||||
|
BytecodeViewer.viewer.rsy.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 2, false)));
|
||||||
|
BytecodeViewer.viewer.din.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 3, false)));
|
||||||
|
BytecodeViewer.viewer.dc4.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 4, false)));
|
||||||
|
BytecodeViewer.viewer.das.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 5, false)));
|
||||||
|
BytecodeViewer.viewer.hes.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 6, false)));
|
||||||
|
BytecodeViewer.viewer.hdc.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 7, false)));
|
||||||
|
BytecodeViewer.viewer.dgs.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 8, false)));
|
||||||
|
BytecodeViewer.viewer.ner.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 9, false)));
|
||||||
|
BytecodeViewer.viewer.den.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 10, false)));
|
||||||
|
BytecodeViewer.viewer.rgn.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 11, false)));
|
||||||
|
BytecodeViewer.viewer.bto.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 12, false)));
|
||||||
|
BytecodeViewer.viewer.nns.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 13, false)));
|
||||||
|
BytecodeViewer.viewer.uto.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 14, false)));
|
||||||
|
BytecodeViewer.viewer.udv.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 15, false)));
|
||||||
|
BytecodeViewer.viewer.rer.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 16, false)));
|
||||||
|
BytecodeViewer.viewer.fdi.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 17, false)));
|
||||||
|
BytecodeViewer.viewer.asc.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 18, false)));
|
||||||
|
BytecodeViewer.viewer.decodeenumswitch.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 19, false)));
|
||||||
|
BytecodeViewer.viewer.sugarenums.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 20, false)));
|
||||||
|
BytecodeViewer.viewer.decodestringswitch.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 21, false)));
|
||||||
|
BytecodeViewer.viewer.arrayiter.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 22, false)));
|
||||||
|
BytecodeViewer.viewer.collectioniter.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 23, false)));
|
||||||
|
BytecodeViewer.viewer.innerclasses.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 24, false)));
|
||||||
|
BytecodeViewer.viewer.removeboilerplate.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 25, false)));
|
||||||
|
BytecodeViewer.viewer.removeinnerclasssynthetics.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 26, false)));
|
||||||
|
BytecodeViewer.viewer.decodelambdas.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 27, false)));
|
||||||
|
BytecodeViewer.viewer.hidebridgemethods.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 28, false)));
|
||||||
|
BytecodeViewer.viewer.liftconstructorinit.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 29, false)));
|
||||||
|
BytecodeViewer.viewer.removedeadmethods.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 30, false)));
|
||||||
|
BytecodeViewer.viewer.removebadgenerics.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 31, false)));
|
||||||
|
BytecodeViewer.viewer.sugarasserts.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 32, false)));
|
||||||
|
BytecodeViewer.viewer.sugarboxing.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 33, false)));
|
||||||
|
BytecodeViewer.viewer.showversion.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 34, false)));
|
||||||
|
BytecodeViewer.viewer.decodefinally.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 35, false)));
|
||||||
|
BytecodeViewer.viewer.tidymonitors.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 36, false)));
|
||||||
|
BytecodeViewer.viewer.lenient.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 37, false)));
|
||||||
|
BytecodeViewer.viewer.dumpclasspath.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 38, false)));
|
||||||
|
BytecodeViewer.viewer.comments.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 39, false)));
|
||||||
|
BytecodeViewer.viewer.forcetopsort.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 40, false)));
|
||||||
|
BytecodeViewer.viewer.forcetopsortaggress.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 41, false)));
|
||||||
|
BytecodeViewer.viewer.stringbuffer.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 42, false)));
|
||||||
|
BytecodeViewer.viewer.stringbuilder.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 43, false)));
|
||||||
|
BytecodeViewer.viewer.silent.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 44, false)));
|
||||||
|
BytecodeViewer.viewer.recover.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 45, false)));
|
||||||
|
BytecodeViewer.viewer.eclipse.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 46, false)));
|
||||||
|
BytecodeViewer.viewer.override.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 47, false)));
|
||||||
|
BytecodeViewer.viewer.showinferrable.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 48, false)));
|
||||||
|
BytecodeViewer.viewer.aexagg.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 49, false)));
|
||||||
|
BytecodeViewer.viewer.forcecondpropagate.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 50, false)));
|
||||||
|
BytecodeViewer.viewer.hideutf.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 51, false)));
|
||||||
|
BytecodeViewer.viewer.hidelongstrings.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 52, false)));
|
||||||
|
BytecodeViewer.viewer.commentmonitor.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 53, false)));
|
||||||
|
BytecodeViewer.viewer.allowcorrecting.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 54, false)));
|
||||||
|
BytecodeViewer.viewer.labelledblocks.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 55, false)));
|
||||||
|
BytecodeViewer.viewer.j14classobj.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 56, false)));
|
||||||
|
BytecodeViewer.viewer.hidelangimports.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 57, false)));
|
||||||
|
BytecodeViewer.viewer.recoverytypeclash.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 58, false)));
|
||||||
|
BytecodeViewer.viewer.recoverytypehints.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 59, false)));
|
||||||
|
BytecodeViewer.viewer.forceturningifs.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 60, false)));
|
||||||
|
BytecodeViewer.viewer.forloopaggcapture.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 61, false)));
|
||||||
|
BytecodeViewer.viewer.forceexceptionprune.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 62, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmShowDebugLine.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 63, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmSimplifyMemberReferences.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 64, false)));
|
||||||
|
BytecodeViewer.viewer.mnMergeVariables.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 65, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_1.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 66, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_2.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 67, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_3.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 68, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_4.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 69, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_5.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 70, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_6.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 71, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_7.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 72, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_8.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 73, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_9.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 74, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_10.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 75, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_11.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 76, false)));
|
||||||
|
BytecodeViewer.viewer.chckbxmntmAppendBrackets.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 77, false)));
|
||||||
|
BytecodeViewer.viewer.debugHelpers.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 78, false)));
|
||||||
|
//79 is deprecated
|
||||||
|
BytecodeViewer.viewer.chckbxmntmNewCheckItem_12.setSelected(Boolean.parseBoolean(DiskReader.loadString(BytecodeViewer.settingsName, 80, false)));
|
||||||
|
int decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 81, false));
|
||||||
|
if(decompiler == 0)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1None.getModel(), true);
|
||||||
|
else if(decompiler == 1)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1Proc.getModel(), true);
|
||||||
|
else if(decompiler == 2)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1CFR.getModel(), true);
|
||||||
|
else if(decompiler == 3)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1Fern.getModel(), true);
|
||||||
|
else if(decompiler == 4)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1Bytecode.getModel(), true);
|
||||||
|
else if(decompiler == 5)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup1.setSelected(BytecodeViewer.viewer.panel1Hexcode.getModel(), true);
|
||||||
|
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 82, false));
|
||||||
|
if(decompiler == 0)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2None.getModel(), true);
|
||||||
|
else if(decompiler == 1)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2Proc.getModel(), true);
|
||||||
|
else if(decompiler == 2)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2CFR.getModel(), true);
|
||||||
|
else if(decompiler == 3)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2Fern.getModel(), true);
|
||||||
|
else if(decompiler == 4)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2Bytecode.getModel(), true);
|
||||||
|
else if(decompiler == 5)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup2.setSelected(BytecodeViewer.viewer.panel2Hexcode.getModel(), true);
|
||||||
|
decompiler = Integer.parseInt(DiskReader.loadString(BytecodeViewer.settingsName, 83, false));
|
||||||
|
if(decompiler == 0)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3None.getModel(), true);
|
||||||
|
else if(decompiler == 1)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3Proc.getModel(), true);
|
||||||
|
else if(decompiler == 2)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3CFR.getModel(), true);
|
||||||
|
else if(decompiler == 3)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3Fern.getModel(), true);
|
||||||
|
else if(decompiler == 4)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3Bytecode.getModel(), true);
|
||||||
|
else if(decompiler == 5)
|
||||||
|
BytecodeViewer.viewer.decompilerGroup3.setSelected(BytecodeViewer.viewer.panel3Hexcode.getModel(), true);
|
||||||
|
} catch(Exception e) {
|
||||||
|
//ignore because errors are expected, first start up and outdated settings.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -42,7 +42,6 @@ public class MethodNodeDecompiler {
|
||||||
if (s.length() > 0)
|
if (s.length() > 0)
|
||||||
sb.append(" ");
|
sb.append(" ");
|
||||||
|
|
||||||
System.out.println(m.name);
|
|
||||||
if (m.name.equals("<init>")) {
|
if (m.name.equals("<init>")) {
|
||||||
sb.append(class_);
|
sb.append(class_);
|
||||||
} else if (m.name.equals("<clinit>")) {
|
} else if (m.name.equals("<clinit>")) {
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
import me.konloch.kontainer.io.DiskReader;
|
import me.konloch.kontainer.io.DiskReader;
|
||||||
|
import me.konloch.kontainer.io.DiskWriter;
|
||||||
|
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
|
@ -29,6 +30,12 @@ import the.bytecode.club.bytecodeviewer.JarUtils;
|
||||||
|
|
||||||
public class CFRDecompiler extends JavaDecompiler {
|
public class CFRDecompiler extends JavaDecompiler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decompileToClass(String className, String classNameSaved) {
|
||||||
|
String contents = decompileClassNode(BytecodeViewer.getClassNode(className));
|
||||||
|
DiskWriter.replaceFile(classNameSaved, contents, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String decompileClassNode(ClassNode cn) {
|
public String decompileClassNode(ClassNode cn) {
|
||||||
final ClassWriter cw = new ClassWriter(0);
|
final ClassWriter cw = new ClassWriter(0);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import me.konloch.kontainer.io.DiskReader;
|
import me.konloch.kontainer.io.DiskReader;
|
||||||
|
import me.konloch.kontainer.io.DiskWriter;
|
||||||
|
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
|
@ -22,6 +23,12 @@ import the.bytecode.club.bytecodeviewer.JarUtils;
|
||||||
|
|
||||||
public class FernFlowerDecompiler extends JavaDecompiler {
|
public class FernFlowerDecompiler extends JavaDecompiler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decompileToClass(String className, String classNameSaved) {
|
||||||
|
String contents = decompileClassNode(BytecodeViewer.getClassNode(className));
|
||||||
|
DiskWriter.replaceFile(classNameSaved, contents, false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decompileToZip(String zipName) {
|
public void decompileToZip(String zipName) {
|
||||||
File tempZip = new File(BytecodeViewer.tempDirectory + "temp.zip");
|
File tempZip = new File(BytecodeViewer.tempDirectory + "temp.zip");
|
||||||
|
|
|
@ -16,6 +16,8 @@ public abstract class JavaDecompiler {
|
||||||
|
|
||||||
public abstract void decompileToZip(String zipName);
|
public abstract void decompileToZip(String zipName);
|
||||||
|
|
||||||
|
public abstract void decompileToClass(String className, String classNameSaved);
|
||||||
|
|
||||||
File tempF = null;
|
File tempF = null;
|
||||||
|
|
||||||
public int getClassNumber(String start, String ext) {
|
public int getClassNumber(String start, String ext) {
|
||||||
|
|
|
@ -18,6 +18,8 @@ import java.util.jar.JarFile;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import me.konloch.kontainer.io.DiskWriter;
|
||||||
|
|
||||||
import org.objectweb.asm.ClassWriter;
|
import org.objectweb.asm.ClassWriter;
|
||||||
import org.objectweb.asm.tree.ClassNode;
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
|
|
||||||
|
@ -46,6 +48,12 @@ import the.bytecode.club.bytecodeviewer.JarUtils;
|
||||||
|
|
||||||
public class ProcyonDecompiler extends JavaDecompiler {
|
public class ProcyonDecompiler extends JavaDecompiler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decompileToClass(String className, String classNameSaved) {
|
||||||
|
String contents = decompileClassNode(BytecodeViewer.getClassNode(className));
|
||||||
|
DiskWriter.replaceFile(classNameSaved, contents, false);
|
||||||
|
}
|
||||||
|
|
||||||
public DecompilerSettings getDecompilerSettings() {
|
public DecompilerSettings getDecompilerSettings() {
|
||||||
DecompilerSettings settings = new DecompilerSettings();
|
DecompilerSettings settings = new DecompilerSettings();
|
||||||
settings.setAlwaysGenerateExceptionVariableForCatchBlocks(BytecodeViewer.viewer.chckbxmntmNewCheckItem_6
|
settings.setAlwaysGenerateExceptionVariableForCatchBlocks(BytecodeViewer.viewer.chckbxmntmNewCheckItem_6
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class AboutWindow extends JFrame {
|
||||||
txtrBytecodeViewerIs.setWrapStyleWord(true);
|
txtrBytecodeViewerIs.setWrapStyleWord(true);
|
||||||
getContentPane().add(txtrBytecodeViewerIs, "name_140466526081695");
|
getContentPane().add(txtrBytecodeViewerIs, "name_140466526081695");
|
||||||
txtrBytecodeViewerIs
|
txtrBytecodeViewerIs
|
||||||
.setText("Bytecode Viewer 2.3.0 is an open source program\r\ndeveloped by Konloch (konloch@gmail.com)\r\nDir: "
|
.setText("Bytecode Viewer "+BytecodeViewer.version+" is an open source program\r\ndeveloped by Konloch (konloch@gmail.com)\r\nDir: "
|
||||||
+ BytecodeViewer.getBCVDirectory()
|
+ BytecodeViewer.getBCVDirectory()
|
||||||
+ "\r\n\r\nIt uses code from the following:\r\n J-RET by WaterWolf\r\n JHexPane by Sam Koivu\r\n RSyntaxTextArea by Bobbylight\r\n Commons IO by Apache\r\n ASM by OW2\r\n CFIDE by Bibl\r\n FernFlower by Stiver\r\n Procyon by Mstrobel\r\n CFR by Lee Benfield\r\n\r\nIf you're interested in Java Reverse\r\nEngineering, join The Bytecode Club\r\nhttps://the.bytecode.club");
|
+ "\r\n\r\nIt uses code from the following:\r\n J-RET by WaterWolf\r\n JHexPane by Sam Koivu\r\n RSyntaxTextArea by Bobbylight\r\n Commons IO by Apache\r\n ASM by OW2\r\n CFIDE by Bibl\r\n FernFlower by Stiver\r\n Procyon by Mstrobel\r\n CFR by Lee Benfield\r\n\r\nIf you're interested in Java Reverse\r\nEngineering, join The Bytecode Club\r\nhttps://the.bytecode.club");
|
||||||
txtrBytecodeViewerIs.setEnabled(false);
|
txtrBytecodeViewerIs.setEnabled(false);
|
||||||
|
|
|
@ -420,7 +420,7 @@ public class ClassViewer extends JPanel {
|
||||||
hex.setSize(0, Integer.MAX_VALUE);
|
hex.setSize(0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
BytecodeViewer.viewer.setIcon(true);
|
BytecodeViewer.viewer.setIcon(true);
|
||||||
startPaneUpdater();
|
startPaneUpdater(null);
|
||||||
this.addComponentListener(new ComponentAdapter() {
|
this.addComponentListener(new ComponentAdapter() {
|
||||||
public void componentResized(ComponentEvent e) {
|
public void componentResized(ComponentEvent e) {
|
||||||
resetDivider();
|
resetDivider();
|
||||||
|
@ -454,7 +454,7 @@ public class ClassViewer extends JPanel {
|
||||||
static CFRDecompiler cfr_dc = new CFRDecompiler();
|
static CFRDecompiler cfr_dc = new CFRDecompiler();
|
||||||
PaneUpdaterThread t;
|
PaneUpdaterThread t;
|
||||||
|
|
||||||
public void startPaneUpdater() {
|
public void startPaneUpdater(final JButton button) {
|
||||||
if (BytecodeViewer.viewer.decompilerGroup1
|
if (BytecodeViewer.viewer.decompilerGroup1
|
||||||
.isSelected(BytecodeViewer.viewer.panel1None.getModel()))
|
.isSelected(BytecodeViewer.viewer.panel1None.getModel()))
|
||||||
pane1 = 0;
|
pane1 = 0;
|
||||||
|
@ -515,6 +515,7 @@ public class ClassViewer extends JPanel {
|
||||||
t = new PaneUpdaterThread() {
|
t = new PaneUpdaterThread() {
|
||||||
@Override
|
@Override
|
||||||
public void doShit() {
|
public void doShit() {
|
||||||
|
try {
|
||||||
panel1.removeAll();
|
panel1.removeAll();
|
||||||
panel2.removeAll();
|
panel2.removeAll();
|
||||||
panel3.removeAll();
|
panel3.removeAll();
|
||||||
|
@ -692,6 +693,12 @@ public class ClassViewer extends JPanel {
|
||||||
|
|
||||||
resetDivider();
|
resetDivider();
|
||||||
BytecodeViewer.viewer.setIcon(false);
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch(Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(e);
|
||||||
|
} finally {
|
||||||
|
if(button != null)
|
||||||
|
button.setEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,6 +7,8 @@ import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.FocusEvent;
|
import java.awt.event.FocusEvent;
|
||||||
import java.awt.event.FocusListener;
|
import java.awt.event.FocusListener;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
|
@ -18,6 +20,7 @@ import java.util.Enumeration;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
|
@ -40,6 +43,8 @@ public class FileNavigationPane extends VisibleComponent implements
|
||||||
|
|
||||||
FileChangeNotifier fcn;
|
FileChangeNotifier fcn;
|
||||||
JCheckBox exact = new JCheckBox("Exact");
|
JCheckBox exact = new JCheckBox("Exact");
|
||||||
|
JButton open = new JButton("+");
|
||||||
|
JButton close = new JButton("-");
|
||||||
|
|
||||||
MyTreeNode treeRoot = new MyTreeNode("Root");
|
MyTreeNode treeRoot = new MyTreeNode("Root");
|
||||||
MyTree tree;
|
MyTree tree;
|
||||||
|
@ -50,6 +55,27 @@ public class FileNavigationPane extends VisibleComponent implements
|
||||||
|
|
||||||
this.fcn = fcn;
|
this.fcn = fcn;
|
||||||
|
|
||||||
|
open.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
final TreeNode root = (TreeNode) tree.getModel().getRoot();
|
||||||
|
expandAll(tree, new TreePath(root), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
close.addActionListener(new ActionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
final TreeNode root = (TreeNode) tree.getModel().getRoot();
|
||||||
|
expandAll(tree, new TreePath(root), false);
|
||||||
|
tree.expandPath(new TreePath(root));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
getContentPane().setLayout(new BorderLayout());
|
getContentPane().setLayout(new BorderLayout());
|
||||||
|
|
||||||
this.tree = new MyTree(treeRoot);
|
this.tree = new MyTree(treeRoot);
|
||||||
|
@ -190,7 +216,13 @@ public class FileNavigationPane extends VisibleComponent implements
|
||||||
JPanel p2 = new JPanel();
|
JPanel p2 = new JPanel();
|
||||||
p2.setLayout(new BorderLayout());
|
p2.setLayout(new BorderLayout());
|
||||||
p2.add(quickSearch, BorderLayout.NORTH);
|
p2.add(quickSearch, BorderLayout.NORTH);
|
||||||
p2.add(exact, BorderLayout.SOUTH);
|
JPanel p3 = new JPanel(new BorderLayout());
|
||||||
|
p3.add(exact, BorderLayout.WEST);
|
||||||
|
JPanel p4 = new JPanel(new BorderLayout());
|
||||||
|
p4.add(open, BorderLayout.EAST);
|
||||||
|
p4.add(close, BorderLayout.WEST);
|
||||||
|
p3.add(p4, BorderLayout.EAST);
|
||||||
|
p2.add(p3, BorderLayout.SOUTH);
|
||||||
|
|
||||||
getContentPane().add(p2, BorderLayout.SOUTH);
|
getContentPane().add(p2, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
@ -243,15 +275,6 @@ public class FileNavigationPane extends VisibleComponent implements
|
||||||
// expandAll(tree, true);
|
// expandAll(tree, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If expand is true, expands all nodes in the tree.
|
|
||||||
// Otherwise, collapses all nodes in the tree.
|
|
||||||
public void expandAll(final JTree tree, final boolean expand) {
|
|
||||||
final TreeNode root = (TreeNode) tree.getModel().getRoot();
|
|
||||||
|
|
||||||
// Traverse tree from root
|
|
||||||
expandAll(tree, new TreePath(root), expand);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private void expandAll(final JTree tree, final TreePath parent,
|
private void expandAll(final JTree tree, final TreePath parent,
|
||||||
final boolean expand) {
|
final boolean expand) {
|
||||||
|
|
|
@ -291,6 +291,8 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
"Bytecode");
|
"Bytecode");
|
||||||
public final JRadioButtonMenuItem panel3Hexcode = new JRadioButtonMenuItem(
|
public final JRadioButtonMenuItem panel3Hexcode = new JRadioButtonMenuItem(
|
||||||
"Hexcode");
|
"Hexcode");
|
||||||
|
private final JMenuItem mntmNewMenuItem_12 = new JMenuItem("Save Java File..");
|
||||||
|
public WorkPane workPane = new WorkPane(this);
|
||||||
|
|
||||||
public void setC(boolean busy) {
|
public void setC(boolean busy) {
|
||||||
if (busy) {
|
if (busy) {
|
||||||
|
@ -589,6 +591,89 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mntmNewMenuItem_12.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent arg0) {
|
||||||
|
if(workPane.getCurrentClass() == null) {
|
||||||
|
BytecodeViewer.showMessage("First open a class file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String s = workPane.getCurrentClass().name;
|
||||||
|
|
||||||
|
JFileChooser fc = new JFileChooser();
|
||||||
|
fc.setFileFilter(new JavaFileFilter());
|
||||||
|
fc.setFileHidingEnabled(false);
|
||||||
|
fc.setAcceptAllFileFilterUsed(false);
|
||||||
|
int returnVal = fc.showSaveDialog(MainViewerGUI.this);
|
||||||
|
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File file = fc.getSelectedFile();
|
||||||
|
BytecodeViewer.viewer.setIcon(true);
|
||||||
|
final String path = appendClass(file);// cheap hax cause
|
||||||
|
// string is final
|
||||||
|
|
||||||
|
JOptionPane pane = new JOptionPane(
|
||||||
|
"What decompiler will you use?");
|
||||||
|
Object[] options = new String[] { "Procyon", "CFR",
|
||||||
|
"Fernflower", "Cancel" };
|
||||||
|
pane.setOptions(options);
|
||||||
|
JDialog dialog = pane.createDialog(BytecodeViewer.viewer,
|
||||||
|
"Bytecode Viewer - Select Decompiler");
|
||||||
|
dialog.setVisible(true);
|
||||||
|
Object obj = pane.getValue();
|
||||||
|
int result = -1;
|
||||||
|
for (int k = 0; k < options.length; k++)
|
||||||
|
if (options[k].equals(obj))
|
||||||
|
result = k;
|
||||||
|
|
||||||
|
if (result == 0) {
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
proc_dc.decompileToClass(s,path);
|
||||||
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
if (result == 1) {
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
cfr_dc.decompileToClass(s,path);
|
||||||
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
if (result == 2) {
|
||||||
|
Thread t = new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
ff_dc.decompileToClass(s,path);
|
||||||
|
BytecodeViewer.viewer.setIcon(false);
|
||||||
|
} catch (Exception e) {
|
||||||
|
new the.bytecode.club.bytecodeviewer.api.ExceptionUI(
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mnNewMenu.add(mntmNewMenuItem_12);
|
||||||
|
|
||||||
mnNewMenu.add(mntmNewMenuItem);
|
mnNewMenu.add(mntmNewMenuItem);
|
||||||
|
|
||||||
|
@ -982,7 +1067,7 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
});
|
});
|
||||||
|
|
||||||
setSize(new Dimension(800, 400));
|
setSize(new Dimension(800, 400));
|
||||||
setTitle("Bytecode Viewer 2.3.0 - https://the.bytecode.club - @Konloch");
|
setTitle("Bytecode Viewer "+BytecodeViewer.version+" - https://the.bytecode.club - @Konloch");
|
||||||
getContentPane().setLayout(
|
getContentPane().setLayout(
|
||||||
new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
|
new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
|
||||||
|
|
||||||
|
@ -999,15 +1084,14 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
// panel.add(sp1);
|
// panel.add(sp1);
|
||||||
cn.setPreferredSize(new Dimension(200, 50));
|
cn.setPreferredSize(new Dimension(200, 50));
|
||||||
cn.setMaximumSize(new Dimension(200, 2147483647));
|
cn.setMaximumSize(new Dimension(200, 2147483647));
|
||||||
WorkPane cv = new WorkPane(this);
|
sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp1, workPane);
|
||||||
sp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sp1, cv);
|
|
||||||
getContentPane().add(sp2);
|
getContentPane().add(sp2);
|
||||||
sp2.setResizeWeight(0.05);
|
sp2.setResizeWeight(0.05);
|
||||||
sp1.setResizeWeight(0.5);
|
sp1.setResizeWeight(0.5);
|
||||||
rfComps.add(cn);
|
rfComps.add(cn);
|
||||||
|
|
||||||
rfComps.add(s);
|
rfComps.add(s);
|
||||||
rfComps.add(cv);
|
rfComps.add(workPane);
|
||||||
this.setLocationRelativeTo(null);
|
this.setLocationRelativeTo(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1018,6 +1102,13 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String appendClass(File file) {
|
||||||
|
String path = file.getAbsolutePath();
|
||||||
|
if (!path.endsWith(".class"))
|
||||||
|
path = path + ".class";
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void openClassFile(final String name, final ClassNode cn) {
|
public void openClassFile(final String name, final ClassNode cn) {
|
||||||
for (final VisibleComponent vc : rfComps) {
|
for (final VisibleComponent vc : rfComps) {
|
||||||
|
@ -1156,4 +1247,34 @@ public class MainViewerGUI extends JFrame implements FileChangeNotifier {
|
||||||
return ext;
|
return ext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class JavaFileFilter extends FileFilter {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File f) {
|
||||||
|
if (f.isDirectory())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
String extension = getExtension(f);
|
||||||
|
if (extension != null)
|
||||||
|
return (extension.equals("Java"));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return "Java Source Files";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtension(File f) {
|
||||||
|
String ext = null;
|
||||||
|
String s = f.getName();
|
||||||
|
int i = s.lastIndexOf('.');
|
||||||
|
|
||||||
|
if (i > 0 && i < s.length() - 1)
|
||||||
|
ext = s.substring(i + 1).toLowerCase();
|
||||||
|
|
||||||
|
return ext;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -119,8 +119,9 @@ public class WorkPane extends VisibleComponent implements ActionListener {
|
||||||
if (src == refreshClass) {
|
if (src == refreshClass) {
|
||||||
final Component tabComp = tabs.getSelectedComponent();
|
final Component tabComp = tabs.getSelectedComponent();
|
||||||
if (tabComp != null) {
|
if (tabComp != null) {
|
||||||
|
src.setEnabled(false);
|
||||||
BytecodeViewer.viewer.setC(true);
|
BytecodeViewer.viewer.setC(true);
|
||||||
((ClassViewer) tabComp).startPaneUpdater();
|
((ClassViewer) tabComp).startPaneUpdater(src);
|
||||||
BytecodeViewer.viewer.setC(false);
|
BytecodeViewer.viewer.setC(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue