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 Sergey,
The way you create the project does not use metadata from your org.eclipse.cdt.managedbuilder.core.buildDefinitions extension. If you look at how standard CDT New Project Wizard does it, it is more involved, see STDWizardHandler.setProjectDescription(...).

Caroline has already mentioned that you need to assign providers to your configuration before calling Manager.setProjectDescription(project, projectDescription);. From your description it is unclear if you do that.

Another issue is that you should obtain provider with call LanguageSettingsManager.getExtensionProviderCopy(id, true) rather than invoke constructor directly to avoid discrepancies.


Thanks,
Andrew



On Thu, Jun 20, 2013 at 12:13 AM, Sergey Prigogin <eclipse.sprigogin@xxxxxxxxx> wrote:
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

_______________________________________________
cdt-dev mailing list
cdt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/cdt-dev



Back to the top