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:
parent
e421f95030
commit
a737073765
1 changed files with 68 additions and 16 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue