From 100e69cd8b107367d09753b71ebffcb9fdd9f95c Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Thu, 29 Mar 2007 17:29:41 +0000 Subject: [PATCH] Additional fixes to the scanner discovery and Path Entry calculation mechanisms --- .../CfgDiscoveredPathManager.java | 16 ++- .../PerFileSettingsCalculator.java | 41 ++++++- .../internal/core/ResourceInfo.java | 5 +- .../index/tests/IndexProviderManagerTest.java | 2 +- .../org/eclipse/cdt/core/model/CoreModel.java | 2 +- .../model/ICConfigurationDescription.java | 2 +- .../extension/impl/CDefaultFileData.java | 3 +- .../extension/impl/CDefaultFolderData.java | 4 +- .../model/CConfigurationDescription.java | 10 +- .../model/CConfigurationDescriptionCache.java | 5 +- .../model/CProjectDescriptionManager.java | 6 +- .../model/ConfigBasedPathEntryContainer.java | 6 + .../model/ConfigBasedPathEntryStore.java | 108 +++++++++++------- .../viewsupport/ProblemsLabelDecorator.java | 2 +- 14 files changed, 144 insertions(+), 68 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/CfgDiscoveredPathManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/CfgDiscoveredPathManager.java index 89d52169080..67c1b2d1417 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/CfgDiscoveredPathManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/CfgDiscoveredPathManager.java @@ -206,7 +206,7 @@ public class CfgDiscoveredPathManager implements IResourceChangeListener { IRcSettingInfo[] rcInfos = calculator.getSettingInfos(cInfo.fLoadContext.getConfiguration().getOwner().getProject(), data, info, true); CResourceData rcDatas[] = data.getResourceDatas(); - Map rcDataMap = new HashMap(rcDatas.length); + Map rcDataMap = new HashMap(); CResourceData rcData; for(int i = 0; i < rcDatas.length; i++){ rcData = rcDatas[i]; @@ -214,15 +214,25 @@ public class CfgDiscoveredPathManager implements IResourceChangeListener { } IRcSettingInfo rcInfo; - + IPath path; + boolean rootSettingFound = false; + boolean fileSettingFound = false; for(int i = 0; i < rcInfos.length; i++){ rcInfo = rcInfos[i]; rcData = rcInfo.getResourceData(); + path = rcData.getPath(); + if(path.segmentCount() != 0) + fileSettingFound = true; + else + rootSettingFound = true; - rcDataMap.remove(rcData.getPath()); + rcDataMap.remove(path); cache(cInfo, rcInfo); } + if(rootSettingFound && fileSettingFound) + data.getRootFolderData().setExcluded(true); + if(!rcDataMap.isEmpty()){ CResourceData tmpRcData; for(Iterator iter = rcDataMap.values().iterator(); iter.hasNext();){ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/PerFileSettingsCalculator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/PerFileSettingsCalculator.java index 2eb5da1ccbd..70646f5f8a4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/PerFileSettingsCalculator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/build/internal/core/scannerconfig/PerFileSettingsCalculator.java @@ -18,6 +18,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICSettingBase; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.settings.model.extension.CFileData; @@ -675,8 +676,46 @@ public class PerFileSettingsCalculator { if(pInfo.isEmpty()) continue; - if(projRelPath.segmentCount() == 0) + if(projRelPath.segmentCount() == 0){ + CFolderData rootData = (CFolderData)rcSet.fRcData; + CLanguageData lDatas[] = rootData.getLanguageDatas(); + IPath[] incPaths = pInfo.getIncludePaths(); + IPath[] quotedIncPaths = pInfo.getQuoteIncludePaths(); + IPath[] incFiles = pInfo.getIncludeFiles(); + IPath[] macroFiles = pInfo.getMacroFiles(); + Map symbolMap = pInfo.getSymbols(); + int kinds = 0; + + if(incPaths.length != 0 || quotedIncPaths.length != 0) + kinds |= ICLanguageSettingEntry.INCLUDE_PATH; + if(incFiles.length != 0) + kinds |= ICLanguageSettingEntry.INCLUDE_FILE; + if(macroFiles.length != 0) + kinds |= ICLanguageSettingEntry.MACRO_FILE; + if(symbolMap.size() != 0) + kinds |= ICLanguageSettingEntry.MACRO; + + rcInfo = null; + for(int k = 0; k < lDatas.length; k++){ + lData = lDatas[k]; + if((lData.getSupportedEntryKinds() & kinds) == 0) + continue; + + if(rcInfo == null){ + rcInfo = new RcSettingInfo(rootData); + tmpList = new ArrayList(lDatas.length - k); + rcInfo.fLangInfoList = tmpList; + } + + lInfo = new LangSettingInfo(lData, pInfo); + rcInfo.add(lInfo); + } + + if(rcInfo != null) + list.add(rcInfo); + continue; + } // switch(rc.getType()){ // case IResource.FILE: // projRelPath = rc.getProjectRelativePath(); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceInfo.java index 23b08ad619a..f99c27a51e2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceInfo.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ResourceInfo.java @@ -251,9 +251,8 @@ public abstract class ResourceInfo extends BuildObject implements IResourceInfo } private boolean internalSetExclude(boolean excluded){ - if(excluded && isRoot()) - return isExcluded; - +// if(excluded/* && isRoot()*/) +// return isExcluded; return isExcluded = excluded; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java index 6af6174c4aa..368b7cb17e5 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexProviderManagerTest.java @@ -446,7 +446,7 @@ class MockConfig implements ICConfigurationDescription { public void removeStorage(String id) throws CoreException { } - public ICLanguageSetting getLanguageSettingForFile(IPath path) { + public ICLanguageSetting getLanguageSettingForFile(IPath path, boolean ignoreExludeStatus) { return null; } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index bff4a0ced66..f8472c196e5 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -1239,7 +1239,7 @@ public class CoreModel { if(!mngr.isNewStyleCfg(indexCfg)){ return oldIsScannerInformationEmpty(resource); } - ICLanguageSetting lSetting = indexCfg.getLanguageSettingForFile(resource.getProjectRelativePath()); + ICLanguageSetting lSetting = indexCfg.getLanguageSettingForFile(resource.getProjectRelativePath(), false); if(lSetting != null){ ICLanguageSettingEntry[] entries = lSetting.getSettingEntries(ICLanguageSettingEntry.INCLUDE_PATH); if(entries.length != 0) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java index ca6338e9ce1..546dffa94ca 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/ICConfigurationDescription.java @@ -360,5 +360,5 @@ public interface ICConfigurationDescription extends ICSettingContainer, ICSettin * @param path - file project relative path * @return ICLanguageSetting or null if not found */ - ICLanguageSetting getLanguageSettingForFile(IPath path); + ICLanguageSetting getLanguageSettingForFile(IPath path, boolean ignoreExludeStatus); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFileData.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFileData.java index 12f775dd077..13633eb4fc1 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFileData.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFileData.java @@ -53,10 +53,11 @@ public class CDefaultFileData extends CFileData { } protected void copyDataFrom(CFileData base, boolean clone){ - fIsExcluded = base.isExcluded(); CLanguageData baseLanguageData = base.getLanguageData(); if(baseLanguageData != null) fLanguageData = copyLanguageData(baseLanguageData, clone); + + fIsExcluded = base.isExcluded(); } protected void copyDataFrom(CFolderData base, CLanguageData baseLanguageData){ diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFolderData.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFolderData.java index fb4413fa6dc..e2122ffb446 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFolderData.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/extension/impl/CDefaultFolderData.java @@ -51,12 +51,12 @@ public class CDefaultFolderData extends CFolderData { protected void copyDataFrom(CFolderData base, boolean clone){ if(base != null){ - fIsExcluded = base.isExcluded(); - CLanguageData lDatas[] = base.getLanguageDatas(); for(int i = 0; i < lDatas.length; i++){ fLanguageDatas.add(copyLanguageData(lDatas[i], clone)); } + + fIsExcluded = base.isExcluded(); } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java index 523512203ea..f676b5caff8 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescription.java @@ -476,7 +476,7 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC IPath entryPath; IPath paths[]; PathSettingsContainer cr = PathSettingsContainer.createRootContainer(); - cr.setValue(Boolean.TRUE); + cr.setValue(Boolean.valueOf(getRootFolderDescription().isExcluded())); Set srcPathSet = new HashSet(); IProject project = fIsPreference ? null : getProjectDescription().getProject(); IPath projPath = project != null ? project.getFullPath() : null; @@ -542,9 +542,9 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC if(rcDes.isExcluded()) rcDes.setExcluded(false); } else { - if((rcDes.getType() == ICSettingBase.SETTING_FILE + if(/*(rcDes.getType() == ICSettingBase.SETTING_FILE || !((ICFolderDescription)rcDes).isRoot()) - && !rcDes.isExcluded()) + &&*/ !rcDes.isExcluded()) rcDes.setExcluded(true); } } @@ -729,7 +729,7 @@ public class CConfigurationDescription extends CDataProxyContainer implements IC return data.isInitializing(); } - public ICLanguageSetting getLanguageSettingForFile(IPath path) { - return CProjectDescriptionManager.getLanguageSettingForFile(this, path); + public ICLanguageSetting getLanguageSettingForFile(IPath path, boolean ignoreExcludeStatus) { + return CProjectDescriptionManager.getLanguageSettingForFile(this, path, ignoreExcludeStatus); } } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java index 854d775749f..f5c1b986a6a 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationDescriptionCache.java @@ -47,7 +47,6 @@ import org.eclipse.cdt.internal.core.cdtvariables.CdtVariableManager; import org.eclipse.cdt.internal.core.cdtvariables.StorableCdtVariables; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.QualifiedName; public class CConfigurationDescriptionCache extends CDefaultConfigurationData @@ -442,8 +441,8 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData fInitializing = false; } - public ICLanguageSetting getLanguageSettingForFile(IPath path) { - return CProjectDescriptionManager.getLanguageSettingForFile(this, path); + public ICLanguageSetting getLanguageSettingForFile(IPath path, boolean ignoreExcludeStatus) { + return CProjectDescriptionManager.getLanguageSettingForFile(this, path, ignoreExcludeStatus); } protected CResourceData[] filterRcDatasToCopy(CConfigurationData base) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java index 4d849212e4c..bb41ff7be52 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java @@ -71,7 +71,6 @@ import org.eclipse.cdt.core.settings.model.extension.impl.CDataFacroty; import org.eclipse.cdt.core.settings.model.extension.impl.CDefaultConfigurationData; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.core.settings.model.util.CSettingEntryFactory; -import org.eclipse.cdt.core.settings.model.util.IPathSettingsContainerVisitor; import org.eclipse.cdt.core.settings.model.util.KindBasedStore; import org.eclipse.cdt.core.settings.model.util.ListComparator; import org.eclipse.cdt.core.settings.model.util.PathSettingsContainer; @@ -3150,12 +3149,15 @@ public class CProjectDescriptionManager { map.remove(project); } - static ICLanguageSetting getLanguageSettingForFile(ICConfigurationDescription cfgDes, IPath path){ + static ICLanguageSetting getLanguageSettingForFile(ICConfigurationDescription cfgDes, IPath path, boolean ignoreExcludeStatus){ int segCount = path.segmentCount(); if(segCount == 0) return null; ICResourceDescription rcDes = cfgDes.getResourceDescription(path, false); + if(!ignoreExcludeStatus && rcDes.isExcluded()) + return null; + if(rcDes.getType() == ICSettingBase.SETTING_FOLDER){ return ((ICFolderDescription)rcDes).getLanguageSettingForFile(path.lastSegment()); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryContainer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryContainer.java index f42c068bafb..abc613c016e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryContainer.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryContainer.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.settings.model; +import java.util.List; + import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IPathEntryContainer; import org.eclipse.core.runtime.IPath; @@ -19,6 +21,10 @@ public class ConfigBasedPathEntryContainer implements IPathEntryContainer { public static final IPath CONTAINER_PATH = new Path("org.eclipse.cdt.core.CFG_BASED_CONTAINER"); //$NON-NLS-1$ private IPathEntry[] fEntries; + public ConfigBasedPathEntryContainer(List list){ + this.fEntries = (IPathEntry[])list.toArray(new IPathEntry[list.size()]); + } + public ConfigBasedPathEntryContainer(IPathEntry entries[]){ this.fEntries = (IPathEntry[])entries.clone(); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryStore.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryStore.java index 446709e4260..917240845b5 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryStore.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/ConfigBasedPathEntryStore.java @@ -100,9 +100,10 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc public IPathEntry[] getRawPathEntries() throws CoreException { ICConfigurationDescription cfg = getIndexCfg(fProject); - PathEntryCollector cr = getCollector(fProject, cfg); - if(cr != null){ - List list = cr.getEntries(null, PathEntryTranslator.INCLUDE_USER, cfg); + List[] es = getEntries(fProject, cfg); + if(es != null){ + List list = new ArrayList(es[0].size() + 1); + list.addAll(es[0]); list.add(CoreModel.newContainerEntry(ConfigBasedPathEntryContainer.CONTAINER_PATH)); return (IPathEntry[])list.toArray(new IPathEntry[list.size()]); } @@ -111,14 +112,14 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc public void setRawPathEntries(IPathEntry[] entries) throws CoreException { ICConfigurationDescription cfg = getIndexCfg(fProject); - PathEntryCollector cr = getCollector(fProject, cfg); - if(cr != null){ - List sysList = cr.getEntries(null, PathEntryTranslator.INCLUDE_BUILT_INS, cfg); - List usrList = new ArrayList(entries.length); - for(int i = 0; i < entries.length; i++){ - if(entries[i].getEntryKind() != IPathEntry.CDT_CONTAINER) - usrList.add(entries[i]); - } + List es[] = getEntries(fProject, cfg); + if(es != null){ + List sysList = es[1]; + List usrList = es[0]; +// for(int i = 0; i < entries.length; i++){ +// if(entries[i].getEntryKind() != IPathEntry.CDT_CONTAINER) +// usrList.add(entries[i]); +// } CProjectDescription des = (CProjectDescription)CoreModel.getDefault().getProjectDescription(fProject, true); ICConfigurationDescription cfgDes = des.getIndexConfiguration(); @@ -142,6 +143,13 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc CoreModel.getDefault().setProjectDescription(fProject, des); } } + + private static void clearCachedEntries(ICProjectDescription des){ + ICConfigurationDescription[] cfgDess = des.getConfigurations(); + for(int i = 0; i < cfgDess.length; i++){ + setCachedEntries(cfgDess[i], null); + } + } public void handleEvent(CProjectDescriptionEvent event) { IProject project = event.getProject(); @@ -152,25 +160,24 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc case CProjectDescriptionEvent.APPLIED:{ CProjectDescription des = (CProjectDescription)event.getNewCProjectDescription(); CProjectDescription oldDes = (CProjectDescription)event.getOldCProjectDescription(); - IPathEntry oldCrEntries[] = null; + List oldCrEntries = null; if(oldDes != null){ ICConfigurationDescription oldIndexCfg = oldDes.getIndexConfiguration(); - PathEntryCollector oldCr = getCachedCollector(oldIndexCfg); - if(oldCr != null) - oldCrEntries = oldCr.getEntries(PathEntryTranslator.INCLUDE_BUILT_INS, oldIndexCfg); + List[] oldEs = getCachedEntries(oldIndexCfg); + if(oldEs != null) + oldCrEntries = oldEs[1]; + + clearCachedEntries(oldDes); } if(des != null){ //TODO: smart delta handling - ICConfigurationDescription[] cfgDess = des.getConfigurations(); - for(int i = 0; i < cfgDess.length; i++){ - setCachedCollector(cfgDess[i], null); - } + clearCachedEntries(des); if(oldCrEntries != null){ ICConfigurationDescription newIndexCfg = des.getIndexConfiguration(); - PathEntryCollector newCr = getCollector(fProject, newIndexCfg); - IPathEntry[] newCrEntries = newCr.getEntries(PathEntryTranslator.INCLUDE_BUILT_INS, newIndexCfg); - if(!Arrays.equals(oldCrEntries, newCrEntries)){ + List[] newEs = getEntries(fProject, newIndexCfg); + List newCrEntries = newEs[1]; + if(!Arrays.equals(oldCrEntries.toArray(), newCrEntries.toArray())){ CModelManager manager = CModelManager.getDefault(); ICProject cproject = manager.create(project); @@ -203,24 +210,37 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc // return null; // } - private static PathEntryCollector getCollector(IProject project, ICConfigurationDescription cfgDes){ + private static List[] getEntries(IProject project, ICConfigurationDescription cfgDes){ if(cfgDes != null){ - PathEntryCollector cr = getCachedCollector(cfgDes); - if(cr == null){ - cr = PathEntryTranslator.collectEntries(project, cfgDes); - setCachedCollector(cfgDes, cr); + List[] es = getCachedEntries(cfgDes); + if(es == null){ + PathEntryCollector cr = PathEntryTranslator.collectEntries(project, cfgDes); + es = createEntriesList(cfgDes, cr); + setCachedEntries(cfgDes, es); } - return cr; + return es; } return null; } - - private static PathEntryCollector getCachedCollector(ICConfigurationDescription cfgDes){ - return (PathEntryCollector)cfgDes.getSessionProperty(PATH_ENTRY_COLLECTOR_PROPERTY_NAME); + + private static List[] createEntriesList(ICConfigurationDescription cfgDes, PathEntryCollector cr){ + ArrayList[] es = new ArrayList[2]; + es[0] = new ArrayList(); + cr.getEntries(es[0], PathEntryTranslator.INCLUDE_USER, cfgDes); + es[0].trimToSize(); + es[1] = new ArrayList(); + cr.getEntries(es[1], PathEntryTranslator.INCLUDE_BUILT_INS, cfgDes); + es[1].trimToSize(); + + return es; } - private static void setCachedCollector(ICConfigurationDescription cfgDes, PathEntryCollector cr){ - cfgDes.setSessionProperty(PATH_ENTRY_COLLECTOR_PROPERTY_NAME, cr); + private static List[] getCachedEntries(ICConfigurationDescription cfgDes){ + return (List[])cfgDes.getSessionProperty(PATH_ENTRY_COLLECTOR_PROPERTY_NAME); + } + + private static void setCachedEntries(ICConfigurationDescription cfgDes, List[] es){ + cfgDes.setSessionProperty(PATH_ENTRY_COLLECTOR_PROPERTY_NAME, es); } // public static PathEntryCollector getCollector(IProject project){ @@ -235,28 +255,28 @@ public class ConfigBasedPathEntryStore implements IPathEntryStore, ICProjectDesc return des.getIndexConfiguration(); } - public static IPathEntry[] getContainerEntries(IProject project){ + private static List getContainerEntries(IProject project){ ICProjectDescription des = CCorePlugin.getDefault().getProjectDescription(project, false); if(des != null) return getContainerEntries(des); - return new IPathEntry[0]; + return new ArrayList(0); } - public static IPathEntry[] getContainerEntries(ICProjectDescription des){ + private static List getContainerEntries(ICProjectDescription des){ ICConfigurationDescription cfg = ((CProjectDescription)des).getIndexConfiguration(); - PathEntryCollector cr = getCollector(des.getProject(), cfg); - if(cr != null) - return cr.getEntries(PathEntryTranslator.INCLUDE_BUILT_INS, cfg); - return new IPathEntry[0]; + List es[] = getEntries(des.getProject(), cfg); + if(es != null) + return es[1]; + return new ArrayList(0); } public static ConfigBasedPathEntryContainer createContainer(IProject project){ - IPathEntry[] entries = getContainerEntries(project); - return new ConfigBasedPathEntryContainer(entries); + List list = getContainerEntries(project); + return new ConfigBasedPathEntryContainer(list); } public static ConfigBasedPathEntryContainer createContainer(ICProjectDescription des){ - IPathEntry[] entries = getContainerEntries(des); - return new ConfigBasedPathEntryContainer(entries); + List list = getContainerEntries(des); + return new ConfigBasedPathEntryContainer(list); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java index 5ae3b4e6a81..4aa94a40b6b 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/ProblemsLabelDecorator.java @@ -388,7 +388,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe if (cf[i].isActive()) { ICResourceDescription out = cf[i].getResourceDescription(path, true); if (out != null) result |= TICK_CONFIGURATION; - out = cf[i].getResourceDescription(path, false); +// out = cf[i].getResourceDescription(path, false); if (out != null && out.isExcluded()) result |= TICK_EXCLUDE; } }