# Interface IMenuService

All Superinterfaces:
  `IDisposable, IServiceWithSources`

public interface IMenuService extends IServiceWithSources

Provides services related to the menu architecture within the workbench. It can be used to contribute additional items to the menu, tool bar and status line.

This service can be acquired from your service locator:

    IMenuService service = (IMenuService) getSite().getService(IMenuService.class);

- This service is available globally.

Since:
  3.3
Restriction:
  This interface is not intended to be implemented by clients.
Restriction:
  This interface is not intended to be extended by clients.

## Method Summary

Modifier and Type
Method
Description
`void`
`addContributionFactory(AbstractContributionFactory factory)`
Contribute and initialize the contribution factory.
`IEvaluationContext`
`getCurrentState()`
Get the current state of eclipse as seen by the menu service.
`void`
`populateContributionManager(ContributionManager mgr, String location)`
Populate a `ContributionManager` at the specified starting location with a set of `IContributionItems`s.
`void`
`releaseContributions(ContributionManager mgr)`
Before calling dispose() on a ContributionManager populated by the menu service, you must inform the menu service to release its contributions.
`void`
`removeContributionFactory(AbstractContributionFactory factory)`
Remove the contributed factory from the menu service.

### Methods inherited from interface IDisposable

`dispose`

### Methods inherited from interface IServiceWithSources

`addSourceProvider, removeSourceProvider`

## Method Details

### addContributionFactory

void addContributionFactory(AbstractContributionFactory factory)
Contribute and initialize the contribution factory. This should only be called once per factory. After the call, the factory should be treated as an unmodifiable object.

Note: factories should be removed when no longer necessary. If not, they will be removed when the IServiceLocator used to acquire this service is disposed.

Parameters:
  `factory` - the contribution factory. Must not be `null`
See Also:
  - `removeContributionFactory(AbstractContributionFactory)`

### removeContributionFactory

void removeContributionFactory(AbstractContributionFactory factory)
Remove the contributed factory from the menu service. If the factory is not contained by this service, this call does nothing.

Parameters:
  `factory` - the contribution factory to remove. Must not be `null`.

### populateContributionManager

void populateContributionManager(ContributionManager mgr, String location)
Populate a `ContributionManager` at the specified starting location with a set of `IContributionItems`s. It applies `AbstractContributionFactory`s that are stored against the provided location.

Parameters:
  `mgr` - The ContributionManager to populate
  `location` - The starting location to begin populating this contribution manager. The format is the Menu API URI format.
See Also:
  - `releaseContributions(ContributionManager)`

### releaseContributions

void releaseContributions(ContributionManager mgr)
Before calling dispose() on a ContributionManager populated by the menu service, you must inform the menu service to release its contributions. This takes care of unregistering any IContributionItems that have their visibleWhen clause managed by this menu service.

This will not update the ContributionManager (and any widgets). It will simply remove all menu service references to the contents of this ContributionManager.

Parameters:
  `mgr` - The manager that was populated by a call to `populateContributionManager(ContributionManager, String)`

### getCurrentState

IEvaluationContext getCurrentState()
Get the current state of eclipse as seen by the menu service.

Returns:
  an IEvaluationContext containing state variables.
See Also:
  - `ISources`
  - `IEvaluationService`