@Override
 public void handleEvent(CProjectDescriptionEvent event) {
   // we are only interested in about to apply
   if (event.getEventType() != CProjectDescriptionEvent.ABOUT_TO_APPLY) return;
   ICProjectDescription projDesc = event.getNewCProjectDescription();
   IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
   IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
   if (projDesc.getActiveConfiguration() != null) {
     IEnvironmentVariable var =
         contribEnv.getVariable(
             ArduinoConst.ENV_KEY_JANTJE_PLATFORM_FILE, projDesc.getActiveConfiguration());
     if (var != null) {
       IPath platformPath = new Path(var.getValue());
       ArduinoHelpers.setProjectPathVariables(
           projDesc.getProject(), platformPath.removeLastSegments(1));
       ArduinoHelpers.setTheEnvironmentVariables(
           projDesc.getProject(), projDesc.getActiveConfiguration(), false);
       try {
         ArduinoHelpers.addArduinoCodeToProject(
             projDesc.getProject(), projDesc.getActiveConfiguration());
       } catch (CoreException e1) {
         Common.log(
             new Status(
                 IStatus.ERROR, ArduinoConst.CORE_PLUGIN_ID, "Error adding the arduino code", e1));
       }
       ArduinoLibraries.reAttachLibrariesToProject(projDesc.getActiveConfiguration());
     }
   }
 }
  /**
   * Notify the ExternalSettingManager that there's been a change in the configuration which may
   * require referencing configs to update their cache of the external settings
   */
  public void handleEvent(CProjectDescriptionEvent event) {
    switch (event.getEventType()) {
      case CProjectDescriptionEvent.LOADED:
        {
          // Bug 312575 on Project load, event.getProjectDelta() == null => report all configs as
          // potentially changed
          // Referencing projects should be reconciled and potentially updated.
          String projName = event.getProject().getName();
          ICConfigurationDescription[] descs =
              event.getNewCProjectDescription().getConfigurations();
          CExternalSettingsContainerChangeInfo[] changeInfos =
              new CExternalSettingsContainerChangeInfo[descs.length + 1];
          int i = 0;
          for (ICConfigurationDescription desc :
              event.getNewCProjectDescription().getConfigurations())
            changeInfos[i++] =
                new CExternalSettingsContainerChangeInfo(
                    CExternalSettingsContainerChangeInfo.CONTAINER_CONTENTS,
                    new CContainerRef(FACTORY_ID, createId(projName, desc.getId())),
                    null);
          // Active configuration too
          changeInfos[i] =
              new CExternalSettingsContainerChangeInfo(
                  CExternalSettingsContainerChangeInfo.CONTAINER_CONTENTS,
                  new CContainerRef(FACTORY_ID, createId(projName, ACTIVE_CONFIG_ID)),
                  null);
          notifySettingsChange(null, null, changeInfos);
          break;
        }
      case CProjectDescriptionEvent.APPLIED:
        String[] ids = getContainerIds(event.getProjectDelta());
        if (ids.length != 0) {
          CExternalSettingsContainerChangeInfo[] changeInfos =
              new CExternalSettingsContainerChangeInfo[ids.length];

          for (int i = 0; i < changeInfos.length; i++) {
            changeInfos[i] =
                new CExternalSettingsContainerChangeInfo(
                    CExternalSettingsContainerChangeInfo.CONTAINER_CONTENTS,
                    new CContainerRef(FACTORY_ID, ids[i]),
                    null);
          }
          notifySettingsChange(null, null, changeInfos);
        }
    }
  }