Package org.eclipse.core.resources

# Interface IResourceChangeListener

All Superinterfaces:
  `EventListener`

All Known Implementing Classes:
  `CloseResourceAction`, `CloseUnrelatedProjectsAction`, `FileDocumentProvider.FileSynchronizer`, `OpenResourceAction`, `SyncInfoCompareInput`, `WorkbenchContentProvider`

Functional Interface:
  This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public interface IResourceChangeListener extends EventListener
A resource change listener is notified of changes to resources in the workspace. These changes arise from direct manipulation of resources, or indirectly through re-synchronization with the local file system.

Clients may implement this interface.

There are two ways to register a listener:

1. One could direct registration with IWorkspace#addResourceChangeListener(IResourceChangeListener, int) users should note that they are responsible to remove the listener if no longer needed to prevent memory leaks.
2. One could register an OSGi Service making and it will automatically be picked up leveraging the Whiteboard Pattern. Services registered with an `PROPERTY_EVENT_MASK` property can be used to receive a sub-set of the events, by registering the value with the `IWorkspace.addResourceChangeListener(IResourceChangeListener, int)` method. This allows (for example) `IResourceChangeEvent.POST_CHANGE` events to be received by setting `event.mask=1` in the service registration.

For example the services can be registered with Declarative Services, which allows a bundle to not require that the Workspace bundle be started prior to accessing the resources, as until the IWorkspace is available the bundle will not need any callbacks. This will also save potential NPEs when the `IWorkspace` shuts down, because the OSGi runtime will handle the deregistration of services automatically:

    <?xml version="1.0" encoding="UTF-8"?>
    <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.4.0" immediate="true" name="ExampleResourceListener">
       <implementation class="org.example.ExampleResourceListener"/>
       <service>
          <provide interface="org.eclipse.core.resources.IResourceChangeListener"/>
       </service>
       <!-- 1 == IResourceChangeEvent.POST_CHANGE -->
       <property name="event.mask" type="Integer" value="1"/>
    </scr:component>

If you choose to register it with the core OSGi API (e.g. in an activator) you can use the following pattern:

     bundleContext.registerService(IResourceChangeListener.class, myListener, IResourceChangeListener.getMaskProperties(
                    IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE));

See Also:
  - `IResourceDelta`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`PROPERTY_EVENT_MASK`

## Method Summary

Modifier and Type
Method
Description
`static Dictionary<String,?>`
`getMaskProperties(int mask)`
Creates a `Dictionary` suitable to be used when registering a `IResourceChangeListener` as an OSGi service.
`void`
`resourceChanged(IResourceChangeEvent event)`
Notifies this listener that some resource changes are happening, or have already happened.

## Field Details

### PROPERTY_EVENT_MASK

static final String PROPERTY_EVENT_MASK

Since:
  3.17
See Also:
  - Constant Field Values

## Method Details

### resourceChanged

void resourceChanged(IResourceChangeEvent event)
Notifies this listener that some resource changes are happening, or have already happened.

The supplied event gives details. This event object (and the resource delta within it) is valid only for the duration of the invocation of this method.

Note: This method is called by the platform; it is not intended to be called directly by clients.

Note that during resource change event notification, further changes to resources may be disallowed.

Parameters:
  `event` - the resource change event
See Also:
  - `IResourceDelta`

### getMaskProperties

static Dictionary<String,?> getMaskProperties(int mask)
Creates a `Dictionary` suitable to be used when registering a `IResourceChangeListener` as an OSGi service.

Parameters:
  `mask` - see `IWorkspace.addResourceChangeListener(IResourceChangeListener, int)`
Returns:
  a new `Dictionary` representing the OSGi service properties for the given mask
Since:
  3.17