diff options
Diffstat (limited to 'core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java')
-rw-r--r-- | core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index 8f93d73cbea..e395dea7fca 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -24,6 +24,9 @@ import java.util.HashSet; import java.util.MissingResourceException; import java.util.ResourceBundle; +import org.eclipse.cdt.core.build.ICBuildConfiguration; +import org.eclipse.cdt.core.build.ICBuildConfigurationManager; +import org.eclipse.cdt.core.build.IToolChainManager; import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager; import org.eclipse.cdt.core.cdtvariables.IUserVarSupplier; import org.eclipse.cdt.core.dom.IPDOMManager; @@ -50,6 +53,8 @@ import org.eclipse.cdt.internal.core.CDTLogWriter; import org.eclipse.cdt.internal.core.CdtVarPathEntryVariableManager; import org.eclipse.cdt.internal.core.ICConsole; import org.eclipse.cdt.internal.core.PositionTrackerManager; +import org.eclipse.cdt.internal.core.build.CBuildConfigurationManager; +import org.eclipse.cdt.internal.core.build.ToolChainManager; import org.eclipse.cdt.internal.core.cdtvariables.CdtVariableManager; import org.eclipse.cdt.internal.core.cdtvariables.UserVarSupplier; import org.eclipse.cdt.internal.core.dom.ast.tag.TagService; @@ -62,6 +67,7 @@ import org.eclipse.cdt.internal.core.resources.ResourceLookup; import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.cdt.internal.core.settings.model.ExceptionFactory; import org.eclipse.cdt.internal.errorparsers.ErrorParserExtensionManager; +import org.eclipse.core.resources.IBuildConfiguration; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; @@ -88,6 +94,7 @@ import org.eclipse.core.runtime.content.IContentType; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; import com.ibm.icu.text.MessageFormat; @@ -229,6 +236,8 @@ public class CCorePlugin extends Plugin { private ITagService tagService = new TagService(); private CdtVarPathEntryVariableManager fPathEntryVariableManager; + + private CBuildConfigurationManager buildConfigManager; private final class NullConsole implements IConsole { private ConsoleOutputStream nullStream = new ConsoleOutputStream() { @@ -348,6 +357,9 @@ public class CCorePlugin extends Plugin { fNewCProjectDescriptionManager.shutdown(); ResourceLookup.shutdown(); + + buildConfigManager.dispose(); + buildConfigManager = null; savePluginPreferences(); } finally { @@ -368,6 +380,12 @@ public class CCorePlugin extends Plugin { PositionTrackerManager.getInstance().install(); ResourceLookup.startup(); + ToolChainManager toolChainManager = new ToolChainManager(); + context.registerService(IToolChainManager.class, toolChainManager, null); + + buildConfigManager = new CBuildConfigurationManager(); + context.registerService(ICBuildConfigurationManager.class, buildConfigManager, null); + // new project model needs to register the resource listener first. CProjectDescriptionManager descManager = CProjectDescriptionManager.getInstance(); final Job post1 = descManager.startup(); @@ -1099,6 +1117,16 @@ public class CCorePlugin extends Plugin { // Next search the extension registry to see if a provider is // registered with a build command provider = getExtensionScannerInfoProvider2(project); + + // If we are new style build configurations, get the provider there + IBuildConfiguration activeConfig = project.getActiveBuildConfig(); + ICBuildConfiguration cconfig = buildConfigManager.getBuildConfiguration(activeConfig); + if (cconfig == null) { + cconfig = buildConfigManager.getDefaultBuildConfiguration(project); + } + if (cconfig != null) { + return cconfig; + } // Regular usage is where Language Settings Providers are employed if (provider == null && ScannerDiscoveryLegacySupport @@ -1572,4 +1600,17 @@ public class CCorePlugin extends Plugin { return InstanceScope.INSTANCE.getNode(PLUGIN_ID) .getBoolean(CCorePreferenceConstants.SHOW_SOURCE_ROOTS_AT_TOP_LEVEL_OF_PROJECT, true); } + + /** + * Return the given OSGi service. + * + * @param service service class + * @return service + * @since 6.0 + */ + public static <T> T getService(Class<T> service) { + BundleContext context = fgCPlugin.getBundle().getBundleContext(); + ServiceReference<T> ref = context.getServiceReference(service); + return ref != null ? context.getService(ref) : null; + } } |