# Package org.eclipse.handly.model

Provides a common API for handle-based models.

An `IModel` serves as the common owner of any number of `IElement`s. `IElement`s are exposed to clients as handles to the actual underlying element. The model may hand out any number of handles for each element. Handles are value objects; handles that refer to the same element are guaranteed to be equal, but not necessarily identical. An `IElementDelta` describes changes to an `IElement` between two discrete points in time.

`IModel`, `IElement`, and `IElementDelta` are just marker interfaces. Use static methods in classes `Models`, `Elements`, and `ElementDeltas` for generic access to `IModel`s, `IElement`s, and `IElementDelta`s.

This package also provides marker interfaces for code-centric elements such as `ISourceFile` and `ISourceConstruct`. Those can also be manipulated via static methods in `Elements`.

Finally, there are `IXXXExtension` interfaces (e.g., `IElementExtension`), which model implementors may opt to extend. The extension interfaces extend the corresponding marker interfaces and introduce a number of generally useful default methods, effectively acting like mix-ins.

See Also:
  Handly Core Framework Overview

- Interface Summary
  Interface | Description
  --- | ---
  IElement | A marker interface for all elements of a Handly-based model.
  IElementChangeEvent | Describes a change to the structure or contents of one or more trees of elements of a Handly-based model.
  IElementChangeListener | An element change listener is notified of changes to elements of a Handly-based model.
  IElementDelta | A marker interface for delta objects which describe changes in an `IElement` between two discrete points in time.
  IElementDeltaConstants | Provides constants which define element delta kinds and describe element changes.
  IElementDeltaExtension | Model implementors may opt to extend this interface, which extends `IElementDelta` with a number of default methods.
  IElementExtension | Model implementors may opt to extend this interface, which extends `IElement` with a number of default methods.
  IElementHandleFactory | Provides a generic way to create `IElement` handles.
  IModel | A marker interface for Handly-based models.
  IModelExtension | Model implementors may opt to extend this interface, which extends `IModel` with a number of default methods.
  ISourceConstruct | A marker interface for elements in a source file or, more generally, elements inside a "resource" that may have associated source (an example of such "resource" might be a class file in a jar).
  ISourceElement | A marker interface for elements that may have associated source code.
  ISourceElementExtension | Model implementors may opt to extend this interface, which extends `ISourceElement` with a number of default methods.
  ISourceElementInfo | Holds cached structure and properties for an `ISourceElement`.
  ISourceFile | A marker interface for elements that represent a source file.
  ISourceFileExtension | Model implementors may opt to extend this interface, which extends `ISourceFile` with a number of default methods.

- Class Summary
  Class | Description
  --- | ---
  ElementDeltas | Provides static methods for generic access to `IElementDelta`s.
  Elements | Provides static methods for generic access to `IElement`s.
  Models | Provides static methods for generic access to `IModel`s.