]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/SCLSourceViewerConfigurationNew.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor / SCLSourceViewerConfigurationNew.java
index 981d16b18c66cbee35fce4b9be3c116e6aa6125c..70a8e082ecbc9da4f34ad3c3f21371369dd35c1e 100644 (file)
-package org.simantics.scl.ui.editor;\r
-\r
-import org.eclipse.jface.preference.IPreferenceStore;\r
-import org.eclipse.jface.resource.FontDescriptor;\r
-import org.eclipse.jface.resource.ResourceManager;\r
-import org.eclipse.jface.text.DefaultInformationControl;\r
-import org.eclipse.jface.text.IDocument;\r
-import org.eclipse.jface.text.IInformationControl;\r
-import org.eclipse.jface.text.IInformationControlCreator;\r
-import org.eclipse.jface.text.ITextHover;\r
-import org.eclipse.jface.text.TextAttribute;\r
-import org.eclipse.jface.text.contentassist.ContentAssistant;\r
-import org.eclipse.jface.text.contentassist.IContentAssistant;\r
-import org.eclipse.jface.text.presentation.IPresentationReconciler;\r
-import org.eclipse.jface.text.presentation.PresentationReconciler;\r
-import org.eclipse.jface.text.rules.DefaultDamagerRepairer;\r
-import org.eclipse.jface.text.rules.EndOfLineRule;\r
-import org.eclipse.jface.text.rules.IRule;\r
-import org.eclipse.jface.text.rules.ITokenScanner;\r
-import org.eclipse.jface.text.rules.IWordDetector;\r
-import org.eclipse.jface.text.rules.MultiLineRule;\r
-import org.eclipse.jface.text.rules.PatternRule;\r
-import org.eclipse.jface.text.rules.RuleBasedScanner;\r
-import org.eclipse.jface.text.rules.Token;\r
-import org.eclipse.jface.text.rules.WordRule;\r
-import org.eclipse.jface.text.source.DefaultAnnotationHover;\r
-import org.eclipse.jface.text.source.IAnnotationHover;\r
-import org.eclipse.jface.text.source.ISourceViewer;\r
-import org.eclipse.jface.text.source.SourceViewerConfiguration;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.graphics.Font;\r
-import org.eclipse.swt.graphics.RGB;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.editors.text.EditorsUI;\r
-import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;\r
-import org.simantics.scl.ui.Activator;\r
-import org.simantics.scl.ui.editor.completion.SCLCompletionAssistProcessor;\r
-import org.simantics.scl.ui.editor.completion.SCLEditorTextHover;\r
-import org.simantics.scl.ui.editor.completion.SCLTextEditorEnvironment;\r
-import org.simantics.scl.ui.info.SCLInfo;\r
-\r
-public class SCLSourceViewerConfigurationNew extends SourceViewerConfiguration {\r
-\r
-    public static final char[] CONTENT_ASSIST_AUTO_CHARS = new char[] { '.' };\r
-    \r
-    ResourceManager resourceManager;\r
-    IPreferenceStore preferenceStore;\r
-    \r
-    private SCLTextEditorEnvironment sclTextEditorEnvironment;\r
-    \r
-    public SCLSourceViewerConfigurationNew(ResourceManager resourceManager) {\r
-        this.resourceManager = resourceManager;\r
-        this.preferenceStore = EditorsUI.getPreferenceStore();\r
-        \r
-        this.sclTextEditorEnvironment = new SCLTextEditorEnvironment("");\r
-    }\r
-\r
-    public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {\r
-        return new String[] {\r
-            IDocument.DEFAULT_CONTENT_TYPE\r
-        };\r
-    }\r
-    \r
-       @Override\r
-    public int getTabWidth(ISourceViewer sourceViewer) {\r
-               if (preferenceStore == null)\r
-                       return super.getTabWidth(sourceViewer);\r
-               return preferenceStore.getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH);\r
-       }\r
-\r
-       @Override\r
-       public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) {\r
-               String[] indentPrefixes = getIndentPrefixesForTab(getTabWidth(sourceViewer));\r
-               if (indentPrefixes == null)\r
-                       return null;\r
-\r
-               int length = indentPrefixes.length;\r
-               if (length > 2) {\r
-                       // Swap first with second last\r
-                       String first = indentPrefixes[0];\r
-                       indentPrefixes[0] = indentPrefixes[length - 2];\r
-                       indentPrefixes[length - 2] = first;\r
-               }\r
-\r
-               return indentPrefixes;\r
-       }\r
-    \r
-    public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {\r
-        PresentationReconciler reconciler = new PresentationReconciler();\r
-        \r
-        DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getSclTokenScanner());\r
-        \r
-        reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
-        reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);\r
-        \r
-        return reconciler;\r
-    }\r
-    \r
-    private static final FontDescriptor FONT_NORMAL = FontDescriptor.createFrom("Consolas", 10, SWT.NORMAL);\r
-    private static final FontDescriptor FONT_BOLD = FontDescriptor.createFrom("Consolas", 10, SWT.BOLD);\r
-    \r
-    ITokenScanner getSclTokenScanner() {\r
-        RuleBasedScanner scanner = new RuleBasedScanner();\r
-        \r
-        Font font = resourceManager.createFont(FONT_NORMAL);\r
-        Font boldFont = resourceManager.createFont(FONT_BOLD);\r
-        \r
-        Token defaultToken = new Token(\r
-                new TextAttribute(\r
-                        resourceManager.createColor(new RGB(0, 0, 0)),\r
-                        null,\r
-                        0,\r
-                        font\r
-                ));\r
-        Token string = new Token(new TextAttribute(\r
-                resourceManager.createColor(new RGB(42, 0, 255)),\r
-                null,\r
-                0,\r
-                font\r
-                ));\r
-        Token reserved = new Token(\r
-                new TextAttribute(\r
-                        resourceManager.createColor(new RGB(127, 0, 85)),\r
-                        null,\r
-                        SWT.BOLD,\r
-                        boldFont\r
-                ));\r
-        Token comment = new Token(new TextAttribute(\r
-                resourceManager.createColor(new RGB(63, 127, 95)),\r
-                null,\r
-                0,\r
-                font\r
-                ));\r
-\r
-        WordRule reservedWord = new WordRule(new IWordDetector() {          \r
-            @Override\r
-            public boolean isWordStart(char c) {\r
-                return Character.isJavaIdentifierStart(c);\r
-            }\r
-            \r
-            @Override\r
-            public boolean isWordPart(char c) {\r
-                return Character.isJavaIdentifierPart(c) || c=='.';\r
-            }\r
-        });\r
-\r
-        for(String word : SCLInfo.RESERVED_WORDS)\r
-            reservedWord.addWord(word, reserved);\r
-        \r
-        IRule[] rules = new IRule[] {\r
-            //new MultiLineRule("\"\"\"", "\"\"\"", string),\r
-            new PatternRule("\"", "\"", string, '\\', true),\r
-            new MultiLineRule("/*", "*/", comment),\r
-            new EndOfLineRule("//", comment),\r
-            reservedWord\r
-        };\r
-        scanner.setRules(rules);\r
-        scanner.setDefaultReturnToken(defaultToken);\r
-        \r
-        return scanner;\r
-    }\r
-    \r
-    @Override\r
-    public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {\r
-        return new SCLEditorTextHover(sourceViewer, sclTextEditorEnvironment);\r
-    }\r
-    \r
-    @Override\r
-    public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {\r
-        return new DefaultAnnotationHover();\r
-    }\r
-    \r
-    @Override\r
-    public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {\r
-        ContentAssistant assistant = new ContentAssistant();\r
-        assistant.enableColoredLabels(true);\r
-        assistant.setStatusLineVisible(true);\r
-\r
-        assistant.enableAutoActivation(true);\r
-        assistant.enableAutoInsert(true);\r
-        assistant.setContentAssistProcessor(new SCLCompletionAssistProcessor(sclTextEditorEnvironment), IDocument.DEFAULT_CONTENT_TYPE);\r
-        assistant.setInformationControlCreator(CREATOR);\r
-        assistant.setRestoreCompletionProposalSize(Activator.getInstance().getDialogSettings()); \r
-        return assistant;\r
-    }\r
-    \r
-    private static final IInformationControlCreator CREATOR = new IInformationControlCreator() {\r
-        \r
-        @Override\r
-        public IInformationControl createInformationControl(Shell parent) {\r
-            return new DefaultInformationControl(parent);\r
-        }\r
-    };\r
-    \r
-    public void updateCompletionAssistModuleName(String moduleName) {\r
-        sclTextEditorEnvironment.updateModuleName(moduleName);\r
-    }\r
-    \r
-//    @Override\r
-//    public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {\r
-//        return new ContentFormatter();\r
-//    }\r
-    \r
-    public SCLTextEditorEnvironment getSclTextEditorEnvironment() {\r
-        return sclTextEditorEnvironment;\r
-    }\r
-}\r
+package org.simantics.scl.ui.editor;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.DefaultTextHover;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.source.DefaultAnnotationHover;
+import org.eclipse.jface.text.source.IAnnotationHover;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
+import org.simantics.scl.ui.Activator;
+import org.simantics.scl.ui.editor.completion.SCLCompletionAssistProcessor;
+import org.simantics.scl.ui.editor.completion.SCLTextEditorEnvironment;
+import org.simantics.scl.ui.editor2.SCLPresentationReconciler;
+
+public class SCLSourceViewerConfigurationNew extends SourceViewerConfiguration {
+
+    public static final char[] CONTENT_ASSIST_AUTO_CHARS = new char[] { '.' };
+    
+    ResourceManager resourceManager;
+    IPreferenceStore preferenceStore;
+    
+    private SCLTextEditorEnvironment sclTextEditorEnvironment;
+    
+    public SCLSourceViewerConfigurationNew(ResourceManager resourceManager) {
+        this.resourceManager = resourceManager;
+        this.preferenceStore = EditorsUI.getPreferenceStore();
+        
+        this.sclTextEditorEnvironment = new SCLTextEditorEnvironment(""); //$NON-NLS-1$
+    }
+
+    public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
+        return new String[] {
+            IDocument.DEFAULT_CONTENT_TYPE
+        };
+    }
+    
+       @Override
+    public int getTabWidth(ISourceViewer sourceViewer) {
+               if (preferenceStore == null)
+                       return super.getTabWidth(sourceViewer);
+               return preferenceStore.getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH);
+       }
+
+       @Override
+       public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) {
+               String[] indentPrefixes = getIndentPrefixesForTab(getTabWidth(sourceViewer));
+               if (indentPrefixes == null)
+                       return null;
+
+               int length = indentPrefixes.length;
+               if (length > 2) {
+                       // Swap first with second last
+                       String first = indentPrefixes[0];
+                       indentPrefixes[0] = indentPrefixes[length - 2];
+                       indentPrefixes[length - 2] = first;
+               }
+
+               return indentPrefixes;
+       }
+    
+    public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+        return new SCLPresentationReconciler(resourceManager);
+    }
+    
+    @Override
+    public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
+        //return new SCLEditorTextHover(sourceViewer, sclTextEditorEnvironment);
+        return new DefaultTextHover(sourceViewer);
+    }
+    
+    @Override
+    public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
+        return new DefaultAnnotationHover();
+    }
+    
+    @Override
+    public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+        ContentAssistant assistant = new ContentAssistant();
+        assistant.enableColoredLabels(true);
+        assistant.setStatusLineVisible(true);
+
+        assistant.enableAutoActivation(true);
+        assistant.enableAutoInsert(true);
+        assistant.setContentAssistProcessor(new SCLCompletionAssistProcessor(sclTextEditorEnvironment), IDocument.DEFAULT_CONTENT_TYPE);
+        assistant.setInformationControlCreator(CREATOR);
+        assistant.setRestoreCompletionProposalSize(Activator.getInstance().getDialogSettings()); 
+        return assistant;
+    }
+    
+    private static final IInformationControlCreator CREATOR = new IInformationControlCreator() {
+        
+        @Override
+        public IInformationControl createInformationControl(Shell parent) {
+            return new DefaultInformationControl(parent);
+        }
+    };
+    
+    public void updateCompletionAssistModuleName(String moduleName) {
+        sclTextEditorEnvironment.updateModuleName(moduleName);
+    }
+    
+//    @Override
+//    public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {
+//        return new ContentFormatter();
+//    }
+    
+    public SCLTextEditorEnvironment getSclTextEditorEnvironment() {
+        return sclTextEditorEnvironment;
+    }
+}