/** * Convert the current CConfigurationDescriptions to cached versions This occurs during the * SetCProjectDescription Operation */ void switchToCachedConfigurationDescriptions() throws CoreException { for (Map.Entry<String, ICConfigurationDescription> e : fCfgMap.entrySet()) { if (e.getValue() instanceof CConfigurationDescription) { CConfigurationDescription cfgDes = (CConfigurationDescription) e.getValue(); CConfigurationData baseData = ((IInternalCCfgInfo) cfgDes).getConfigurationData(false); CConfigurationDescriptionCache baseCache = null; if (baseData instanceof CConfigurationDescriptionCache) { baseCache = (CConfigurationDescriptionCache) baseData; baseData = baseCache.getConfigurationData(); } CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache( cfgDes, baseData, baseCache, cfgDes.getSpecSettings(), this, null); e.setValue(cache); } } }
/** * 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; }