From df98c2f9cf2369a3edb6678a1aa36945cdf567e6 Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Fri, 30 Mar 2007 07:45:36 +0000 Subject: [PATCH] Minor updates to the DescriptionScannerInfoProvider logic --- .../org/eclipse/cdt/core/model/CoreModel.java | 2 - .../model/DescriptionScannerInfoProvider.java | 39 +++++++++++++++---- 2 files changed, 32 insertions(+), 9 deletions(-) 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 f8472c196e5..85f13c80015 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 @@ -20,8 +20,6 @@ import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSetting; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICProjectDescription; -import org.eclipse.cdt.core.settings.model.ICResourceDescription; -import org.eclipse.cdt.core.settings.model.ICSettingEntry; import org.eclipse.cdt.core.settings.model.WriteAccessException; import org.eclipse.cdt.internal.core.model.APathEntry; import org.eclipse.cdt.internal.core.model.BatchOperation; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java index d6d1369bf0c..d14e60b59a2 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java @@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.core.settings.model; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map; @@ -44,6 +43,8 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP private ICProjectDescription fProjDes; private ICConfigurationDescription fCfgDes; private Map fIdToLanguageSettingsMap = Collections.synchronizedMap(new HashMap()); + private String fCurrentFileDescriptionId; + private IScannerInfo fCurrentFileScannerInfo; private static final ScannerInfo INEXISTENT_SCANNER_INFO = new ScannerInfo(); private boolean fInited; @@ -61,6 +62,8 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP } fIdToLanguageSettingsMap.clear(); + fCurrentFileDescriptionId = null; + fCurrentFileScannerInfo = null; } public IProject getProject(){ @@ -75,9 +78,10 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP return INEXISTENT_SCANNER_INFO; ICLanguageSetting setting = null; + ICResourceDescription rcDes = null; if(resource.getType() != IResource.PROJECT){ IPath rcPath = resource.getProjectRelativePath(); - ICResourceDescription rcDes = fCfgDes.getResourceDescription(rcPath, false); + rcDes = fCfgDes.getResourceDescription(rcPath, false); if(rcDes.getType() == ICSettingBase.SETTING_FILE){ setting = ((ICFileDescription)rcDes).getLanguageSetting(); @@ -92,18 +96,39 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP } } } - return getScannerInfo(setting); + return getScannerInfo(rcDes, setting); } - private IScannerInfo getScannerInfo(ICLanguageSetting ls){ + private IScannerInfo getScannerInfo(ICResourceDescription rcDes, ICLanguageSetting ls){ Object mapKey = ls != null ? ls.getId() : null; // if(ls == null) // return INEXISTENT_SCANNER_INFO; - - IScannerInfo info = (IScannerInfo)fIdToLanguageSettingsMap.get(mapKey); + boolean useMap = rcDes == null || rcDes.getType() == ICSettingBase.SETTING_FOLDER; + + IScannerInfo info; + if(useMap) + info = (IScannerInfo)fIdToLanguageSettingsMap.get(mapKey); + else { + if(fCurrentFileScannerInfo != null){ + if(rcDes.getId().equals(fCurrentFileDescriptionId)) + info = fCurrentFileScannerInfo; + else { + info = null; + fCurrentFileScannerInfo = null; + fCurrentFileDescriptionId = null; + } + } else { + info = null; + } + } if(info == null){ info = createScannerInfo(ls); - fIdToLanguageSettingsMap.put(mapKey, info); + if(useMap) + fIdToLanguageSettingsMap.put(mapKey, info); + else { + fCurrentFileScannerInfo = info; + fCurrentFileDescriptionId = rcDes.getId(); + } } return info; }