1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +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;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
@ -71,9 +74,11 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
if(fCfgDes == null)
return INEXISTENT_SCANNER_INFO;
ICLanguageSetting setting = null;
if(resource.getType() != IResource.PROJECT){
IPath rcPath = resource.getProjectRelativePath();
ICResourceDescription rcDes = fCfgDes.getResourceDescription(rcPath, false);
ICLanguageSetting setting = null;
if(rcDes.getType() == ICSettingBase.SETTING_FILE){
setting = ((ICFileDescription)rcDes).getLanguageSetting();
} else {
@ -81,21 +86,24 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
setting = ((ICFolderDescription)rcDes).getLanguageSettingForFile(rcPath.lastSegment());
else {
ICLanguageSetting settings[] = ((ICFolderDescription)rcDes).getLanguageSettings();
if(settings.length > 0)
if(settings.length > 0){
setting = settings[0];
}
}
}
}
return getScannerInfo(setting);
}
private IScannerInfo getScannerInfo(ICLanguageSetting ls){
if(ls == null)
return INEXISTENT_SCANNER_INFO;
Object mapKey = ls != null ? ls.getId() : null;
// if(ls == null)
// return INEXISTENT_SCANNER_INFO;
IScannerInfo info = (IScannerInfo)fIdToLanguageSettingsMap.get(ls.getId());
IScannerInfo info = (IScannerInfo)fIdToLanguageSettingsMap.get(mapKey);
if(info == null){
info = createScannerInfo(ls);
fIdToLanguageSettingsMap.put(ls.getId(), info);
fIdToLanguageSettingsMap.put(mapKey, info);
}
return info;
}
@ -116,7 +124,51 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
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){
if(ls == null)
return createProjectStannerInfo();
ICLanguageSettingPathEntry pathEntries[] = getPathEntries(ls, ICLanguageSettingEntry.INCLUDE_PATH);
String incs[] = getValues(pathEntries);