diff options
author | Andrew Gvozdev | 2013-03-30 11:17:37 +0000 |
---|---|---|
committer | Andrew Gvozdev | 2013-05-02 15:58:18 +0000 |
commit | e14728c2c4dbc9b1767d7b43cce2bd8755b3e631 (patch) | |
tree | b557366ff131e1213b4d73fc5e81429af675793b | |
parent | 4f51a6d37233146fa7f49c9d3d7c1cb41eaad01f (diff) | |
download | org.eclipse.cdt-e14728c2c4dbc9b1767d7b43cce2bd8755b3e631.tar.gz org.eclipse.cdt-e14728c2c4dbc9b1767d7b43cce2bd8755b3e631.tar.xz org.eclipse.cdt-e14728c2c4dbc9b1767d7b43cce2bd8755b3e631.zip |
bug 401961: Regression: pathEntryContainers entries are no longer honored when importing a project into cdt-8.1.2, due to LSP's being enabled
5 files changed, 281 insertions, 77 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java index fb5ccb744d1..2d7846e4ee1 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java @@ -22,88 +22,86 @@ import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerFileDiscoveredPathInfo; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; -public class PerFileDiscoveredPathContainer extends DiscoveredPathContainer - implements IPathEntryContainerExtension { - - public PerFileDiscoveredPathContainer(IProject project) { - super(project); - } +public class PerFileDiscoveredPathContainer extends DiscoveredPathContainer implements IPathEntryContainerExtension { + public PerFileDiscoveredPathContainer(IProject project) { + super(project); + } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.model.IPathEntryContainerExtension#getPathEntries(org.eclipse.core.runtime.IPath, int) - */ - @Override + @Override public IPathEntry[] getPathEntries(IPath path, int mask) { ArrayList<IPathEntry> entries = new ArrayList<IPathEntry>(); - try { - IDiscoveredPathInfo info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(fProject); - if (info instanceof IPerFileDiscoveredPathInfo) { - IPerFileDiscoveredPathInfo filePathInfo = (IPerFileDiscoveredPathInfo) info; + try { + IDiscoveredPathInfo info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(fProject); + if (info instanceof IPerFileDiscoveredPathInfo) { + IResource rc = fProject.getWorkspace().getRoot().findMember(path); + if (rc.getType() == IResource.FOLDER || rc.getType() == IResource.PROJECT) { + return new IPathEntry[0]; + } - if ((mask & IPathEntry.CDT_INCLUDE) != 0) { - IPath[] includes = filePathInfo.getIncludePaths(path); - for (int i = 0; i < includes.length; i++) { - // add as a system include path - entries.add(CoreModel.newIncludeEntry(path, Path.EMPTY, includes[i], true)); - } - includes = filePathInfo.getQuoteIncludePaths(path); - for (int i = 0; i < includes.length; i++) { - // add as a local include path - entries.add(CoreModel.newIncludeEntry(path, Path.EMPTY, includes[i], false)); - } - } - if ((mask & IPathEntry.CDT_MACRO) != 0) { - Map<String, String> syms = filePathInfo.getSymbols(path); - Set<Entry<String, String>> entrySet = syms.entrySet(); - for (Entry<String, String> entry : entrySet) { - entries.add(CoreModel.newMacroEntry(path, entry.getKey(), entry.getValue())); - } - } - // compare the resource with include and macros files - IPath fullResPath = fProject.getWorkspace().getRoot().getFile(path).getLocation(); - if (fullResPath == null) { - fullResPath = path; - } - if ((mask & IPathEntry.CDT_INCLUDE_FILE) != 0) { - IPath[] includeFiles = filePathInfo.getIncludeFiles(path); - for (int i = 0; i < includeFiles.length; i++) { - if (!includeFiles[i].equals(fullResPath)) { - entries.add(CoreModel.newIncludeFileEntry(path, includeFiles[i])); - } - } - } - if ((mask & IPathEntry.CDT_MACRO_FILE) != 0) { - IPath[] imacrosFiles = filePathInfo.getMacroFiles(path); - for (int i = 0; i < imacrosFiles.length; i++) { - if (!imacrosFiles[i].equals(fullResPath)) { - entries.add(CoreModel.newMacroFileEntry(path, imacrosFiles[i])); - } - } - } - } - } - catch (CoreException e) { - // - } + IPerFileDiscoveredPathInfo filePathInfo = (IPerFileDiscoveredPathInfo) info; + + if ((mask & IPathEntry.CDT_INCLUDE) != 0) { + IPath[] includes = filePathInfo.getIncludePaths(path); + for (int i = 0; i < includes.length; i++) { + // add as a system include path + entries.add(CoreModel.newIncludeEntry(path, Path.EMPTY, includes[i], true)); + } + includes = filePathInfo.getQuoteIncludePaths(path); + for (int i = 0; i < includes.length; i++) { + // add as a local include path + entries.add(CoreModel.newIncludeEntry(path, Path.EMPTY, includes[i], false)); + } + } + if ((mask & IPathEntry.CDT_MACRO) != 0) { + Map<String, String> syms = filePathInfo.getSymbols(path); + Set<Entry<String, String>> entrySet = syms.entrySet(); + for (Entry<String, String> entry : entrySet) { + entries.add(CoreModel.newMacroEntry(path, entry.getKey(), entry.getValue())); + } + } + // compare the resource with include and macros files + IPath fullResPath = fProject.getWorkspace().getRoot().getFile(path).getLocation(); + if (fullResPath == null) { + fullResPath = path; + } + if ((mask & IPathEntry.CDT_INCLUDE_FILE) != 0) { + IPath[] includeFiles = filePathInfo.getIncludeFiles(path); + for (int i = 0; i < includeFiles.length; i++) { + if (!includeFiles[i].equals(fullResPath)) { + entries.add(CoreModel.newIncludeFileEntry(path, includeFiles[i])); + } + } + } + if ((mask & IPathEntry.CDT_MACRO_FILE) != 0) { + IPath[] imacrosFiles = filePathInfo.getMacroFiles(path); + for (int i = 0; i < imacrosFiles.length; i++) { + if (!imacrosFiles[i].equals(fullResPath)) { + entries.add(CoreModel.newMacroFileEntry(path, imacrosFiles[i])); + } + } + } + } + } + catch (CoreException e) { + // + } return entries.toArray(new IPathEntry[entries.size()]); - } + } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.model.IPathEntryContainerExtension#isEmpty(org.eclipse.core.runtime.IPath) - */ @Override public boolean isEmpty(IPath path) { - IDiscoveredPathInfo info; + IDiscoveredPathInfo info; try { info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(fProject); - if (info instanceof IPerFileDiscoveredPathInfo) { - IPerFileDiscoveredPathInfo filePathInfo = (IPerFileDiscoveredPathInfo) info; - return filePathInfo.isEmpty(path); - } + if (info instanceof IPerFileDiscoveredPathInfo) { + IPerFileDiscoveredPathInfo filePathInfo = (IPerFileDiscoveredPathInfo) info; + return filePathInfo.isEmpty(path); + } } catch (CoreException e) { } return false; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java index dfdc1d17ac1..c025d229377 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/language/settings/providers/ScannerDiscoveryLegacySupport.java @@ -24,6 +24,7 @@ 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.cdt.internal.core.language.settings.providers.ScannerInfoExtensionLanguageSettingsProvider;
+import org.eclipse.cdt.internal.core.model.PathEntryManager;
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.preferences.InstanceScope;
@@ -44,9 +45,17 @@ public class ScannerDiscoveryLegacySupport { public static final String USER_LANGUAGE_SETTINGS_PROVIDER_ID = "org.eclipse.cdt.ui.UserLanguageSettingsProvider"; //$NON-NLS-1$
/** ID of MBS language settings provider (from org.eclipse.cdt.managedbuilder.core) */
public static final String MBS_LANGUAGE_SETTINGS_PROVIDER_ID = "org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider"; //$NON-NLS-1$
- /** ID of ScannerInfo language settings provider wrapping ScannerInfoProvider defined by org.eclipse.cdt.core.ScannerInfoProvider extension point */
+
+ /**
+ * ID of ScannerInfo language settings provider wrapping ScannerInfoProvider defined by org.eclipse.cdt.core.ScannerInfoProvider extension point
+ */
private static final String SI_LANGUAGE_SETTINGS_PROVIDER_ID = "org.eclipse.cdt.core.LegacyScannerInfoLanguageSettingsProvider"; //$NON-NLS-1$
+ /**
+ * ID of language settings provider wrapping {@link org.eclipse.cdt.core.resources.ScannerProvider} of {@link PathEntryManager} for 3.X projects
+ */
+ private static final String PATH_ENTRY_MANAGER_LANGUAGE_SETTINGS_PROVIDER_ID = "org.eclipse.cdt.core.PathEntryScannerInfoLanguageSettingsProvider"; //$NON-NLS-1$
+
private static String DISABLE_LSP_PREFERENCE = "language.settings.providers.disabled"; //$NON-NLS-1$
// the default for project needs to be "disabled" - for legacy projects to be open with old SD enabled for MBS provider
private static boolean DISABLE_LSP_DEFAULT_PROJECT = true;
@@ -132,6 +141,24 @@ public class ScannerDiscoveryLegacySupport { }
/**
+ * Check if legacy Scanner Discovery should be active.
+ * @noreference This is internal helper method to support compatibility with previous versions
+ * which is not intended to be referenced by clients.
+ */
+ public static boolean isLegacyProviderOn(ICConfigurationDescription cfgDescription) {
+ if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
+ List<ILanguageSettingsProvider> lsProviders = ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders();
+ for (ILanguageSettingsProvider lsp : lsProviders) {
+ String id = lsp.getId();
+ if (MBS_LANGUAGE_SETTINGS_PROVIDER_ID.equals(id) || SI_LANGUAGE_SETTINGS_PROVIDER_ID.equals(id) || PATH_ENTRY_MANAGER_LANGUAGE_SETTINGS_PROVIDER_ID.equals(id)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
* @noreference This is internal helper method to support compatibility with previous versions
* which is not intended to be referenced by clients.
*/
@@ -143,7 +170,7 @@ public class ScannerDiscoveryLegacySupport { project = prjDescription.getProject();
}
}
- return !isLanguageSettingsProvidersFunctionalityEnabled(project) || isMbsLanguageSettingsProviderOn(cfgDescription);
+ return !isLanguageSettingsProvidersFunctionalityEnabled(project) || isLegacyProviderOn(cfgDescription);
}
/**
@@ -156,7 +183,7 @@ public class ScannerDiscoveryLegacySupport { if (prjDescription != null) {
cfgDescription = prjDescription.getActiveConfiguration();
}
- return !isLanguageSettingsProvidersFunctionalityEnabled(project) || isMbsLanguageSettingsProviderOn(cfgDescription);
+ return !isLanguageSettingsProvidersFunctionalityEnabled(project) || isLegacyProviderOn(cfgDescription);
}
/**
@@ -168,14 +195,18 @@ public class ScannerDiscoveryLegacySupport { */
public static String[] getDefaultProviderIdsLegacy(ICConfigurationDescription cfgDescription) {
boolean useScannerInfoProviderExtension = new ScannerInfoExtensionLanguageSettingsProvider().getScannerInfoProvider(cfgDescription) != null;
+ String legacyProviderId;
if (useScannerInfoProviderExtension) {
- return new String[] {USER_LANGUAGE_SETTINGS_PROVIDER_ID, SI_LANGUAGE_SETTINGS_PROVIDER_ID};
- }
- if (CProjectDescriptionManager.getInstance().isNewStyleCfg(cfgDescription)) {
- return new String[] {USER_LANGUAGE_SETTINGS_PROVIDER_ID, MBS_LANGUAGE_SETTINGS_PROVIDER_ID};
+ legacyProviderId = SI_LANGUAGE_SETTINGS_PROVIDER_ID;
+ } else if (CProjectDescriptionManager.getInstance().isNewStyleCfg(cfgDescription)) {
+ legacyProviderId = MBS_LANGUAGE_SETTINGS_PROVIDER_ID;
+ } else {
+ // Setting default providers other than null would break compatibility in CDT 8.1.X stream
+// legacyProviderId = PATH_ENTRY_MANAGER_LANGUAGE_SETTINGS_PROVIDER_ID;
+ return null;
}
- return null;
+ return new String[] {USER_LANGUAGE_SETTINGS_PROVIDER_ID, legacyProviderId};
}
/**
@@ -192,10 +223,14 @@ public class ScannerDiscoveryLegacySupport { return useScannerInfoProviderExtension;
}
+ boolean isNewStyleCfg = CProjectDescriptionManager.getInstance().isNewStyleCfg(cfgDescription);
if (MBS_LANGUAGE_SETTINGS_PROVIDER_ID.equals(providerId)) {
- boolean isNewStyleCfg = CProjectDescriptionManager.getInstance().isNewStyleCfg(cfgDescription);
return !useScannerInfoProviderExtension && isNewStyleCfg;
}
+
+ if (PATH_ENTRY_MANAGER_LANGUAGE_SETTINGS_PROVIDER_ID.equals(providerId)) {
+ return !useScannerInfoProviderExtension && !isNewStyleCfg;
+ }
}
return true;
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/PathEntryScannerInfoLanguageSettingsProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/PathEntryScannerInfoLanguageSettingsProvider.java new file mode 100644 index 00000000000..ee3ae24a027 --- /dev/null +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/PathEntryScannerInfoLanguageSettingsProvider.java @@ -0,0 +1,165 @@ +/*******************************************************************************
+ * Copyright (c) 2013, 2013 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 - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.internal.core.language.settings.providers;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsBaseProvider;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IContainerEntry;
+import org.eclipse.cdt.core.model.IIncludeEntry;
+import org.eclipse.cdt.core.model.IIncludeFileEntry;
+import org.eclipse.cdt.core.model.ILibraryEntry;
+import org.eclipse.cdt.core.model.IMacroEntry;
+import org.eclipse.cdt.core.model.IMacroFileEntry;
+import org.eclipse.cdt.core.model.IPathEntry;
+import org.eclipse.cdt.core.model.IPathEntryContainer;
+import org.eclipse.cdt.core.model.IPathEntryContainerExtension;
+import org.eclipse.cdt.core.resources.IPathEntryStore;
+import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
+import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.core.settings.model.ICSettingEntry;
+import org.eclipse.cdt.core.settings.model.util.CDataUtil;
+import org.eclipse.cdt.internal.core.model.CModelManager;
+import org.eclipse.cdt.internal.core.model.DefaultPathEntryStore;
+import org.eclipse.cdt.internal.core.model.PathEntryManager;
+import org.eclipse.cdt.internal.core.model.PathEntryUtil;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * Wrapper class intended to provide backward compatibility with ScannerInfo supplied by {@link PathEntryManager}.
+ */
+public class PathEntryScannerInfoLanguageSettingsProvider extends LanguageSettingsBaseProvider {
+ @Override
+ public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource rc, String languageId) {
+ if (cfgDescription == null) {
+ return null;
+ }
+ ICProjectDescription prjDescription = cfgDescription.getProjectDescription();
+ if (prjDescription == null) {
+ return null;
+ }
+
+ IProject project = prjDescription.getProject();
+ ICProject cproject = CModelManager.getDefault().getCModel().getCProject(project);
+ IPath projectPath = cproject.getPath();
+
+ // using map of sets to support specific ordering of entries
+ LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap = new LinkedHashMap<Integer, Set<IPathEntry>>();
+ pathEntriesMap.put(IPathEntry.CDT_INCLUDE, new LinkedHashSet<IPathEntry>());
+ // keep macros sorted
+ pathEntriesMap.put(IPathEntry.CDT_MACRO, new TreeSet<IPathEntry>(new Comparator<IPathEntry>() {
+ @Override
+ public int compare(IPathEntry macro1, IPathEntry macro2) {
+ if (macro1 instanceof IMacroEntry && macro2 instanceof IMacroEntry) {
+ return ((IMacroEntry)macro1).getMacroName().compareTo(((IMacroEntry)macro2).getMacroName());
+ }
+ return 0;
+ }
+ }));
+ pathEntriesMap.put(IPathEntry.CDT_INCLUDE_FILE, new LinkedHashSet<IPathEntry>());
+ pathEntriesMap.put(IPathEntry.CDT_MACRO_FILE, new LinkedHashSet<IPathEntry>());
+ pathEntriesMap.put(IPathEntry.CDT_LIBRARY, new LinkedHashSet<IPathEntry>());
+
+ IPathEntryStore pathEntryStore = new DefaultPathEntryStore(project);
+ int typesMask = IPathEntry.CDT_INCLUDE | IPathEntry.CDT_MACRO | IPathEntry.CDT_INCLUDE_FILE | IPathEntry.CDT_MACRO_FILE | IPathEntry.CDT_LIBRARY;
+ try {
+ IPathEntry[] storePathEntries = pathEntryStore.getRawPathEntries();
+ for (IPathEntry storePathEntry : storePathEntries) {
+ if (storePathEntry instanceof IContainerEntry) {
+ try {
+ IPathEntryContainer container = PathEntryManager.getDefault().getPathEntryContainer((IContainerEntry) storePathEntry, cproject);
+ if (container != null) {
+ IPathEntry[] pathEntries = null;
+ if (container instanceof IPathEntryContainerExtension) {
+ pathEntries = ((IPathEntryContainerExtension)container).getPathEntries(rc.getFullPath(), typesMask);
+ } else {
+ pathEntries = container.getPathEntries();
+ }
+ if (pathEntries != null) {
+ for (IPathEntry pathEntry : pathEntries) {
+ collectPathEntry(pathEntriesMap, projectPath, pathEntry);
+ }
+ }
+ }
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ }
+ } else {
+ collectPathEntry(pathEntriesMap, projectPath, storePathEntry);
+ }
+ }
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ }
+
+ Set<ICLanguageSettingEntry> lsEntries = new LinkedHashSet<ICLanguageSettingEntry>();
+ for (Entry<Integer, Set<IPathEntry>> entrySet : pathEntriesMap.entrySet()) {
+ Set<IPathEntry> pathEntries = entrySet.getValue();
+ for (IPathEntry pathEntry : pathEntries) {
+ ICLanguageSettingEntry lsEntry = toLanguageSettingsEntry(pathEntry);
+ if (lsEntry != null) {
+ lsEntries.add(lsEntry);
+ }
+ }
+ }
+
+ return LanguageSettingsSerializableStorage.getPooledList(new ArrayList<ICLanguageSettingEntry>(lsEntries));
+ }
+
+ private void collectPathEntry(LinkedHashMap<Integer, Set<IPathEntry>> pathEntriesMap, IPath projectPath, IPathEntry pathEntry) {
+ switch (pathEntry.getEntryKind()) {
+ case IPathEntry.CDT_INCLUDE:
+ case IPathEntry.CDT_MACRO:
+ case IPathEntry.CDT_INCLUDE_FILE:
+ case IPathEntry.CDT_MACRO_FILE:
+ case IPathEntry.CDT_LIBRARY:
+ IPathEntry resolvedPathEntry = PathEntryUtil.cloneEntryAndExpand(projectPath, pathEntry);
+ Set<IPathEntry> set = pathEntriesMap.get(resolvedPathEntry.getEntryKind());
+ if (set != null) {
+ set.add(resolvedPathEntry);
+ }
+ }
+ }
+
+ private ICLanguageSettingEntry toLanguageSettingsEntry(IPathEntry pathEntry) {
+ switch (pathEntry.getEntryKind()) {
+ case IPathEntry.CDT_INCLUDE:
+ IIncludeEntry includeEntry = (IIncludeEntry)pathEntry;
+ return CDataUtil.createCIncludePathEntry(includeEntry.getFullIncludePath().toOSString(), includeEntry.isSystemInclude() ? 0 : ICSettingEntry.LOCAL);
+ case IPathEntry.CDT_MACRO:
+ IMacroEntry macroEntry = (IMacroEntry) pathEntry;
+ return CDataUtil.createCMacroEntry(macroEntry.getMacroName(), macroEntry.getMacroValue(), 0);
+ case IPathEntry.CDT_INCLUDE_FILE:
+ IIncludeFileEntry includeFileEntry = (IIncludeFileEntry) pathEntry;
+ return CDataUtil.createCIncludeFileEntry(includeFileEntry.getFullIncludeFilePath().toOSString(), 0);
+ case IPathEntry.CDT_MACRO_FILE:
+ IMacroFileEntry macroFileEntry = (IMacroFileEntry) pathEntry;
+ return CDataUtil.createCMacroFileEntry(macroFileEntry.getFullMacroFilePath().toOSString(), 0);
+ case IPathEntry.CDT_LIBRARY:
+ ILibraryEntry libraryEntry = (ILibraryEntry) pathEntry;
+ return CDataUtil.createCLibraryFileEntry(libraryEntry.getFullLibraryPath().toOSString(), 0);
+ }
+ return null;
+ }
+}
diff --git a/core/org.eclipse.cdt.core/plugin.properties b/core/org.eclipse.cdt.core/plugin.properties index 46e1547c2f1..349a3ff95c1 100644 --- a/core/org.eclipse.cdt.core/plugin.properties +++ b/core/org.eclipse.cdt.core/plugin.properties @@ -134,3 +134,4 @@ efsExtensionProvider.name = EFSExtensionProvider refreshExclusionFactory.name = Refresh Exclusion Factory uncPathConverter.name = UNC Path Converter ScannerInfoExtensionLanguageSettingsProvider.name=Contributed ScannerInfo Entries +PathEntryScannerInfoLanguageSettingsProvider.name=Contributed PathEntry Containers diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index 018a7e65fc1..80cc2d01a53 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -789,6 +789,11 @@ id="org.eclipse.cdt.core.LegacyScannerInfoLanguageSettingsProvider" name="%ScannerInfoExtensionLanguageSettingsProvider.name"> </provider> + <provider + class="org.eclipse.cdt.internal.core.language.settings.providers.PathEntryScannerInfoLanguageSettingsProvider" + id="org.eclipse.cdt.core.PathEntryScannerInfoLanguageSettingsProvider" + name="%PathEntryScannerInfoLanguageSettingsProvider.name"> + </provider> </extension> </plugin> |