Skip to content

Commit 42dc25a

Browse files
committed
more AutoCompletion for transformer
Update TransformClassDialog.java
1 parent aba6115 commit 42dc25a

File tree

3 files changed

+68
-29
lines changed

3 files changed

+68
-29
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = 1.4.8
1+
version = 1.4.9

src/main/java/cn/enaium/joe/JavaOctetEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class JavaOctetEditor {
4848

4949
public static final String TITLE = "JavaOctetEditor";
5050

51-
public static final String VERSION = "1.4.8";
51+
public static final String VERSION = "1.4.9";
5252

5353
public JFrame window;
5454

src/main/java/cn/enaium/joe/dialog/TransformClassDialog.java

Lines changed: 66 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
import cn.enaium.joe.util.classes.ClassNode;
1111
import cn.enaium.joe.util.compiler.Compiler;
1212
import cn.enaium.joe.util.event.events.EditSaveSuccessEvent;
13+
import org.fife.rsta.ac.LanguageSupport;
1314
import org.fife.rsta.ac.LanguageSupportFactory;
15+
import org.fife.rsta.ac.java.JavaLanguageSupport;
1416
import org.fife.ui.autocomplete.*;
1517
import org.fife.ui.rsyntaxtextarea.SyntaxConstants;
1618
import org.objectweb.asm.*;
19+
import org.objectweb.asm.tree.AbstractInsnNode;
1720
import org.objectweb.asm.tree.FieldNode;
21+
import org.objectweb.asm.tree.IincInsnNode;
1822
import org.objectweb.asm.tree.MethodNode;
1923

2024
import java.awt.*;
@@ -52,6 +56,7 @@ public TransformClassDialog() {
5256
codeAreaPanel.getTextArea().setText(stringBuilder);
5357
add(button = new Button(LangUtil.i18n("button.edit")), BorderLayout.SOUTH);
5458
AutoCompletion ac = new AutoCompletion(createCompletionProvider());
59+
5560
ac.setAutoActivationEnabled(true);
5661
ac.setAutoActivationDelay(100);
5762
ac.setAutoCompleteSingleChoices(false);
@@ -92,35 +97,60 @@ private static CompletionProvider createCompletionProvider() {
9297
List<Completion> completions = new ArrayList<>(0);
9398
HashSet<String> keyWords = new HashSet<>();
9499
{
95-
for (Field field : Opcodes.class.getFields()) {
96-
keyWords.add("Opcodes." + field.getName());
97-
}
98-
for (Field method : org.objectweb.asm.Type.class.getFields()) {
99-
keyWords.add("Type." + method.getName());
100-
}
101-
for (Method method : org.objectweb.asm.Type.class.getMethods()) {
102-
keyWords.add("Type." + method.getName());
103-
}
100+
extractKeyWordForClass(Opcodes.class, "Opcodes.", keyWords);
101+
extractKeyWordForClass(org.objectweb.asm.Type.class, "", keyWords);
104102
}
105103
{
106-
for (Method method : org.objectweb.asm.tree.ClassNode.class.getMethods()) {
107-
keyWords.add("." + method.getName());
108-
}
109-
for (Method method : MethodNode.class.getMethods()) {
110-
keyWords.add("." + method.getName());
111-
}
112-
for (Method method : FieldNode.class.getMethods()) {
113-
keyWords.add("." + method.getName());
114-
}
115-
for (Field method : org.objectweb.asm.tree.ClassNode.class.getFields()) {
116-
keyWords.add("." + method.getName());
117-
}
118-
for (Field method : MethodNode.class.getFields()) {
119-
keyWords.add("." + method.getName());
120-
}
121-
for (Field method : FieldNode.class.getFields()) {
122-
keyWords.add("." + method.getName());
123-
}
104+
keyWords.add("AbstractInsnNode");
105+
keyWords.add("AnnotationNode");
106+
keyWords.add("ClassNode");
107+
keyWords.add("FieldInsnNode");
108+
keyWords.add("FieldNode");
109+
keyWords.add("FrameNode");
110+
keyWords.add("IincInsnNode");
111+
keyWords.add("InnerClassNode");
112+
keyWords.add("InsnList");
113+
keyWords.add("InsnNode");
114+
keyWords.add("IntInsnNode");
115+
keyWords.add("InvokeDynamicInsnNode");
116+
keyWords.add("JumpInsnNode");
117+
keyWords.add("LabelNode");
118+
keyWords.add("LdcInsnNode");
119+
keyWords.add("LineNumberNode");
120+
keyWords.add("LocalVariableAnnotationNode");
121+
keyWords.add("LocalVariableNode");
122+
keyWords.add("LookupSwitchInsnNode");
123+
keyWords.add("MethodInsnNode");
124+
keyWords.add("MethodNode");
125+
keyWords.add("ModuleExportNode");
126+
keyWords.add("ModuleNode");
127+
keyWords.add("ModuleOpenNode");
128+
keyWords.add("ModuleProvideNode");
129+
keyWords.add("ModuleRequireNode");
130+
keyWords.add("MultiANewArrayInsnNode");
131+
keyWords.add("ParameterNode");
132+
keyWords.add("RecordComponentNode");
133+
keyWords.add("TableSwitchInsnNode");
134+
keyWords.add("TryCatchBlockNode");
135+
keyWords.add("TypeAnnotationNode");
136+
keyWords.add("TypeInsnNode");
137+
keyWords.add("UnsupportedClassVersionException");
138+
keyWords.add("VarInsnNode");
139+
extractKeyWordForClass(org.objectweb.asm.tree.ClassNode.class, "", keyWords);
140+
extractKeyWordForClass(MethodNode.class, "", keyWords);
141+
extractKeyWordForClass(FieldNode.class, "", keyWords);
142+
extractKeyWordForClass(List.class, "", keyWords);
143+
}
144+
{
145+
keyWords.add("classNode");
146+
keyWords.add("var");
147+
keyWords.add("for");
148+
keyWords.add("if");
149+
keyWords.add("while");
150+
keyWords.add("true");
151+
keyWords.add("false");
152+
keyWords.add("return");
153+
keyWords.add("break");
124154
}
125155
for (String str : keyWords) {
126156
completions.add(new BasicCompletion(defaultCompletionProvider, str));
@@ -130,4 +160,13 @@ private static CompletionProvider createCompletionProvider() {
130160
return $provider = defaultCompletionProvider;
131161
}
132162
}
163+
164+
private static void extractKeyWordForClass(Class<?> cls, String prefix, Set<String> strings){
165+
for (var method : cls.getDeclaredFields()) {
166+
strings.add(prefix + method.getName());
167+
}
168+
for (var method : cls.getDeclaredMethods()) {
169+
strings.add(prefix + method.getName());
170+
}
171+
}
133172
}

0 commit comments

Comments
 (0)