@Override public CExternalSetting[] getExternalSettings() { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(fProjName); if (project.isAccessible()) { ICProjectDescription des = CProjectDescriptionManager.getInstance().getProjectDescription(project, false); if (des != null) { ICConfigurationDescription cfg = fCfgId.length() != 0 ? des.getConfigurationById(fCfgId) : des.getActiveConfiguration(); if (cfg != null) { CExternalSetting[] es; ICExternalSetting[] ies = cfg.getExternalSettings(); if (ies instanceof CExternalSetting[]) es = (CExternalSetting[]) ies; else { es = new CExternalSetting[ies.length]; System.arraycopy(ies, 0, es, 0, es.length); } // Update the cache with the real settings this configuration is exporting cachedSettings.put(fId, es); return es; } } } // If project not yet accessible, just return the previous settings // for the moment. We'll update again when the referenced project reappears if (!cachedSettings.containsKey(fId) && prevSettings.length > 0) cachedSettings.putIfAbsent(fId, prevSettings); if (prevSettings.length == 0 && cachedSettings.containsKey(fId)) return cachedSettings.get(fId); return prevSettings; }
public CProjectDescription( IProject project, ICSettingsStorage storage, ICStorageElement element, boolean loading, boolean isCreating) throws CoreException { fProject = project; fStorage = storage; fRootStorageElement = element; fIsReadOnly = loading; fIsLoading = loading; fActiveCfgInfo = new CfgIdPair(ACTIVE_CFG_PROPERTY); fSettingCfgInfo = new CfgIdPair(SETTING_CFG_PROPERTY); fIsCreating = isCreating; ICStorageElement el = null; CProjectDescriptionManager mngr = CProjectDescriptionManager.getInstance(); if (loading) { Map<String, ICStorageElement> cfgStorMap = mngr.createCfgStorages(this); for (ICStorageElement sel : cfgStorMap.values()) { CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(sel, this); configurationCreated(cache); } el = getStorage(CProjectDescriptionManager.MODULE_ID, false); } fPrefs = new CProjectDescriptionPreferences( el, (CProjectDescriptionPreferences) mngr.getProjectDescriptionWorkspacePreferences(false), false); fPropertiesMap = Collections.synchronizedMap(new HashMap<QualifiedName, Object>()); }
public ICLanguageSetting getLanguageSettingForFile(String fileName) { IProject project = getConfiguration().getProjectDescription().getProject(); return CProjectDescriptionManager.getInstance() .findLanguagSettingForFile(fileName, project, getLanguageSettings()); }
@Override public void shutdown() { CProjectDescriptionManager.getInstance().removeCProjectDescriptionListener(this); }
@Override public void startup() { CProjectDescriptionManager.getInstance() .addCProjectDescriptionListener( this, CProjectDescriptionEvent.APPLIED | CProjectDescriptionEvent.LOADED); }
/** * Create a project description based on another project description * * @param base * @param saving * @param storage * @param el * @param isCreating */ public CProjectDescription( CProjectDescription base, boolean saving, ICSettingsStorage storage, ICStorageElement el, boolean isCreating) { fActiveCfgInfo = new CfgIdPair(base.fActiveCfgInfo); fSettingCfgInfo = new CfgIdPair(base.fSettingCfgInfo); fProject = base.fProject; fStorage = storage; fRootStorageElement = el; fIsReadOnly = saving; fIsLoading = base.fIsLoading; fIsApplying = saving || base.fIsApplying; fIsCreating = isCreating; fPrefs = new CProjectDescriptionPreferences( base.fPrefs, (CProjectDescriptionPreferences) CProjectDescriptionManager.getInstance() .getProjectDescriptionWorkspacePreferences(false), false); for (Iterator<ICConfigurationDescription> iter = base.fCfgMap.values().iterator(); iter.hasNext(); ) { try { IInternalCCfgInfo cfgDes = (IInternalCCfgInfo) iter.next(); if (fIsReadOnly) { CConfigurationData baseData = cfgDes.getConfigurationData(false); CConfigurationDescriptionCache baseCache = null; if (baseData instanceof CConfigurationDescriptionCache) { baseCache = (CConfigurationDescriptionCache) baseData; baseData = baseCache.getConfigurationData(); } CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache( (ICConfigurationDescription) cfgDes, baseData, baseCache, cfgDes.getSpecSettings(), this, null); configurationCreated(cache); } else { CConfigurationData baseData = cfgDes.getConfigurationData(false); CConfigurationDescription cfg = new CConfigurationDescription(baseData, this); configurationCreated(cfg); } } catch (CoreException e) { CCorePlugin.log(e); } } // Shallow cloning the base map Map<QualifiedName, Object> cloneMap = Collections.synchronizedMap(new HashMap<QualifiedName, Object>()); synchronized (base.fPropertiesMap) { cloneMap.putAll(base.fPropertiesMap); } fPropertiesMap = cloneMap; }