Fixed Asm Editor
authorChristian Femers <femers@in.tum.de>
Thu, 18 Jul 2019 19:08:05 +0000 (21:08 +0200)
committerChristian Femers <femers@in.tum.de>
Thu, 18 Jul 2019 19:08:05 +0000 (21:08 +0200)
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmOpsEdit.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmContentAssistProcessor.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmReconciler.java
net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java

index 59b38ba..cc0d0ff 100644 (file)
@@ -117,6 +117,7 @@ public class AsmOpsEdit extends ViewPart
                                                viewer.add(in.trim());
                                        txtInput.setText("");
                                        part.setDirty(true);
+                                       save();
                                }
                        }
                });
index f81f7c0..c2b8f3f 100644 (file)
@@ -13,6 +13,8 @@ import org.eclipse.jface.text.contentassist.IContextInformationValidator;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 
+import net.mograsim.plugin.AsmOps;
+
 public class AsmContentAssistProcessor implements IContentAssistProcessor
 {
 
@@ -43,8 +45,7 @@ public class AsmContentAssistProcessor implements IContentAssistProcessor
 //             }
 //             return new ICompletionProposal[0];
 //             text.
-               return new ICompletionProposal[] { new AsmOperationProposal("ADD", "Addition operation", offset),
-                               new AsmOperationProposal("MUL", "Multiplication operation", offset) };
+               return AsmOps.ops.stream().map(o -> new AsmOperationProposal(o, "", offset)).toArray(ICompletionProposal[]::new);
        }
 
        @Override
@@ -56,7 +57,7 @@ public class AsmContentAssistProcessor implements IContentAssistProcessor
        @Override
        public char[] getCompletionProposalAutoActivationCharacters()
        {
-               return new char[] { '\t' }; // NON-NLS-1
+               return new char[] { '\n', '\r' }; // NON-NLS-1
        }
 
        @Override
index 8d42ef5..655160e 100644 (file)
@@ -21,7 +21,7 @@ public class AsmPresentationReconciler extends PresentationReconciler
 {
 
        private final Token comment = new Token(null);
-       private final Token std = new Token(null);
+//     private final Token std = new Token(null);
        private final Token op = new Token(null);
        private final Token label = new Token(null);
        private final Token number = new Token(null);
@@ -34,7 +34,7 @@ public class AsmPresentationReconciler extends PresentationReconciler
                rules = new IRule[4];
                rules[0] = new EndOfLineRule(";", comment);
                rules[1] = new AsmLabelRule(label);
-               rules[2] = new InstructionRule(op, true);
+               rules[2] = new InstructionRule(Token.UNDEFINED, op, true);
                rules[3] = new AsmNumberRule(number);
 
                scanner.setRules(rules);
index 876878f..efee8a3 100644 (file)
@@ -1,10 +1,14 @@
 package net.mograsim.plugin.asm.editor;
 
+import java.lang.ref.WeakReference;
+
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.reconciler.Reconciler;
 import org.eclipse.jface.text.source.projection.ProjectionViewer;
 
+import net.mograsim.plugin.AsmOps;
+
 public class AsmReconciler extends Reconciler
 {
 
@@ -22,5 +26,12 @@ public class AsmReconciler extends Reconciler
                super.install(textViewer);
                ProjectionViewer pViewer = (ProjectionViewer) textViewer;
                fStrategy.setProjectionViewer(pViewer);
+               WeakReference<ITextViewer> tv = new WeakReference<>(textViewer);
+               AsmOps.addListener(ops ->
+               {
+                       System.out.println("refresh");
+                       if (tv.get() != null)
+                               tv.get().invalidateTextPresentation();
+               });
        }
 }
\ No newline at end of file
index 948c60a..df0f80b 100644 (file)
@@ -1,5 +1,6 @@
 package net.mograsim.plugin.asm.editor.rules;
 
+import java.util.Objects;
 import java.util.Set;
 
 import org.eclipse.jface.text.rules.IToken;
@@ -10,21 +11,24 @@ import net.mograsim.plugin.AsmOps;
 
 public class InstructionRule extends WordRule
 {
-       public InstructionRule(IToken defaultToken)
+       private final IToken instToken;
+
+       public InstructionRule(IToken defaultToken, IToken instToken)
        {
-               this(defaultToken, false);
+               this(defaultToken, instToken, false);
        }
 
-       public InstructionRule(IToken defaultToken, boolean ignoreCase)
+       public InstructionRule(IToken defaultToken, IToken instToken, boolean ignoreCase)
        {
-               super(new InstructionDetector(), defaultToken, ignoreCase);
+               super(new InstructionDetector(), Objects.requireNonNull(defaultToken), ignoreCase);
+               this.instToken = Objects.requireNonNull(instToken);
                AsmOps.addListener(this::update);
        }
 
        void update(Set<String> words)
        {
                fWords.clear();
-               words.forEach(s -> fWords.put(s, fDefaultToken));
+               words.forEach(s -> fWords.put(s, instToken));
        }
 
        static class InstructionDetector implements IWordDetector