mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Hooked up C# code scanner to CEditor using ILanguageUI adapter on the working copy language.
This commit is contained in:
parent
8cf13ce26a
commit
20ace94bc2
5 changed files with 86 additions and 51 deletions
|
@ -77,7 +77,7 @@ public class LanguageManager {
|
||||||
IConfigurationElement language = languages[j];
|
IConfigurationElement language = languages[j];
|
||||||
IConfigurationElement[] assocContentTypes = language.getChildren("contentType"); //$NON-NLS-1$
|
IConfigurationElement[] assocContentTypes = language.getChildren("contentType"); //$NON-NLS-1$
|
||||||
for (int k = 0; k < assocContentTypes.length; ++k) {
|
for (int k = 0; k < assocContentTypes.length; ++k) {
|
||||||
if (contentTypeId.equals(assocContentTypes[i].getAttribute("id"))) { //$NON-NLS-1$
|
if (contentTypeId.equals(assocContentTypes[k].getAttribute("id"))) { //$NON-NLS-1$
|
||||||
return (ILanguage)language.createExecutableExtension("class"); //$NON-NLS-1$
|
return (ILanguage)language.createExecutableExtension("class"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1447,22 +1447,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Source code language to display */
|
|
||||||
public final static String LANGUAGE_CPP = "CEditor.language.cpp"; //$NON-NLS-1$
|
|
||||||
public final static String LANGUAGE_C = "CEditor.language.c"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @see AbstractTextEditor#createSourceViewer(Composite, IVerticalRuler, int)
|
* @see AbstractTextEditor#createSourceViewer(Composite, IVerticalRuler, int)
|
||||||
*/
|
*/
|
||||||
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
|
protected ISourceViewer createSourceViewer(Composite parent, IVerticalRuler ruler, int styles) {
|
||||||
// Figure out if this is a C or C++ source file
|
|
||||||
IWorkingCopyManager mgr = CUIPlugin.getDefault().getWorkingCopyManager();
|
|
||||||
ITranslationUnit unit = mgr.getWorkingCopy(getEditorInput());
|
|
||||||
String fileType = LANGUAGE_CPP;
|
|
||||||
if (unit != null) {
|
|
||||||
fileType= unit.isCLanguage() ? LANGUAGE_C : LANGUAGE_CPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
fAnnotationAccess = createAnnotationAccess();
|
fAnnotationAccess = createAnnotationAccess();
|
||||||
|
|
||||||
ISharedTextColors sharedColors = CUIPlugin.getDefault().getSharedTextColors();
|
ISharedTextColors sharedColors = CUIPlugin.getDefault().getSharedTextColors();
|
||||||
|
@ -1474,8 +1462,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
ruler,
|
ruler,
|
||||||
styles,
|
styles,
|
||||||
fOverviewRuler,
|
fOverviewRuler,
|
||||||
isOverviewRulerVisible(),
|
isOverviewRulerVisible());
|
||||||
fileType);
|
|
||||||
fSourceViewerDecorationSupport =
|
fSourceViewerDecorationSupport =
|
||||||
new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors);
|
new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors);
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor.ITextConverter;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
|
||||||
import org.eclipse.jface.text.DocumentCommand;
|
import org.eclipse.jface.text.DocumentCommand;
|
||||||
import org.eclipse.jface.text.ITextViewerExtension;
|
import org.eclipse.jface.text.ITextViewerExtension;
|
||||||
import org.eclipse.jface.text.contentassist.IContentAssistant;
|
import org.eclipse.jface.text.contentassist.IContentAssistant;
|
||||||
|
@ -26,6 +25,14 @@ import org.eclipse.jface.text.source.SourceViewerConfiguration;
|
||||||
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
import org.eclipse.jface.text.source.projection.ProjectionViewer;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor.ITextConverter;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adapted source viewer for CEditor
|
* Adapted source viewer for CEditor
|
||||||
*/
|
*/
|
||||||
|
@ -40,10 +47,8 @@ public class CSourceViewer extends ProjectionViewer implements ITextViewerExtens
|
||||||
/** Presents outline. */
|
/** Presents outline. */
|
||||||
private IInformationPresenter fOutlinePresenter;
|
private IInformationPresenter fOutlinePresenter;
|
||||||
|
|
||||||
|
|
||||||
private List fTextConverters;
|
private List fTextConverters;
|
||||||
private String fDisplayLanguage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new source viewer.
|
* Creates new source viewer.
|
||||||
* @param editor
|
* @param editor
|
||||||
|
@ -52,23 +57,33 @@ public class CSourceViewer extends ProjectionViewer implements ITextViewerExtens
|
||||||
* @param styles
|
* @param styles
|
||||||
* @param fOverviewRuler
|
* @param fOverviewRuler
|
||||||
* @param isOverviewRulerShowing
|
* @param isOverviewRulerShowing
|
||||||
* @param language
|
|
||||||
*/
|
*/
|
||||||
public CSourceViewer(
|
public CSourceViewer(
|
||||||
CEditor editor, Composite parent,
|
CEditor editor, Composite parent,
|
||||||
IVerticalRuler ruler,
|
IVerticalRuler ruler,
|
||||||
int styles,
|
int styles,
|
||||||
IOverviewRuler fOverviewRuler,
|
IOverviewRuler fOverviewRuler,
|
||||||
boolean isOverviewRulerShowing,
|
boolean isOverviewRulerShowing) {
|
||||||
String language) {
|
|
||||||
super(parent, ruler, fOverviewRuler, isOverviewRulerShowing, styles);
|
super(parent, ruler, fOverviewRuler, isOverviewRulerShowing, styles);
|
||||||
this.editor = editor;
|
this.editor = editor;
|
||||||
fDisplayLanguage = language;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IContentAssistant getContentAssistant() {
|
public IContentAssistant getContentAssistant() {
|
||||||
return fContentAssistant;
|
return fContentAssistant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ILanguage getLanguage() {
|
||||||
|
ICElement element = editor.getInputCElement();
|
||||||
|
if (element instanceof ITranslationUnit) {
|
||||||
|
try {
|
||||||
|
return ((ITranslationUnit)element).getLanguage();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see org.eclipse.jface.text.source.SourceViewer#configure(org.eclipse.jface.text.source.SourceViewerConfiguration)
|
* @see org.eclipse.jface.text.source.SourceViewer#configure(org.eclipse.jface.text.source.SourceViewerConfiguration)
|
||||||
*/
|
*/
|
||||||
|
@ -161,13 +176,6 @@ public class CSourceViewer extends ProjectionViewer implements ITextViewerExtens
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDisplayLanguage(String language) {
|
|
||||||
fDisplayLanguage = language;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDisplayLanguage() {
|
|
||||||
return fDisplayLanguage;
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.jface.text.source.ISourceViewer#setRangeIndication(int, int, boolean)
|
* @see org.eclipse.jface.text.source.ISourceViewer#setRangeIndication(int, int, boolean)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,15 +13,6 @@ package org.eclipse.cdt.internal.ui.text;
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CElementHyperlinkDetector;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
|
||||||
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverDescriptor;
|
|
||||||
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverProxy;
|
|
||||||
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor2;
|
|
||||||
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
|
||||||
import org.eclipse.cdt.ui.CElementContentProvider;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogSettings;
|
import org.eclipse.jface.dialogs.IDialogSettings;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
import org.eclipse.jface.text.DefaultInformationControl;
|
import org.eclipse.jface.text.DefaultInformationControl;
|
||||||
|
@ -57,6 +48,21 @@ import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
|
||||||
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
|
import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||||
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
|
import org.eclipse.cdt.ui.CElementContentProvider;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.ILanguageUI;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CElementHyperlinkDetector;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CSourceViewer;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverDescriptor;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.c.hover.CEditorTextHoverProxy;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor2;
|
||||||
|
import org.eclipse.cdt.internal.ui.text.contentassist.ContentAssistPreference;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -155,16 +161,20 @@ public class CSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
||||||
PresentationReconciler reconciler= new PresentationReconciler();
|
PresentationReconciler reconciler= new PresentationReconciler();
|
||||||
reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
|
reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
|
||||||
|
|
||||||
RuleBasedScanner scanner;
|
RuleBasedScanner scanner = null;
|
||||||
|
|
||||||
if(sourceViewer instanceof CSourceViewer) {
|
if(sourceViewer instanceof CSourceViewer) {
|
||||||
String language = ((CSourceViewer)sourceViewer).getDisplayLanguage();
|
ILanguage language = ((CSourceViewer)sourceViewer).getLanguage();
|
||||||
if(language != null && language.equals(CEditor.LANGUAGE_CPP)) {
|
if (language instanceof GPPLanguage) {
|
||||||
scanner= fTextTools.getCppCodeScanner();
|
scanner = fTextTools.getCppCodeScanner();
|
||||||
|
} else if (language instanceof GCCLanguage) {
|
||||||
|
scanner = fTextTools.getCCodeScanner();
|
||||||
} else {
|
} else {
|
||||||
scanner= fTextTools.getCCodeScanner();
|
ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class);
|
||||||
|
if (languageUI != null)
|
||||||
|
scanner = languageUI.getCodeScanner();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
if (scanner == null) {
|
||||||
scanner= fTextTools.getCCodeScanner();
|
scanner= fTextTools.getCCodeScanner();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2006 QNX Software Systems and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX Software Systems - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.ui;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
import org.eclipse.jface.text.rules.RuleBasedScanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Doug Schaefer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface ILanguageUI extends IAdaptable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the code scanner that drives coloring in the editor.
|
||||||
|
*
|
||||||
|
* @return code scanner for this language
|
||||||
|
*/
|
||||||
|
RuleBasedScanner getCodeScanner();
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue