diff options
Diffstat (limited to 'core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/PathEntryScannerInfoLanguageSettingsProvider.java')
-rw-r--r-- | core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/PathEntryScannerInfoLanguageSettingsProvider.java | 330 |
1 files changed, 165 insertions, 165 deletions
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 index ee3ae24a027..8e390c88644 100644 --- 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 @@ -1,165 +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;
- }
-}
+/******************************************************************************* + * 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; + } +} |