Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Language settings provider question

Hi Andrew,

I'm having difficulties with getting CConfigurationDescription to recognize my provider.

In plugin.xml I have:

  <extension
        point="org.eclipse.cdt.core.LanguageSettingsProvider">
     <provider
           class="org.eclipse.cdt.core.language.settings.providers.LanguageSettingsGenericProvider"
           id="myLanguageSettingsProvider"
           name="My C/C++ Settings"
           prefer-non-shared="true">
        <language-scope id="org.eclipse.cdt.core.gcc"/>
        <language-scope id="org.eclipse.cdt.core.g++"/>
     </provider>
  </extension>
  <extension
        point="org.eclipse.cdt.managedbuilder.core.buildDefinitions">
     <projectType
           buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe"
           id="myProjectType"
           isAbstract="false"
           isTest="false"
           name="My C++ Project">
       <configuration
             buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe"
             id="myConfiguration"
             languageSettingProviders="myLanguageSettingsProvider"
             name="My Configuration">
          ...
       </configuration>
     </projectType>
  </extension>

I create the project using the following code sequence:

CCorePlugin cPlugin = CCorePlugin.getDefault();
ICProjectDescriptionManager Manager = cPlugin.getProjectDescriptionManager();

ICProjectDescription projectDescription = Manager.createProjectDescription(project, false);
ICConfigurationDescription baseConfiguration =
cPlugin.getPreferenceConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID);

ICConfigurationDescription configDescription =
    projectDescription.createConfiguration("myConfiguration", "My Configuration", baseConfiguration);
Manager.setProjectDescription(project, projectDescription);
cPlugin.createCDTProject(project.getDescription(), project, null);

At this point ((ILanguageSettingsProvidersKeeper) configDescription).getLanguageSettingProviders() returns two providers: [id=org.eclipse.cdt.ui.UserLanguageSettingsProvider, name=CDT User Setting Entries, id=org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider, name=CDT Managed Build Setting Entries]

My provider is not returned because LSPs are copied from baseConfiguration without looking at my configuration specification.

If I set the provider explicitly by

ILanguageSettingsProvider languageSettingProvider = new LanguageSettingsGenericProvider();
languageSettingProvider.configureProvider("myLanguageSettingsProvider", "My Provider",
    Collections.singletonList("org.eclipse.cdt.core.g++"), null, null);
((ILanguageSettingsProvidersKeeper) configDescription).setLanguageSettingProviders(
    Collections.<ILanguageSettingsProvider>singletonList(languageSettingProvider));

my provider gets returned by ((ILanguageSettingsProvidersKeeper) configDescription).getLanguageSettingProviders() but still appears unchecked in Preprocessor Include Paths, Macros, etc. > Providers and is called "My C/C++ Settings" rather than "My Provider".

What am I doing wrong?

-sergey

Back to the top