1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Fix for [Bug 178828] ScannerInfoProviderProxy returns empty scanner info for project

This commit is contained in:
Mikhail Sennikovsky 2007-03-22 17:16:35 +00:00
parent e421f95030
commit a737073765

View file

@ -10,8 +10,11 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.internal.core.settings.model; package org.eclipse.cdt.internal.core.settings.model;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map; import java.util.Map;
import org.eclipse.cdt.core.parser.ExtendedScannerInfo; import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
@ -71,31 +74,36 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
if(fCfgDes == null) if(fCfgDes == null)
return INEXISTENT_SCANNER_INFO; return INEXISTENT_SCANNER_INFO;
IPath rcPath = resource.getProjectRelativePath();
ICResourceDescription rcDes = fCfgDes.getResourceDescription(rcPath, false);
ICLanguageSetting setting = null; ICLanguageSetting setting = null;
if(rcDes.getType() == ICSettingBase.SETTING_FILE){ if(resource.getType() != IResource.PROJECT){
setting = ((ICFileDescription)rcDes).getLanguageSetting(); IPath rcPath = resource.getProjectRelativePath();
} else { ICResourceDescription rcDes = fCfgDes.getResourceDescription(rcPath, false);
if(resource.getType() == IResource.FILE)
setting = ((ICFolderDescription)rcDes).getLanguageSettingForFile(rcPath.lastSegment()); if(rcDes.getType() == ICSettingBase.SETTING_FILE){
else { setting = ((ICFileDescription)rcDes).getLanguageSetting();
ICLanguageSetting settings[] = ((ICFolderDescription)rcDes).getLanguageSettings(); } else {
if(settings.length > 0) if(resource.getType() == IResource.FILE)
setting = settings[0]; setting = ((ICFolderDescription)rcDes).getLanguageSettingForFile(rcPath.lastSegment());
else {
ICLanguageSetting settings[] = ((ICFolderDescription)rcDes).getLanguageSettings();
if(settings.length > 0){
setting = settings[0];
}
}
} }
} }
return getScannerInfo(setting); return getScannerInfo(setting);
} }
private IScannerInfo getScannerInfo(ICLanguageSetting ls){ private IScannerInfo getScannerInfo(ICLanguageSetting ls){
if(ls == null) Object mapKey = ls != null ? ls.getId() : null;
return INEXISTENT_SCANNER_INFO; // if(ls == null)
// return INEXISTENT_SCANNER_INFO;
IScannerInfo info = (IScannerInfo)fIdToLanguageSettingsMap.get(ls.getId()); IScannerInfo info = (IScannerInfo)fIdToLanguageSettingsMap.get(mapKey);
if(info == null){ if(info == null){
info = createScannerInfo(ls); info = createScannerInfo(ls);
fIdToLanguageSettingsMap.put(ls.getId(), info); fIdToLanguageSettingsMap.put(mapKey, info);
} }
return info; return info;
} }
@ -116,7 +124,51 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
return macroEntries; return macroEntries;
} }
private IScannerInfo createProjectStannerInfo(){
ICFolderDescription foDes = fCfgDes.getRootFolderDescription();
ICLanguageSetting[] lSettings = foDes.getLanguageSettings();
ICLanguageSettingPathEntry pathEntries[] = getPathEntries(lSettings, ICLanguageSettingEntry.INCLUDE_PATH);
String incs[] = getValues(pathEntries);
pathEntries = getPathEntries(lSettings, ICLanguageSettingEntry.INCLUDE_FILE);
String incFiles[] = getValues(pathEntries);
pathEntries = getPathEntries(lSettings, ICLanguageSettingEntry.MACRO_FILE);
String macroFiles[] = getValues(pathEntries);
ICMacroEntry macroEntries[] = getMacroEntries(lSettings);
Map macrosMap = getValues(macroEntries);
return new ExtendedScannerInfo(macrosMap, incs, macroFiles, incFiles);
}
private ICMacroEntry[] getMacroEntries(ICLanguageSetting[] settings){
LinkedHashSet set = getEntriesSet(ICLanguageSettingEntry.MACRO, settings);
return (ICMacroEntry[])set.toArray(new ICMacroEntry[set.size()]);
}
private ICLanguageSettingPathEntry[] getPathEntries(ICLanguageSetting[] settings, int kind){
LinkedHashSet set = getEntriesSet(kind, settings);
return (ICLanguageSettingPathEntry[])set.toArray(new ICLanguageSettingPathEntry[set.size()]);
}
private LinkedHashSet getEntriesSet(int kind, ICLanguageSetting[] settings){
LinkedHashSet set = new LinkedHashSet();
ICLanguageSettingEntry[] langEntries;
for(int i = 0; i < settings.length; i++){
langEntries = settings[i].getResolvedSettingEntries(kind);
if(langEntries.length != 0){
set.addAll(Arrays.asList(langEntries));
}
}
return set;
}
private IScannerInfo createScannerInfo(ICLanguageSetting ls){ private IScannerInfo createScannerInfo(ICLanguageSetting ls){
if(ls == null)
return createProjectStannerInfo();
ICLanguageSettingPathEntry pathEntries[] = getPathEntries(ls, ICLanguageSettingEntry.INCLUDE_PATH); ICLanguageSettingPathEntry pathEntries[] = getPathEntries(ls, ICLanguageSettingEntry.INCLUDE_PATH);
String incs[] = getValues(pathEntries); String incs[] = getValues(pathEntries);