@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;
    }
Exemple #2
0
  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);
 }
Exemple #6
0
  /**
   * 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;
  }