Skip to content

Commit 4f60170

Browse files
author
emmanue1
committed
Update JD-Core
1 parent 3218e9f commit 4f60170

18 files changed

+471
-810
lines changed

app/src/main/java/org/jd/gui/controller/MainController.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,15 @@ public void show(List<File> files) {
120120
// Background initializations
121121
executor.schedule(() -> {
122122
// Background service initialization
123-
ContextualActionsFactoryService.getInstance();
124-
ContainerFactoryService.getInstance();
123+
UriLoaderService.getInstance();
125124
FileLoaderService.getInstance();
125+
ContainerFactoryService.getInstance();
126126
IndexerService.getInstance();
127-
PasteHandlerService.getInstance();
128-
PreferencesPanelService.getInstance();
129127
TreeNodeFactoryService.getInstance();
130128
TypeFactoryService.getInstance();
131-
UriLoaderService.getInstance();
129+
PasteHandlerService.getInstance();
130+
PreferencesPanelService.getInstance();
131+
ContextualActionsFactoryService.getInstance();
132132

133133
SwingUtil.invokeLater(() -> {
134134
// Populate recent files menu

app/src/main/java/org/jd/gui/view/component/panel/TabbedPanel.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ public void addPage(String title, Icon icon, String tip, T page) {
9090
tabCloseButton.addMouseListener(new MouseListener() {
9191
@Override public void mousePressed(MouseEvent e) {}
9292
@Override public void mouseReleased(MouseEvent e) {}
93-
@Override public void mouseEntered(MouseEvent e) { ((JLabel)e.getSource()).setIcon(TabbedPanel.CLOSE_ACTIVE_ICON); }
94-
@Override public void mouseExited(MouseEvent e) { ((JLabel)e.getSource()).setIcon(TabbedPanel.CLOSE_ICON); }
93+
@Override public void mouseEntered(MouseEvent e) { ((JLabel)e.getSource()).setIcon(CLOSE_ACTIVE_ICON); }
94+
@Override public void mouseExited(MouseEvent e) { ((JLabel)e.getSource()).setIcon(CLOSE_ICON); }
9595
@Override public void mouseClicked(MouseEvent e) { removeComponent(page); }
9696
});
9797

@@ -129,12 +129,12 @@ protected void setSelectedIndex(int index) {
129129

130130
@SuppressWarnings("unchecked")
131131
protected T showPage(URI uri) {
132-
String u1 = uri.toString();
132+
String u1 = uri.getPath();
133133
int i = tabbedPane.getTabCount();
134134

135135
while (i-- > 0) {
136136
T page = (T)tabbedPane.getComponentAt(i);
137-
String u2 = page.getUri().toString();
137+
String u2 = page.getUri().getPath();
138138
if (u1.startsWith(u2)) {
139139
tabbedPane.setSelectedIndex(i);
140140
return page;

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ apply plugin: 'distribution'
1313
apply plugin: 'edu.sc.seis.launch4j'
1414
apply plugin: 'nebula.ospackage'
1515

16-
1716
// Common configuration //
18-
version='1.4.2'
17+
rootProject.version='1.4.2'
18+
rootProject.ext.set('jdCoreVersion', '1.0.0')
1919
targetCompatibility = '1.8'
2020

2121
allprojects {
@@ -77,7 +77,7 @@ jar {
7777
attributes 'Main-Class': 'org.jd.gui.App',
7878
'SplashScreen-Image': 'org/jd/gui/images/jd_icon_128.png',
7979
'JD-GUI-Version': project.version,
80-
'JD-Core-Version': '0.7.1'
80+
'JD-Core-Version': project.jdCoreVersion
8181
}
8282
exclude 'META-INF/licenses/**', 'META-INF/maven/**', 'META-INF/INDEX.LIST'
8383
duplicatesStrategy DuplicatesStrategy.EXCLUDE

services/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apply plugin: 'java'
33
dependencies {
44
compile 'com.fifesoft:rsyntaxtextarea:2.5.6'
55
compile 'org.ow2.asm:asm:7.1'
6-
compile 'jd:jd-core:0.7.1'
6+
compile 'org.jd:jd-core:' + parent.jdCoreVersion
77
compile project(':api')
88
testCompile 'junit:junit:4.12'
99
}

services/src/main/java/org/jd/gui/service/indexer/DirectoryIndexerProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ public void index(API api, Container.Entry entry, Indexes indexes) {
2323

2424
try {
2525
depth = Integer.valueOf(api.getPreferences().get("DirectoryIndexerPreferences.maximumDepth"));
26-
} catch (NumberFormatException e) {
27-
assert ExceptionUtil.printStackTrace(e);
26+
} catch (NumberFormatException ignore) {
2827
}
2928

3029
index(api, entry, indexes, depth);

services/src/main/java/org/jd/gui/service/preferencespanel/ClassFileSaverPreferencesProvider.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,25 @@
1515

1616
public class ClassFileSaverPreferencesProvider extends JPanel implements PreferencesPanel {
1717
protected static final String ESCAPE_UNICODE_CHARACTERS = "ClassFileSaverPreferences.escapeUnicodeCharacters";
18-
protected static final String OMIT_THIS_PREFIX = "ClassFileSaverPreferences.omitThisPrefix";
1918
protected static final String REALIGN_LINE_NUMBERS = "ClassFileSaverPreferences.realignLineNumbers";
20-
protected static final String WRITE_DEFAULT_CONSTRUCTOR = "ClassFileSaverPreferences.writeDefaultConstructor";
2119
protected static final String WRITE_LINE_NUMBERS = "ClassFileSaverPreferences.writeLineNumbers";
2220
protected static final String WRITE_METADATA = "ClassFileSaverPreferences.writeMetadata";
2321

2422
protected JCheckBox escapeUnicodeCharactersCheckBox;
25-
protected JCheckBox omitThisPrefixCheckBox;
2623
protected JCheckBox realignLineNumbersCheckBox;
27-
protected JCheckBox writeDefaultConstructorCheckBox;
2824
protected JCheckBox writeLineNumbersCheckBox;
2925
protected JCheckBox writeMetadataCheckBox;
3026

3127
public ClassFileSaverPreferencesProvider() {
3228
super(new GridLayout(0,1));
3329

3430
escapeUnicodeCharactersCheckBox = new JCheckBox("Escape unicode characters");
35-
omitThisPrefixCheckBox = new JCheckBox("Omit the prefix 'this' if possible");
3631
realignLineNumbersCheckBox = new JCheckBox("Realign line numbers");
37-
writeDefaultConstructorCheckBox = new JCheckBox("Write default constructor");
3832
writeLineNumbersCheckBox = new JCheckBox("Write original line numbers");
3933
writeMetadataCheckBox = new JCheckBox("Write metadata");
4034

4135
add(escapeUnicodeCharactersCheckBox);
42-
add(omitThisPrefixCheckBox);
4336
add(realignLineNumbersCheckBox);
44-
add(writeDefaultConstructorCheckBox);
4537
add(writeLineNumbersCheckBox);
4638
add(writeMetadataCheckBox);
4739
}
@@ -58,19 +50,15 @@ public ClassFileSaverPreferencesProvider() {
5850
@Override
5951
public void loadPreferences(Map<String, String> preferences) {
6052
escapeUnicodeCharactersCheckBox.setSelected("true".equals(preferences.get(ESCAPE_UNICODE_CHARACTERS)));
61-
omitThisPrefixCheckBox.setSelected("true".equals(preferences.get(OMIT_THIS_PREFIX)));
6253
realignLineNumbersCheckBox.setSelected(!"false".equals(preferences.get(REALIGN_LINE_NUMBERS)));
63-
writeDefaultConstructorCheckBox.setSelected("true".equals(preferences.get(WRITE_DEFAULT_CONSTRUCTOR)));
6454
writeLineNumbersCheckBox.setSelected(!"false".equals(preferences.get(WRITE_LINE_NUMBERS)));
6555
writeMetadataCheckBox.setSelected(!"false".equals(preferences.get(WRITE_METADATA)));
6656
}
6757

6858
@Override
6959
public void savePreferences(Map<String, String> preferences) {
7060
preferences.put(ESCAPE_UNICODE_CHARACTERS, Boolean.toString(escapeUnicodeCharactersCheckBox.isSelected()));
71-
preferences.put(OMIT_THIS_PREFIX, Boolean.toString(omitThisPrefixCheckBox.isSelected()));
7261
preferences.put(REALIGN_LINE_NUMBERS, Boolean.toString(realignLineNumbersCheckBox.isSelected()));
73-
preferences.put(WRITE_DEFAULT_CONSTRUCTOR, Boolean.toString(writeDefaultConstructorCheckBox.isSelected()));
7462
preferences.put(WRITE_LINE_NUMBERS, Boolean.toString(writeLineNumbersCheckBox.isSelected()));
7563
preferences.put(WRITE_METADATA, Boolean.toString(writeMetadataCheckBox.isSelected()));
7664
}

services/src/main/java/org/jd/gui/service/preferencespanel/ClassFileViewerPreferencesProvider.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,20 @@
1515

1616
public class ClassFileViewerPreferencesProvider extends JPanel implements PreferencesPanel {
1717
protected static final String ESCAPE_UNICODE_CHARACTERS = "ClassFileViewerPreferences.escapeUnicodeCharacters";
18-
protected static final String OMIT_THIS_PREFIX = "ClassFileViewerPreferences.omitThisPrefix";
1918
protected static final String REALIGN_LINE_NUMBERS = "ClassFileViewerPreferences.realignLineNumbers";
20-
protected static final String DISPLAY_DEFAULT_CONSTRUCTOR = "ClassFileViewerPreferences.displayDefaultConstructor";
2119

2220
protected PreferencesPanel.PreferencesPanelChangeListener listener = null;
2321
protected JCheckBox escapeUnicodeCharactersCheckBox;
24-
protected JCheckBox omitThisPrefixCheckBox;
2522
protected JCheckBox realignLineNumbersCheckBox;
26-
protected JCheckBox displayDefaultConstructorCheckBox;
2723

2824
public ClassFileViewerPreferencesProvider() {
2925
super(new GridLayout(0,1));
3026

3127
escapeUnicodeCharactersCheckBox = new JCheckBox("Escape unicode characters");
32-
omitThisPrefixCheckBox = new JCheckBox("Omit the prefix 'this' if possible");
3328
realignLineNumbersCheckBox = new JCheckBox("Realign line numbers");
34-
displayDefaultConstructorCheckBox = new JCheckBox("Display default constructor");
3529

3630
add(escapeUnicodeCharactersCheckBox);
37-
add(omitThisPrefixCheckBox);
3831
add(realignLineNumbersCheckBox);
39-
add(displayDefaultConstructorCheckBox);
4032
}
4133

4234
// --- PreferencesPanel --- //
@@ -51,17 +43,13 @@ public ClassFileViewerPreferencesProvider() {
5143
@Override
5244
public void loadPreferences(Map<String, String> preferences) {
5345
escapeUnicodeCharactersCheckBox.setSelected(!"false".equals(preferences.get(ESCAPE_UNICODE_CHARACTERS)));
54-
omitThisPrefixCheckBox.setSelected("true".equals(preferences.get(OMIT_THIS_PREFIX)));
5546
realignLineNumbersCheckBox.setSelected("true".equals(preferences.get(REALIGN_LINE_NUMBERS)));
56-
displayDefaultConstructorCheckBox.setSelected("true".equals(preferences.get(DISPLAY_DEFAULT_CONSTRUCTOR)));
5747
}
5848

5949
@Override
6050
public void savePreferences(Map<String, String> preferences) {
6151
preferences.put(ESCAPE_UNICODE_CHARACTERS, Boolean.toString(escapeUnicodeCharactersCheckBox.isSelected()));
62-
preferences.put(OMIT_THIS_PREFIX, Boolean.toString(omitThisPrefixCheckBox.isSelected()));
6352
preferences.put(REALIGN_LINE_NUMBERS, Boolean.toString(realignLineNumbersCheckBox.isSelected()));
64-
preferences.put(DISPLAY_DEFAULT_CONSTRUCTOR, Boolean.toString(displayDefaultConstructorCheckBox.isSelected()));
6553
}
6654

6755
@Override public boolean arePreferencesValid() { return true; }

services/src/main/java/org/jd/gui/service/sourcesaver/ClassFileSourceSaverProvider.java

Lines changed: 61 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,52 @@
77

88
package org.jd.gui.service.sourcesaver;
99

10-
import jd.core.CoreConstants;
11-
import jd.core.Decompiler;
12-
import jd.core.process.DecompilerImpl;
10+
import org.jd.core.v1.ClassFileToJavaSourceDecompiler;
1311
import org.jd.gui.api.API;
1412
import org.jd.gui.api.model.Container;
13+
import org.jd.gui.util.decompiler.LineNumberStringBuilderPrinter;
1514
import org.jd.gui.util.decompiler.ContainerLoader;
16-
import org.jd.gui.util.decompiler.GuiPreferences;
17-
import org.jd.gui.util.decompiler.PlainTextPrinter;
1815
import org.jd.gui.util.exception.ExceptionUtil;
1916
import org.jd.gui.util.io.NewlineOutputStream;
2017

2118
import java.io.*;
19+
import java.net.URL;
2220
import java.nio.charset.Charset;
2321
import java.nio.file.Files;
2422
import java.nio.file.Path;
23+
import java.util.Enumeration;
24+
import java.util.HashMap;
2525
import java.util.Map;
26+
import java.util.jar.Manifest;
2627

2728
public class ClassFileSourceSaverProvider extends AbstractSourceSaverProvider {
2829
protected static final String ESCAPE_UNICODE_CHARACTERS = "ClassFileSaverPreferences.escapeUnicodeCharacters";
29-
protected static final String OMIT_THIS_PREFIX = "ClassFileSaverPreferences.omitThisPrefix";
30-
protected static final String WRITE_DEFAULT_CONSTRUCTOR = "ClassFileSaverPreferences.writeDefaultConstructor";
3130
protected static final String REALIGN_LINE_NUMBERS = "ClassFileSaverPreferences.realignLineNumbers";
3231
protected static final String WRITE_LINE_NUMBERS = "ClassFileSaverPreferences.writeLineNumbers";
3332
protected static final String WRITE_METADATA = "ClassFileSaverPreferences.writeMetadata";
3433

35-
protected static final Decompiler DECOMPILER = new DecompilerImpl();
34+
protected static final ClassFileToJavaSourceDecompiler DECOMPILER = new ClassFileToJavaSourceDecompiler();
3635

37-
protected GuiPreferences preferences = new GuiPreferences();
3836
protected ContainerLoader loader = new ContainerLoader();
39-
protected PlainTextPrinter printer = new PlainTextPrinter();
40-
protected ByteArrayOutputStream baos = new ByteArrayOutputStream();
37+
protected LineNumberStringBuilderPrinter printer = new LineNumberStringBuilderPrinter();
38+
protected String jdCoreVersion = "SNAPSHOT";
39+
40+
public ClassFileSourceSaverProvider() {
41+
try {
42+
Enumeration<URL> enumeration = ClassFileSourceSaverProvider.class.getClassLoader().getResources("META-INF/MANIFEST.MF");
43+
44+
while (enumeration.hasMoreElements()) {
45+
try (InputStream is = enumeration.nextElement().openStream()) {
46+
String attribute = new Manifest(is).getMainAttributes().getValue("JD-Core-Version");
47+
if (attribute != null) {
48+
jdCoreVersion = attribute;
49+
}
50+
}
51+
}
52+
} catch (IOException e) {
53+
assert ExceptionUtil.printStackTrace(e);
54+
}
55+
}
4156

4257
@Override public String[] getSelectors() { return appendSelectors("*:file:*.class"); }
4358

@@ -74,60 +89,67 @@ public void saveContent(API api, Controller controller, Listener listener, Path
7489
listener.pathSaved(path);
7590
}
7691
// Init preferences
77-
Map<String, String> p = api.getPreferences();
78-
preferences.setUnicodeEscape(getPreferenceValue(p, ESCAPE_UNICODE_CHARACTERS, false));
79-
preferences.setShowPrefixThis(! getPreferenceValue(p, OMIT_THIS_PREFIX, false));
80-
preferences.setShowDefaultConstructor(getPreferenceValue(p, WRITE_DEFAULT_CONSTRUCTOR, false));
81-
preferences.setRealignmentLineNumber(getPreferenceValue(p, REALIGN_LINE_NUMBERS, true));
82-
preferences.setShowLineNumbers(getPreferenceValue(p, WRITE_LINE_NUMBERS, true));
92+
Map<String, String> preferences = api.getPreferences();
93+
boolean realignmentLineNumbers = getPreferenceValue(preferences, REALIGN_LINE_NUMBERS, true);
94+
boolean unicodeEscape = getPreferenceValue(preferences, ESCAPE_UNICODE_CHARACTERS, false);
95+
boolean showLineNumbers = getPreferenceValue(preferences, WRITE_LINE_NUMBERS, true);
96+
97+
Map<String, Object> configuration = new HashMap<>();
98+
configuration.put("realignLineNumbers", realignmentLineNumbers);
8399

84100
// Init loader
85101
loader.setEntry(entry);
86102

87103
// Init printer
88-
baos.reset();
89-
PrintStream ps = new PrintStream(baos, true, "UTF-8");
90-
printer.setPrintStream(ps);
91-
printer.setPreferences(preferences);
104+
printer.setRealignmentLineNumber(realignmentLineNumbers);
105+
printer.setUnicodeEscape(unicodeEscape);
106+
printer.setShowLineNumbers(showLineNumbers);
107+
108+
// Format internal name
109+
String entryPath = entry.getPath();
110+
assert entryPath.endsWith(".class");
111+
String entryInternalName = entryPath.substring(0, entryPath.length() - 6); // 6 = ".class".length()
92112

93113
// Decompile class file
94-
DECOMPILER.decompile(preferences, loader, printer, entry.getPath());
114+
DECOMPILER.decompile(configuration, loader, printer, entryInternalName);
115+
116+
StringBuilder stringBuffer = printer.getStringBuffer();
95117

96118
// Metadata
97-
if (getPreferenceValue(p, WRITE_METADATA, true)) {
119+
if (getPreferenceValue(preferences, WRITE_METADATA, true)) {
98120
// Add location
99121
String location =
100122
new File(entry.getUri()).getPath()
101123
// Escape "\ u" sequence to prevent "Invalid unicode" errors
102124
.replaceAll("(^|[^\\\\])\\\\u", "\\\\\\\\u");
103-
ps.print("\n\n/* Location: ");
104-
ps.print(location);
125+
stringBuffer.append("\n\n/* Location: ");
126+
stringBuffer.append(location);
105127
// Add Java compiler version
106128
int majorVersion = printer.getMajorVersion();
107129

108130
if (majorVersion >= 45) {
109-
ps.print("\n * Java compiler version: ");
131+
stringBuffer.append("\n * Java compiler version: ");
110132

111133
if (majorVersion >= 49) {
112-
ps.print(majorVersion - (49 - 5));
134+
stringBuffer.append(majorVersion - (49 - 5));
113135
} else {
114-
ps.print(majorVersion - (45 - 1));
136+
stringBuffer.append(majorVersion - (45 - 1));
115137
}
116138

117-
ps.print(" (");
118-
ps.print(majorVersion);
119-
ps.print('.');
120-
ps.print(printer.getMinorVersion());
121-
ps.print(')');
139+
stringBuffer.append(" (");
140+
stringBuffer.append(majorVersion);
141+
stringBuffer.append('.');
142+
stringBuffer.append(printer.getMinorVersion());
143+
stringBuffer.append(')');
122144
}
123145
// Add JD-Core version
124-
ps.print("\n * JD-Core Version: ");
125-
ps.print(CoreConstants.JD_CORE_VERSION);
126-
ps.print("\n */");
146+
stringBuffer.append("\n * JD-Core Version: ");
147+
stringBuffer.append(jdCoreVersion);
148+
stringBuffer.append("\n */");
127149
}
128150

129-
try (OutputStream os = new NewlineOutputStream(Files.newOutputStream(path))) {
130-
baos.writeTo(os);
151+
try (PrintStream ps = new PrintStream(new NewlineOutputStream(Files.newOutputStream(path)), true, "UTF-8")) {
152+
ps.print(stringBuffer.toString());
131153
} catch (IOException e) {
132154
assert ExceptionUtil.printStackTrace(e);
133155
}
@@ -144,11 +166,6 @@ public void saveContent(API api, Controller controller, Listener listener, Path
144166

145167
protected static boolean getPreferenceValue(Map<String, String> preferences, String key, boolean defaultValue) {
146168
String v = preferences.get(key);
147-
148-
if (v == null) {
149-
return defaultValue;
150-
} else {
151-
return Boolean.valueOf(v);
152-
}
169+
return (v == null) ? defaultValue : Boolean.valueOf(v);
153170
}
154171
}

services/src/main/java/org/jd/gui/service/treenode/ClassFileTreeNodeFactoryProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.jd.gui.api.feature.ContainerEntryGettable;
1212
import org.jd.gui.api.feature.UriGettable;
1313
import org.jd.gui.api.model.Container;
14-
import org.jd.gui.util.decompiler.GuiPreferences;
1514
import org.jd.gui.util.exception.ExceptionUtil;
1615
import org.jd.gui.view.component.ClassFilePage;
1716
import org.jd.gui.view.data.TreeNodeBean;

0 commit comments

Comments
 (0)