# Package org.eclipse.handly.model

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

- Related Packages
  Package
  Description
  org.eclipse.handly
  The root package for Eclipse Handly.
  org.eclipse.handly.model.adapter
  Supports adaptation of existing ("legacy") models to the API defined in `org.eclipse.handly.model`.
  org.eclipse.handly.model.impl
  Defines the implementation-side API for models that want to support the API provided in `org.eclipse.handly.model`.
- Class
  Description
  ElementDeltas
  Provides static methods for generic access to `IElementDelta`s.
  Elements
  Provides static methods for generic access to `IElement`s.
  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.
  Models
  Provides static methods for generic access to `IModel`s.