From 828e193705aa5216c3b7b26ecaf9bd1d8db38479 Mon Sep 17 00:00:00 2001 From: Christian Femers Date: Thu, 18 Jul 2019 21:08:05 +0200 Subject: [PATCH] Fixed Asm Editor --- .../src/net/mograsim/plugin/asm/AsmOpsEdit.java | 1 + .../asm/editor/AsmContentAssistProcessor.java | 7 ++++--- .../asm/editor/AsmPresentationReconciler.java | 4 ++-- .../mograsim/plugin/asm/editor/AsmReconciler.java | 11 +++++++++++ .../plugin/asm/editor/rules/InstructionRule.java | 14 +++++++++----- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmOpsEdit.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmOpsEdit.java index 59b38baf..cc0d0ffa 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmOpsEdit.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/AsmOpsEdit.java @@ -117,6 +117,7 @@ public class AsmOpsEdit extends ViewPart viewer.add(in.trim()); txtInput.setText(""); part.setDirty(true); + save(); } } }); diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmContentAssistProcessor.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmContentAssistProcessor.java index f81f7c00..c2b8f3f6 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmContentAssistProcessor.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmContentAssistProcessor.java @@ -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 diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java index 8d42ef59..655160e0 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmPresentationReconciler.java @@ -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); diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmReconciler.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmReconciler.java index 876878f7..efee8a31 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmReconciler.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/AsmReconciler.java @@ -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 tv = new WeakReference<>(textViewer); + AsmOps.addListener(ops -> + { + System.out.println("refresh"); + if (tv.get() != null) + tv.get().invalidateTextPresentation(); + }); } } \ No newline at end of file diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java index 948c60ac..df0f80b4 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/asm/editor/rules/InstructionRule.java @@ -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 words) { fWords.clear(); - words.forEach(s -> fWords.put(s, fDefaultToken)); + words.forEach(s -> fWords.put(s, instToken)); } static class InstructionDetector implements IWordDetector -- 2.17.1