Package it.baeyens.arduino.tools

Source Code of it.baeyens.arduino.tools.ShouldHaveBeenInCDT

package it.baeyens.arduino.tools;

import it.baeyens.arduino.ui.BuildConfigurationsPage.ConfigurationDescriptor;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvidersKeeper;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.core.language.settings.providers.ScannerDiscoveryLegacySupport;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
import org.eclipse.cdt.managedbuilder.internal.core.ToolChain;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

@SuppressWarnings("restriction")
// TOFIX Get this code in CDT so I should not have to do this
public class ShouldHaveBeenInCDT {
    /*
     * Copied from wizard STDWizardHandler package package org.eclipse.cdt.managedbuilder.ui.wizards;; This method creates the .cProject file in your
     * project.
     *
     * BK: modified this and made it work for multiple configs.
     */
    /**
     * This method creates the .cProject file in your project. it is intended to be used with newly created projects. Using this method with project
     * that have existed for some time is unknown
     *
     *
     * @param project
     *            The newly created project that needs a .cproject file.
     * @param alCfgs
     *            An array-list of configuration descriptors (names, toolchain IDs) to be used with this project
     * @param isManagedBuild
     *            When true the project is managed build. Else the project is not (read you have to maintain the makefiles yourself)
     * @param monitor
     *            The monitor to follow the process
     * @throws CoreException
     */
    public static void setCProjectDescription(IProject project, ArrayList<ConfigurationDescriptor> alCfgs, boolean isManagedBuild,
      IProgressMonitor monitor) throws CoreException {

  ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
  ICProjectDescription des = mngr.createProjectDescription(project, false, false);
  ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
  ManagedProject mProj = new ManagedProject(des);
  info.setManagedProject(mProj);
  monitor.worked(20);

  // String s = "it.baeyens.arduino.core.toolChain.release";
  // IToolChain tcs = ManagedBuildManager.getExtensionToolChain(s);
  //
  // Configuration cfg = new Configuration(mProj, (ToolChain) tcs, ManagedBuildManager.calculateChildId(s, null), "Release");
  // IBuilder bld = cfg.getEditableBuilder();
  // if (bld != null) {
  // if (bld.isInternalBuilder()) {
  // IConfiguration prefCfg = ManagedBuildManager.getPreferenceConfiguration(false);
  // IBuilder prefBuilder = prefCfg.getBuilder();
  // cfg.changeBuilder(prefBuilder, ManagedBuildManager.calculateChildId(cfg.getId(), null), prefBuilder.getName());
  // bld = cfg.getEditableBuilder();
  // bld.setBuildPath(null);
  // }
  // bld.setManagedBuildOn(isManagedBuild);
  // } else {
  // System.out.println("Messages.StdProjectTypeHandler_3");
  // }
  // cfg.setArtifactName(mProj.getDefaultArtifactName());
  // CConfigurationData data = cfg.getConfigurationData();
  // ICConfigurationDescription cfgDes = des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
  //
  // ConfigurationDataProvider.setDefaultLanguageSettingsProviders(project, cfg, cfgDes);

  // Iterate across the configurations
  for (int i = 0; i < alCfgs.size(); i++) {
      IToolChain tcs = ManagedBuildManager.getExtensionToolChain(alCfgs.get(i).ToolchainID);

      Configuration cfg = new Configuration(mProj, (ToolChain) tcs, ManagedBuildManager.calculateChildId(alCfgs.get(i).ToolchainID, null),
        alCfgs.get(i).Name);
      IBuilder bld = cfg.getEditableBuilder();
      if (bld != null) {
    // if (bld.isInternalBuilder()) {
    // IConfiguration prefCfg = ManagedBuildManager.getPreferenceConfiguration(false);
    // IBuilder prefBuilder = prefCfg.getBuilder();
    // String name = prefBuilder.getName();
    // cfg.changeBuilder(prefBuilder, ManagedBuildManager.calculateChildId(cfg.getId(), null), name);
    // bld = cfg.getEditableBuilder();
    // bld.setBuildPath(null);
    // }
    bld.setManagedBuildOn(isManagedBuild);
    cfg.setArtifactName("${ProjName}");
      } else {
    System.out.println("Messages.StdProjectTypeHandler_3");
      }
      CConfigurationData data = cfg.getConfigurationData();
      ICConfigurationDescription cfgDes = des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);

      setDefaultLanguageSettingsProviders(project, alCfgs.get(i), cfg, cfgDes);
  }
  monitor.worked(50);
  mngr.setProjectDescription(project, des);

    }

    private static void setDefaultLanguageSettingsProviders(IProject project, ConfigurationDescriptor cfgDes, IConfiguration cfg,
      ICConfigurationDescription cfgDescription) {
  // propagate the preference to project properties
  boolean isPreferenceEnabled = ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(null);
  ScannerDiscoveryLegacySupport.setLanguageSettingsProvidersFunctionalityEnabled(project, isPreferenceEnabled);

  if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
      ILanguageSettingsProvidersKeeper lspk = (ILanguageSettingsProvidersKeeper) cfgDescription;

      lspk.setDefaultLanguageSettingsProvidersIds(new String[] { cfgDes.ToolchainID });

      List<ILanguageSettingsProvider> providers = getDefaultLanguageSettingsProviders(cfg, cfgDescription);
      lspk.setLanguageSettingProviders(providers);
  }
    }

    private static List<ILanguageSettingsProvider> getDefaultLanguageSettingsProviders(IConfiguration cfg, ICConfigurationDescription cfgDescription) {
  List<ILanguageSettingsProvider> providers = new ArrayList<ILanguageSettingsProvider>();
  String[] ids = cfg != null ? cfg.getDefaultLanguageSettingsProviderIds() : null;

  if (ids == null) {
      // Try with legacy providers
      ids = ScannerDiscoveryLegacySupport.getDefaultProviderIdsLegacy(cfgDescription);
  }

  if (ids != null) {
      for (String id : ids) {
    ILanguageSettingsProvider provider = null;
    if (!LanguageSettingsManager.isPreferShared(id)) {
        provider = LanguageSettingsManager.getExtensionProviderCopy(id, false);
    }
    if (provider == null) {
        provider = LanguageSettingsManager.getWorkspaceProvider(id);
    }
    providers.add(provider);
      }
  }

  return providers;
    }

}
TOP

Related Classes of it.baeyens.arduino.tools.ShouldHaveBeenInCDT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.