diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java index 43b6572d004..92581df6216 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/LanguageManager.java @@ -77,7 +77,7 @@ public class LanguageManager { IConfigurationElement language = languages[j]; IConfigurationElement[] assocContentTypes = language.getChildren("contentType"); //$NON-NLS-1$ 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$ } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java index 2694217ec80..e9d743b2d11 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java @@ -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) */ 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(); ISharedTextColors sharedColors = CUIPlugin.getDefault().getSharedTextColors(); @@ -1474,8 +1462,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS ruler, styles, fOverviewRuler, - isOverviewRulerVisible(), - fileType); + isOverviewRulerVisible()); fSourceViewerDecorationSupport = new SourceViewerDecorationSupport(sourceViewer, fOverviewRuler, fAnnotationAccess, sharedColors); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java index e7418db6c6e..126901bc687 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java @@ -14,8 +14,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.eclipse.cdt.internal.ui.editor.CEditor.ITextConverter; -import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration; +import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.DocumentCommand; import org.eclipse.jface.text.ITextViewerExtension; 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.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 */ @@ -40,10 +47,8 @@ public class CSourceViewer extends ProjectionViewer implements ITextViewerExtens /** Presents outline. */ private IInformationPresenter fOutlinePresenter; - private List fTextConverters; - private String fDisplayLanguage; - + /** * Creates new source viewer. * @param editor @@ -52,23 +57,33 @@ public class CSourceViewer extends ProjectionViewer implements ITextViewerExtens * @param styles * @param fOverviewRuler * @param isOverviewRulerShowing - * @param language */ public CSourceViewer( - CEditor editor, Composite parent, - IVerticalRuler ruler, - int styles, - IOverviewRuler fOverviewRuler, - boolean isOverviewRulerShowing, - String language) { + CEditor editor, Composite parent, + IVerticalRuler ruler, + int styles, + IOverviewRuler fOverviewRuler, + boolean isOverviewRulerShowing) { super(parent, ruler, fOverviewRuler, isOverviewRulerShowing, styles); this.editor = editor; - fDisplayLanguage = language; } + public IContentAssistant getContentAssistant() { 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) */ @@ -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) * @see org.eclipse.jface.text.source.ISourceViewer#setRangeIndication(int, int, boolean) */ diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java index bcf030c415a..e5f9caee450 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/CSourceViewerConfiguration.java @@ -13,15 +13,6 @@ package org.eclipse.cdt.internal.ui.text; 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.preference.IPreferenceStore; 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.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(); reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer)); - RuleBasedScanner scanner; - + RuleBasedScanner scanner = null; if(sourceViewer instanceof CSourceViewer) { - String language = ((CSourceViewer)sourceViewer).getDisplayLanguage(); - if(language != null && language.equals(CEditor.LANGUAGE_CPP)) { - scanner= fTextTools.getCppCodeScanner(); + ILanguage language = ((CSourceViewer)sourceViewer).getLanguage(); + if (language instanceof GPPLanguage) { + scanner = fTextTools.getCppCodeScanner(); + } else if (language instanceof GCCLanguage) { + scanner = fTextTools.getCCodeScanner(); } else { - scanner= fTextTools.getCCodeScanner(); + ILanguageUI languageUI = (ILanguageUI)language.getAdapter(ILanguageUI.class); + if (languageUI != null) + scanner = languageUI.getCodeScanner(); } - } else { + } + if (scanner == null) { scanner= fTextTools.getCCodeScanner(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ILanguageUI.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ILanguageUI.java new file mode 100644 index 00000000000..be8267197f5 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/ILanguageUI.java @@ -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(); + +}