mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-01 14:15:23 +02:00
utility function to get languages from ICResourceDescription
This commit is contained in:
parent
d192508e91
commit
e5fb5bf1c0
7 changed files with 171 additions and 224 deletions
|
@ -26,9 +26,8 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
import org.eclipse.cdt.core.ErrorParserManager;
|
||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
|
||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializable;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.LanguageManager;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
|
||||
|
@ -243,13 +242,12 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
|
|||
public boolean processLine(String line, ErrorParserManager epm) {
|
||||
errorParserManager = epm;
|
||||
parsedResourceName = parseForResourceName(line);
|
||||
currentResource = findResource(parsedResourceName);
|
||||
|
||||
currentLanguageId = determineLanguage(parsedResourceName);
|
||||
currentLanguageId = determineLanguage();
|
||||
if (!isLanguageInScope(currentLanguageId))
|
||||
return false;
|
||||
|
||||
currentResource = findResource(parsedResourceName);
|
||||
|
||||
/**
|
||||
* URI of directory where the build is happening. This URI could point to a remote filesystem
|
||||
* for remote builds. Most often it is the same filesystem as for currentResource but
|
||||
|
@ -316,21 +314,22 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
|
|||
MakeCorePlugin.log(status);
|
||||
}
|
||||
|
||||
protected String determineLanguage(String parsedResourceName) {
|
||||
if (parsedResourceName==null)
|
||||
protected String determineLanguage() {
|
||||
IResource rc = currentResource;
|
||||
if (rc == null && currentProject != null && parsedResourceName != null) {
|
||||
String fileName = new Path(parsedResourceName).lastSegment().toString();
|
||||
// use handle; resource does not need to exist
|
||||
rc = currentProject.getFile("__" + fileName);
|
||||
}
|
||||
|
||||
if (rc == null)
|
||||
return null;
|
||||
|
||||
String fileName = new Path(parsedResourceName).lastSegment().toString();
|
||||
IContentTypeManager manager = Platform.getContentTypeManager();
|
||||
IContentType contentType = manager.findContentTypeFor(fileName);
|
||||
if (contentType==null)
|
||||
List<String> languageIds = LanguageSettingsManager.getLanguages(rc, currentCfgDescription);
|
||||
if (languageIds.isEmpty())
|
||||
return null;
|
||||
|
||||
ILanguage lang = LanguageManager.getInstance().getLanguage(contentType);
|
||||
if (lang==null)
|
||||
return null;
|
||||
|
||||
return lang.getId();
|
||||
|
||||
return languageIds.get(0);
|
||||
}
|
||||
|
||||
protected boolean isLanguageInScope(String languageId) {
|
||||
|
|
|
@ -60,8 +60,6 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
|
||||
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
|
||||
|
@ -4813,13 +4811,9 @@ public class ManagedBuildManager extends AbstractCExtension {
|
|||
static public void runBuiltinSpecsDetectors(ICConfigurationDescription cfgDescription, IPath workingDirectory,
|
||||
String[] env, IProgressMonitor monitor) {
|
||||
IProject project = cfgDescription.getProjectDescription().getProject();
|
||||
ICFolderDescription rootFolderDescription = cfgDescription.getRootFolderDescription();
|
||||
List<String> languageIds = new ArrayList<String>();
|
||||
for (ICLanguageSetting languageSetting : rootFolderDescription.getLanguageSettings()) {
|
||||
String id = languageSetting.getLanguageId();
|
||||
if (id!=null) {
|
||||
languageIds.add(id);
|
||||
}
|
||||
List<String> languageIds = LanguageSettingsManager.getLanguages(project, cfgDescription);
|
||||
if (languageIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (ILanguageSettingsProvider provider : cfgDescription.getLanguageSettingProviders()) {
|
||||
|
|
|
@ -148,7 +148,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String determineLanguage(String parsedResourceName) {
|
||||
protected String determineLanguage() {
|
||||
// language id is supposed to be set by run(), just return it
|
||||
return currentLanguageId;
|
||||
}
|
||||
|
|
|
@ -1,30 +1,37 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2011 Andrew Gvozdev (Quoin Inc.) and others.
|
||||
* Copyright (c) 2009, 2011 Andrew Gvozdev 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:
|
||||
* Andrew Gvozdev (Quoin Inc.) - initial API and implementation
|
||||
* Andrew Gvozdev - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.core.language.settings.providers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.LanguageManager;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFileDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ILanguageSettingsEditableProvider;
|
||||
import org.eclipse.cdt.internal.core.LocalProjectScope;
|
||||
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager;
|
||||
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||
import org.osgi.service.prefs.Preferences;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
/**
|
||||
* A collection of utility methods to manage language settings providers.
|
||||
|
@ -167,4 +174,82 @@ public class LanguageSettingsManager {
|
|||
return provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find language IDs for the resource represented by resource description.
|
||||
* Under the hood build component is inquired and the language IDs would
|
||||
* commonly come from the input type(s).
|
||||
*
|
||||
* @param rcDescription - resource description
|
||||
* @return list of language IDs for the resource.
|
||||
* Never returns {@code null} but empty list if no languages can be found.
|
||||
*
|
||||
*/
|
||||
public static List<String> getLanguages(ICResourceDescription rcDescription) {
|
||||
ICLanguageSetting[] languageSettings = null;
|
||||
if (rcDescription instanceof ICFileDescription) {
|
||||
ICLanguageSetting languageSetting = ((ICFileDescription)rcDescription).getLanguageSetting();
|
||||
if (languageSetting != null) {
|
||||
languageSettings = new ICLanguageSetting[] {languageSetting};
|
||||
}
|
||||
} else if (rcDescription instanceof ICFolderDescription) {
|
||||
languageSettings = ((ICFolderDescription)rcDescription).getLanguageSettings();
|
||||
}
|
||||
|
||||
List<String> languageIds = new ArrayList<String>();
|
||||
if (languageSettings != null) {
|
||||
for (ICLanguageSetting languageSetting : languageSettings) {
|
||||
if (languageSetting!=null) {
|
||||
String languageId = languageSetting.getLanguageId();
|
||||
if (languageId != null && !languageId.isEmpty()) {
|
||||
languageIds.add(languageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return languageIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find language IDs for the resource in given build configuration.
|
||||
* Under the hood build component is inquired and the language IDs would
|
||||
* commonly come from the input type(s).
|
||||
*
|
||||
* @param resource - the resource to find languages for.
|
||||
* @param cfgDescription
|
||||
* @return list of language IDs for the resource.
|
||||
* Never returns {@code null} but empty list if no languages can be found.
|
||||
*/
|
||||
public static List<String> getLanguages(IResource resource, ICConfigurationDescription cfgDescription) {
|
||||
List<String> languageIds = new ArrayList<String>();
|
||||
IPath prjRelPath = resource.getProjectRelativePath();
|
||||
if (resource instanceof IFile) {
|
||||
String langId = null;
|
||||
if (cfgDescription != null) {
|
||||
ICLanguageSetting ls = cfgDescription.getLanguageSettingForFile(prjRelPath, true);
|
||||
if (ls != null) {
|
||||
langId = ls.getLanguageId();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
ILanguage lang = LanguageManager.getInstance().getLanguageForFile((IFile) resource, null);
|
||||
langId = lang.getId();
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
}
|
||||
if (langId != null) {
|
||||
languageIds.add(langId);
|
||||
}
|
||||
} else {
|
||||
ICResourceDescription rcDes = cfgDescription.getResourceDescription(prjRelPath, false);
|
||||
if (rcDes == null) {
|
||||
rcDes = cfgDescription.getRootFolderDescription();
|
||||
}
|
||||
languageIds = getLanguages(rcDes);
|
||||
}
|
||||
|
||||
return languageIds;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009, 2009 Andrew Gvozdev (Quoin Inc.) and others.
|
||||
* Copyright (c) 2009, 2011 Andrew Gvozdev 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:
|
||||
* Andrew Gvozdev (Quoin Inc.) - initial API and implementation
|
||||
* Andrew Gvozdev - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.core.language.settings.providers;
|
||||
|
@ -15,11 +15,7 @@ import java.util.List;
|
|||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFileDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ILanguageSettingsEditableProvider;
|
||||
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsExtensionManager;
|
||||
import org.eclipse.cdt.internal.core.language.settings.providers.LanguageSettingsProvidersSerializer;
|
||||
|
@ -28,29 +24,13 @@ import org.eclipse.core.resources.IResource;
|
|||
import org.eclipse.core.runtime.CoreException;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
* This layer of language settings in TODO
|
||||
*
|
||||
* Duplicate entries are filtered where only first entry is preserved.
|
||||
*
|
||||
* This temporary class keeps the utility methods being looking for better home
|
||||
*/
|
||||
public class LanguageSettingsManager_TBD {
|
||||
public static final String PROVIDER_UNKNOWN = "org.eclipse.cdt.projectmodel.4.0.0";
|
||||
public static final String PROVIDER_UI_USER = "org.eclipse.cdt.ui.user.LanguageSettingsProvider";
|
||||
public static final char PROVIDER_DELIMITER = LanguageSettingsProvidersSerializer.PROVIDER_DELIMITER;
|
||||
|
||||
private static ICLanguageSetting[] getLanguageIds(ICResourceDescription rcDescription) {
|
||||
if (rcDescription instanceof ICFileDescription) {
|
||||
ICFileDescription fileDescription = (ICFileDescription)rcDescription;
|
||||
return new ICLanguageSetting[] {fileDescription.getLanguageSetting()};
|
||||
} else if (rcDescription instanceof ICFolderDescription) {
|
||||
ICFolderDescription folderDescription = (ICFolderDescription)rcDescription;
|
||||
return folderDescription.getLanguageSettings();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isCustomizedResource(ICConfigurationDescription cfgDescription, IResource rc) {
|
||||
if (rc instanceof IProject)
|
||||
return false;
|
||||
|
@ -59,16 +39,13 @@ public class LanguageSettingsManager_TBD {
|
|||
// FIXME
|
||||
// if (!LanguageSettingsManager.isWorkspaceProvider(provider)) {
|
||||
if (provider instanceof ILanguageSettingsEditableProvider || provider instanceof LanguageSettingsSerializable) {
|
||||
ICResourceDescription rcDescription = cfgDescription.getResourceDescription(rc.getProjectRelativePath(), false);
|
||||
for (ICLanguageSetting languageSetting : getLanguageIds(rcDescription)) {
|
||||
String languageId = languageSetting.getLanguageId();
|
||||
if (languageId!=null) {
|
||||
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
|
||||
if (list!=null) {
|
||||
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(null, null, languageId);
|
||||
if (!list.equals(listDefault))
|
||||
return true;
|
||||
}
|
||||
for (String languageId : LanguageSettingsManager.getLanguages(rc, cfgDescription)) {
|
||||
List<ICLanguageSettingEntry> list = provider.getSettingEntries(cfgDescription, rc, languageId);
|
||||
if (list!=null) {
|
||||
List<ICLanguageSettingEntry> listDefault = provider.getSettingEntries(null, null, languageId);
|
||||
// != is OK here due as the equal lists will have the same reference in WeakHashSet
|
||||
if (list != listDefault)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2010, 2010 Andrew Gvozdev (Quoin Inc.) and others.
|
||||
* Copyright (c) 2010, 2011 Andrew Gvozdev 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:
|
||||
* Andrew Gvozdev (Quoin Inc.) - initial API and implementation
|
||||
* Andrew Gvozdev - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.language.settings.providers;
|
||||
|
@ -20,24 +20,18 @@ import java.util.Map;
|
|||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.LanguageManager;
|
||||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
|
||||
import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.core.settings.model.ACPathEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingPathEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICMacroEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
|
||||
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
|
||||
import org.eclipse.cdt.internal.core.settings.model.SettingsModelMessages;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
@ -72,8 +66,10 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
|
|||
if (cfgDescription==null)
|
||||
return DUMMY_SCANNER_INFO;
|
||||
|
||||
List<String> languageIds = getLanguageIds(cfgDescription, rc);
|
||||
if (languageIds==null || languageIds.size()==0) {
|
||||
List<String> languageIds = LanguageSettingsManager.getLanguages(rc, cfgDescription);
|
||||
if (languageIds.isEmpty()) {
|
||||
String msg = NLS.bind(SettingsModelMessages.getString("LanguageSettingsScannerInfoProvider.UnableToDetermineLanguage"), rc.toString()); //$NON-NLS-1$
|
||||
CCorePlugin.log(new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg)));
|
||||
return DUMMY_SCANNER_INFO;
|
||||
}
|
||||
|
||||
|
@ -121,66 +117,6 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
|
|||
return new ExtendedScannerInfo(definedMacros, includePaths, macroFiles, includeFiles, includePathsLocal);
|
||||
}
|
||||
|
||||
private List<String> getLanguageIds(ICConfigurationDescription cfgDescription, IResource resource) {
|
||||
List<String> languageIds = null;
|
||||
if (resource instanceof IFile) {
|
||||
String langId = getLanguageIdForFile(cfgDescription, resource);
|
||||
if (langId!=null) {
|
||||
languageIds = new ArrayList<String>(1);
|
||||
languageIds.add(langId);
|
||||
}
|
||||
} else if (resource instanceof IContainer) { // IResource can be either IFile or IContainer
|
||||
languageIds = getLanguageIdsForFolder(cfgDescription, (IContainer) resource);
|
||||
}
|
||||
if (languageIds==null || languageIds.size()==0) {
|
||||
String msg = NLS.bind(SettingsModelMessages.getString("LanguageSettingsScannerInfoProvider.UnableToDetermineLanguage"), resource.toString()); //$NON-NLS-1$
|
||||
CCorePlugin.log(new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, msg)));
|
||||
}
|
||||
return languageIds;
|
||||
}
|
||||
|
||||
private String getLanguageIdForFile(ICConfigurationDescription cfgDescription, IResource resource) {
|
||||
// For files using LanguageManager
|
||||
try {
|
||||
ILanguage language = LanguageManager.getInstance().getLanguageForFile((IFile) resource, cfgDescription);
|
||||
if (language!=null) {
|
||||
return language.getId();
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
CCorePlugin.log(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<String> getLanguageIdsForFolder(ICConfigurationDescription cfgDescription, IContainer resource) {
|
||||
// Using MBS for folders. That will take language ID from input type of applicable tools in the toolchain.
|
||||
List<String> languageIds = new ArrayList<String>();
|
||||
|
||||
ICFolderDescription rcDes = null;
|
||||
ICLanguageSetting[] langSettings = null;
|
||||
if (resource.getType() == IResource.FOLDER) { // but not IResource.PROJECT
|
||||
IPath rcPath = resource.getProjectRelativePath();
|
||||
rcDes = (ICFolderDescription) cfgDescription.getResourceDescription(rcPath, false);
|
||||
langSettings = rcDes.getLanguageSettings();
|
||||
}
|
||||
if (langSettings==null || langSettings.length==0) {
|
||||
// not found or IResource.PROJECT
|
||||
ICFolderDescription rootDes = cfgDescription.getRootFolderDescription();
|
||||
langSettings = rootDes.getLanguageSettings();
|
||||
}
|
||||
|
||||
if (langSettings!=null) {
|
||||
for (ICLanguageSetting ls : langSettings) {
|
||||
String langId = ls.getLanguageId();
|
||||
if (langId!=null && !languageIds.contains(langId)) {
|
||||
languageIds.add(langId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return languageIds;
|
||||
}
|
||||
|
||||
private IPath expandVariables(IPath path, ICConfigurationDescription cfgDescription) {
|
||||
ICdtVariableManager varManager = CCorePlugin.getDefault().getCdtVariableManager();
|
||||
String pathStr = path.toString();
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
package org.eclipse.cdt.internal.ui.language.settings.providers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
@ -51,16 +50,10 @@ import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager_
|
|||
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsSerializable;
|
||||
import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.ILanguageDescriptor;
|
||||
import org.eclipse.cdt.core.model.LanguageManager;
|
||||
import org.eclipse.cdt.core.model.util.CDTListComparator;
|
||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFileDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICFolderDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
|
||||
import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
|
||||
import org.eclipse.cdt.core.settings.model.ICSettingBase;
|
||||
import org.eclipse.cdt.core.settings.model.ICSettingEntry;
|
||||
import org.eclipse.cdt.core.settings.model.ILanguageSettingsEditableProvider;
|
||||
import org.eclipse.cdt.ui.CDTSharedImages;
|
||||
|
@ -68,7 +61,6 @@ import org.eclipse.cdt.ui.CUIPlugin;
|
|||
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
|
||||
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
|
||||
|
||||
|
||||
import org.eclipse.cdt.internal.ui.newui.LanguageSettingsImages;
|
||||
import org.eclipse.cdt.internal.ui.newui.Messages;
|
||||
import org.eclipse.cdt.internal.ui.newui.StatusMessageLine;
|
||||
|
@ -89,7 +81,6 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
|
|||
private Tree treeEntries;
|
||||
private TreeViewer treeEntriesViewer;
|
||||
private String currentLanguageId = null;
|
||||
private ICLanguageSetting[] allLanguages;
|
||||
|
||||
private Button builtInCheckBox;
|
||||
private Button enableProvidersCheckBox;
|
||||
|
@ -320,12 +311,9 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
|
|||
public void widgetSelected(SelectionEvent e) {
|
||||
TreeItem[] items = treeLanguages.getSelection();
|
||||
if (items.length > 0) {
|
||||
ICLanguageSetting langSetting = (ICLanguageSetting) items[0].getData();
|
||||
if (langSetting != null) {
|
||||
currentLanguageId = langSetting.getLanguageId();
|
||||
updateTreeEntries();
|
||||
updateButtons();
|
||||
}
|
||||
currentLanguageId = (String) items[0].getData();
|
||||
updateTreeEntries();
|
||||
updateButtons();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -887,58 +875,38 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
|
|||
updateButtons();
|
||||
}
|
||||
|
||||
private ICLanguageSetting[] getLangSettings(ICResourceDescription rcDes) {
|
||||
switch (rcDes.getType()) {
|
||||
case ICSettingBase.SETTING_PROJECT:
|
||||
case ICSettingBase.SETTING_CONFIGURATION:
|
||||
case ICSettingBase.SETTING_FOLDER:
|
||||
ICFolderDescription foDes = (ICFolderDescription) rcDes;
|
||||
return foDes.getLanguageSettings();
|
||||
case ICSettingBase.SETTING_FILE:
|
||||
ICFileDescription fiDes = (ICFileDescription) rcDes;
|
||||
ICLanguageSetting langSetting = fiDes.getLanguageSetting();
|
||||
return (langSetting != null) ? new ICLanguageSetting[] { langSetting } : null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void updateTreeLanguages(ICResourceDescription rcDes) {
|
||||
treeLanguages.removeAll();
|
||||
TreeItem selectedLanguageItem = null;
|
||||
allLanguages = getLangSettings(rcDes);
|
||||
if (allLanguages != null) {
|
||||
Arrays.sort(allLanguages, CDTListComparator.getInstance());
|
||||
for (ICLanguageSetting langSetting : allLanguages) {
|
||||
String langId = langSetting.getLanguageId();
|
||||
if (langId==null || langId.length()==0)
|
||||
continue;
|
||||
|
||||
ILanguage language = LanguageManager.getInstance().getLanguage(langId);
|
||||
if (language == null)
|
||||
continue;
|
||||
List<String> languageIds = LanguageSettingsManager.getLanguages(rcDes);
|
||||
Collections.sort(languageIds);
|
||||
for (String langId : languageIds) {
|
||||
ILanguage language = LanguageManager.getInstance().getLanguage(langId);
|
||||
if (language == null)
|
||||
continue;
|
||||
|
||||
langId = language.getName();
|
||||
if (langId == null || langId.length()==0)
|
||||
continue;
|
||||
String langName = language.getName();
|
||||
if (langName == null || langName.length()==0)
|
||||
continue;
|
||||
|
||||
TreeItem t = new TreeItem(treeLanguages, SWT.NONE);
|
||||
t.setText(0, langId);
|
||||
t.setData(langSetting);
|
||||
if (selectedLanguageItem == null) {
|
||||
if (currentLanguageId!=null) {
|
||||
if (currentLanguageId.equals(langSetting.getLanguageId())) {
|
||||
selectedLanguageItem = t;
|
||||
}
|
||||
} else {
|
||||
TreeItem t = new TreeItem(treeLanguages, SWT.NONE);
|
||||
t.setText(0, langName);
|
||||
t.setData(langId);
|
||||
if (selectedLanguageItem == null) {
|
||||
if (currentLanguageId!=null) {
|
||||
if (currentLanguageId.equals(langId)) {
|
||||
selectedLanguageItem = t;
|
||||
currentLanguageId = langSetting.getLanguageId();
|
||||
}
|
||||
} else {
|
||||
selectedLanguageItem = t;
|
||||
currentLanguageId = langId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedLanguageItem != null) {
|
||||
treeLanguages.setSelection(selectedLanguageItem);
|
||||
}
|
||||
if (selectedLanguageItem != null) {
|
||||
treeLanguages.setSelection(selectedLanguageItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -988,24 +956,20 @@ public class LanguageSettingsEntriesTab extends AbstractCPropertyTab {
|
|||
providers: for (ILanguageSettingsProvider provider : providers) {
|
||||
ILanguageSettingsEditableProvider writableProvider = null;
|
||||
if (provider instanceof ILanguageSettingsEditableProvider) {
|
||||
TreeItem[] tisLang = treeLanguages.getItems();
|
||||
for (TreeItem tiLang : tisLang) {
|
||||
Object item = tiLang.getData();
|
||||
if (item instanceof ICLanguageSetting) {
|
||||
String languageId = ((ICLanguageSetting)item).getLanguageId();
|
||||
if (languageId!=null) {
|
||||
if (provider.getSettingEntries(cfgDescription, rc, languageId)!=null) {
|
||||
try {
|
||||
// clone providers to be able to "Cancel" in UI
|
||||
if (writableProvider==null) {
|
||||
writableProvider = ((ILanguageSettingsEditableProvider) provider).clone();
|
||||
}
|
||||
writableProvider.setSettingEntries(cfgDescription, rc, languageId, null);
|
||||
changed = true;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e);
|
||||
continue providers;
|
||||
for (TreeItem langItems : treeLanguages.getItems()) {
|
||||
String langId = (String)langItems.getData();
|
||||
if (langId!=null) {
|
||||
if (provider.getSettingEntries(cfgDescription, rc, langId)!=null) {
|
||||
try {
|
||||
// clone providers to be able to "Cancel" in UI
|
||||
if (writableProvider==null) {
|
||||
writableProvider = ((ILanguageSettingsEditableProvider) provider).clone();
|
||||
}
|
||||
writableProvider.setSettingEntries(cfgDescription, rc, langId, null);
|
||||
changed = true;
|
||||
} catch (CloneNotSupportedException e) {
|
||||
CUIPlugin.log("Internal Error: cannot clone provider "+provider.getId(), e);
|
||||
continue providers;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1073,23 +1037,15 @@ providers: for (ILanguageSettingsProvider provider : providers) {
|
|||
if (CDTPrefUtil.getBool(CDTPrefUtil.KEY_NO_SHOW_PROVIDERS))
|
||||
return false;
|
||||
|
||||
//filter out files not associated with any languages
|
||||
//filter out files not associated with any languages such as *.o
|
||||
if (page.isForFile()) {
|
||||
ICLanguageSetting [] langSettings = getLangSettings(getResDesc());
|
||||
if (langSettings == null)
|
||||
return false;
|
||||
|
||||
// files like *.o may have langSettings but no associated language
|
||||
for (ICLanguageSetting langSetting : langSettings) {
|
||||
String langId = langSetting.getLanguageId();
|
||||
if (langId!=null && langId.length()>0) {
|
||||
LanguageManager langManager = LanguageManager.getInstance();
|
||||
ILanguageDescriptor langDes = langManager.getLanguageDescriptor(langId);
|
||||
if (langDes != null)
|
||||
return true;
|
||||
}
|
||||
List<String> languageIds = LanguageSettingsManager.getLanguages(getResDesc());
|
||||
for (String langId : languageIds) {
|
||||
LanguageManager langManager = LanguageManager.getInstance();
|
||||
ILanguage language = langManager.getLanguage(langId);
|
||||
if (language != null)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue