Skip to content

Commit e91cdc0

Browse files
committed
Interactive labels
1 parent 794acbe commit e91cdc0

File tree

8 files changed

+5118
-5443
lines changed

8 files changed

+5118
-5443
lines changed

src/main/java/the/bytecode/club/jda/decompilers/bytecode/InstructionPrinter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public ArrayList<String> createPrint() {
109109
if (parent.createLabelBrackets()) {
110110
if (!firstLabel)
111111
firstLabel = true;
112-
line += " {";
112+
line += " { // http://google.com";
113113
}
114114

115115
if (parent.appendHandlerComments()) {

src/main/java/the/bytecode/club/jda/gui/PaneUpdaterThread.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
44
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
5+
import org.fife.ui.rsyntaxtextarea.Token;
6+
import org.fife.ui.rsyntaxtextarea.TokenTypes;
57
import org.fife.ui.rtextarea.RTextScrollPane;
68
import the.bytecode.club.jda.JDA;
79
import the.bytecode.club.jda.api.ExceptionUI;
810
import the.bytecode.club.jda.decompilers.JDADecompiler;
911
import the.bytecode.club.jda.decompilers.bytecode.BytecodeDecompiler;
12+
import the.bytecode.club.jda.gui.fileviewer.BytecodeSyntaxArea;
1013
import the.bytecode.club.jda.gui.fileviewer.BytecodeTokenizer;
1114
import the.bytecode.club.jda.gui.fileviewer.ClassViewer;
1215
import the.bytecode.club.jda.settings.Settings;
@@ -37,8 +40,13 @@ public PaneUpdaterThread(ClassViewer viewer, JDADecompiler decompiler, int paneI
3740

3841
public void run() {
3942
try {
40-
RSyntaxTextArea panelArea = new RSyntaxTextArea();
41-
panelArea.setSyntaxEditingStyle(decompiler instanceof BytecodeDecompiler ? BytecodeTokenizer.SYNTAX_STYLE_BYTECODE : SyntaxConstants.SYNTAX_STYLE_JAVA);
43+
RSyntaxTextArea panelArea;
44+
if (decompiler instanceof BytecodeDecompiler) {
45+
panelArea = new BytecodeSyntaxArea();
46+
} else {
47+
panelArea = new RSyntaxTextArea();
48+
panelArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
49+
}
4250
panelArea.setCodeFoldingEnabled(true);
4351
panelArea.setAntiAliasingEnabled(true);
4452
final RTextScrollPane scrollPane = new RTextScrollPane(panelArea);
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package the.bytecode.club.jda.gui.fileviewer;
2+
3+
import org.fife.ui.rsyntaxtextarea.*;
4+
5+
import javax.swing.event.HyperlinkEvent;
6+
import java.net.MalformedURLException;
7+
import java.net.URL;
8+
9+
public class BytecodeSyntaxArea extends RSyntaxTextArea {
10+
public BytecodeSyntaxArea() {
11+
setSyntaxEditingStyle(BytecodeTokenizer.SYNTAX_STYLE_BYTECODE);
12+
13+
setLinkScanningMask(0);
14+
setLinkGenerator(new BytecodeLinkGenerator());
15+
addHyperlinkListener(e -> {
16+
URL url = e.getURL();
17+
String data = url.getFile();
18+
switch (url.getProtocol()) {
19+
case "label":
20+
System.out.println(data);
21+
setCaretPosition(0);
22+
break;
23+
}
24+
});
25+
}
26+
27+
private static class BytecodeLinkGenerator implements LinkGenerator {
28+
@Override
29+
public LinkGeneratorResult isLinkAtOffset(RSyntaxTextArea textArea, int offs) {
30+
Token t = textArea.modelToToken(offs);
31+
if (t.getType() == TokenTypes.PREPROCESSOR) {
32+
return new LinkGeneratorResult() {
33+
@Override
34+
public HyperlinkEvent execute() {
35+
try {
36+
URL url = new URL(null, "label:" + t.getLexeme(), new JDAURLHandler());
37+
return new HyperlinkEvent(textArea, HyperlinkEvent.EventType.ACTIVATED, url);
38+
} catch (MalformedURLException e) {
39+
e.printStackTrace();
40+
return null;
41+
}
42+
}
43+
44+
@Override
45+
public int getSourceOffset() {
46+
return offs;
47+
}
48+
};
49+
}
50+
return null;
51+
}
52+
}
53+
}

src/main/java/the/bytecode/club/jda/gui/fileviewer/BytecodeTokenizer.flex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n])
231231
EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit})
232232
Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter}))
233233
NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\")
234-
Label = (L({Digit}+)\:?)
234+
Label = (L({Digit}+))
235235
IdentifierStart = ({LetterOrUnderscore}|"$")
236236
IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter}))
237237

0 commit comments

Comments
 (0)