1010import cn .enaium .joe .util .classes .ClassNode ;
1111import cn .enaium .joe .util .compiler .Compiler ;
1212import cn .enaium .joe .util .event .events .EditSaveSuccessEvent ;
13+ import org .fife .rsta .ac .LanguageSupport ;
1314import org .fife .rsta .ac .LanguageSupportFactory ;
15+ import org .fife .rsta .ac .java .JavaLanguageSupport ;
1416import org .fife .ui .autocomplete .*;
1517import org .fife .ui .rsyntaxtextarea .SyntaxConstants ;
1618import org .objectweb .asm .*;
19+ import org .objectweb .asm .tree .AbstractInsnNode ;
1720import org .objectweb .asm .tree .FieldNode ;
21+ import org .objectweb .asm .tree .IincInsnNode ;
1822import org .objectweb .asm .tree .MethodNode ;
1923
2024import 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