|Age||Commit message (Collapse)||Author||Files||Lines|
Implement a new mode of controlled unit in Papyrus dubbed "shards".
A shard is like any other sub-unit created up to and including the
Neon release, except that it cannot be opened independently in the
editor. The Papyrus editor, when asked to open a "shard", will
instead open the root resource of the model. Likewise, the editor
matcher normalizes editor inputs to the root resource of any shard.
The graph of shard dependencies is inferred from a new workspace-
wide index of cross-resource containment references, when it is
available. Otherwise, the linkage of shards to their parent
references is parsed on-the-fly from the shard annotation's
reference (with a relatively efficient XML parsing that terminates
after reading only a few lines of the XMI text).
A new ResourceLocator is implemented to provide a pluggable hook for
resource loading (including proxy resolution), to ensure when loading
a shard resource that its parent resource chain is first loaded from
the top down to ensure that all context of profile applications is
available before loading the shard, itself, which may have stereotype
applications that depend on those profile applications. The
CoreMultiDiagramEditor installs this resource locator on the ModelSet;
other applications (including in a non-Eclipse context) can make
similar use of it.
Some additional fixes are required in other core components to make
the loading of referenced sharded models as in bug 458837 work:
* the SemanticUMLContentProvider did not detect the final resolution
of containment proxies that changes what looks look a model root
object into just another intermediate element in the content tree.
Besides that it would schedule a large number of redundant
UI refreshes asynchronously (deferred) on the UI thread
* the DiModel and NotationModel would load their adjuncts to the *.uml
resource when that resource is created, not after it has been loaded.
This is much too early and ends up causing the transactional editing
domain to detect the attachment of a resource's contents at the end
of loading as an attempt to edit the model during a read-only
transaction, which logs an exception and bombs the UI action.
Instead, these models now have snippets that load the *.di and
*.notation resources after the semantic resource has been loaded.
* the new model snippets required an additional fix in the loading
of IModels to handle contributions of snippets and dependencies to
models that are overridden by other IModels registered under the
same ID, such as is the case with the NotationModel and the
CSSNotationModel, which latter needs the snippet declared by the
* the IModels additionally need to ensure that they start snippets
on loading of an existing model even when it is already found to
be loaded in the ModelSet (as happens often in JUnit tests)
* the AbstractModelFixture in the JUnit test framework is updated to
ensure that the ModelSet is properly initialized, with its own
snippets started and its IModels loaded and their snippets started
* the basic uncontrol command now removes the shard annotation from
the uncontrolled element/resource, if there was one. Because this
bundle now supports a new feature (that being shards), it seems
appropriate to bump its minor version number
General-purpose changes in the core workspace model index framework
that improve overall performance, of particular significance in large
and highly fragmented models:
Implement persistent storage of the workspace model index at workspace
save to support quick start-up without parsing the entire workspace.
Consolidation of indices:
* run a single pool of indexing jobs and a single resource change
listener to trigger (re)-indexing of files
* all indices matching any given file process it
* includes a new extension point from which all indices are loaded
into the shared index manager to initialize them and do the work
(cherry-picked from streams/2.0-maintenance)
Move UI-dependent APIs from the org.eclipse.papyrus.infra.emf
bundle to a new org.eclipse.papyrus.infra.ui.emf bundle. Accordingly
move tests into a new org.eclipse.papyrus.infra.ui.emf.tests bundle.
Now that we have an UI EMF bundle, move the editor-page advices from
the infra.ui bundle into it, which is a more appropriate home for them.
One UI dependency is removed by reordering of code in the
* the EMF Facet tree elements are once again IAdaptables, providing
their encapsulated EObjects or EReferences as adapters. So, the
case handling IAdaptable is moved ahead of the test for is-an-EObject
because these tree elements are also EObjects but are not interesting
Also, the dialog-settings for the EMF Facet customization manager are
moved into the infra.ui.emf bundle, as is the lazy initialization of
the manager from those settings. Clients are refactored to get the
customization manager from this new bundle (via a new ProviderHelper
API) to ensure this lazy initialization.
Various UI-dependent ServiceUtilsForXyz classes that were in the
infra.emf bundle but had nothing to do with EMF are moved into the
UI-dependent classes from the org.eclipse.papyrus.infra.emf.readonly
bundle are moved into the org.eclipse.papyrus.infra.ui.emf, also.
These include extraction of the editor reload listener from the
ReadOnlyManager class by means of a new general-purpose
IReadOnlyManagerProcessor OSGi service interface.
Tests all still pass (inasmuch as they do in the nightly master builds).
Move UI-dependent APIs from the org.eclipse.papyrus.infra.tools
bundle to org.eclipse.papyrus.infra.ui. Accordingly move tests
into a new org.eclipse.papyrus.infra.ui.tests bundle.
Two crucial UI dependencies are inverted by introduction of new
OSGi services with core interfaces specified in the non-UI layer:
* IExecutorService extends Java Platform's ExecutorService with
APIs for synchronous execution (a la Display.syncExec). A new
CoreExecutors class in the infra.tools bundle supplies the instance
provided by the OSGi service implementation in the infra.ui bundle.
This provides compatibility for clients of various UIUtil APIs that
they can no longer access
* IContextualServiceRegistryTracker abstracts the concept of the
default ServicesRegistry found in the currently active editor, which
the ServiceUtilsForHandlers class (and hence all of its clients)
relies on. Again an OSGi service implementation in the infra.ui
bundle supplies the implementation of this tracker, which is exposed
in infra.core through the service-utils API
Also move UI-dependent APIs from the org.eclipse.papyrus.infra.core
bundle into org.eclipse.papyrus.infra.ui. This includes
* moving the 'papyrusDiagram' and 'papyrusContentOutline' extension
points into the org.eclipse.papyrus.infra.ui namespace
* moving various UI-related services such as EditorLifeycleManager,
SaveLayoutBeforeClose, and the IMultiDiagramEditor, itself, into the
This necessitates not only widespread refactorings on the moved APIs,
but also concomitant move of other APIs in other bundles because they
cannot plausibly use these moved APIs from their new home in
org.eclipse.papyrus.infra.ui and/or they cannot reasonably also be moved
to the UI bundle and/or they must be used by bundles that now have no UI
* the DI/sash-windows EMF model is moved out of infra.core.sasheditor.di
bundle into a new model-only org.eclipse.papyrus.infra.sashwindows.di
bundle (which symbolic name incidentally now better reflects the
contained Java package names)
* the IPageManager and ILocalPageService interfaces are moved out of
infra.core.sasheditor.di bundle because they need to remain accessible
by headless code such as the edit advices that ensure deletion of
sash-model pages for notations that are deleted. These are now in a
package named org.eclipse.papyrus.infra.code.sashwindows.di.service.
Accordingly the class hierarchy implementing the IPageManager
interface is changed: the obsolete PageMngrImpl is deleted, replaced
by a BasicPageManagerImpl which now the PageManagerImpl extends. A
service factory creates the basic page manager in a headless context,
but is overridden by the UI-aware implementation when the UI bundles
* the MultiDiagramEditorGefDelegate (which has a GEF 3 dependency) is
moved from the org.eclipse.papyrus.infra.core.sasheditor bundle to a
new org.eclipse.papyrus.infra.gmfdiag.gef bundle. Its usage for an
adapter of ActionRegistry type is extracted out of the
CoreMultiDiagramEditor class into a new external adapter-factory in
the infra.gmfdiag.gef bundle
Tests all still pass (inasmuch as they do in the nightly master builds).
Refactor the initialization of the ModelSet service so that its own service factory associates it with the service registry (removing the additional service-factory that did this).
This introduces a new concept of service adapters that can externally provide a POJO service instance with the service lifecycle hooks, for POJOs that are injected into the service registry by a client and not created by a factory. Non-POJO services and factory-created services do not need this because they have the service lifecycle built-in.
Update the CoreMultiDiagramEditor to start itself early to let other services such as the model set find it in the registry. Fix an NPE in the abstract editor triggered by the service registry's attempt to obtain a service adapter from it.
Implementation of stereotype application repair when switching profile applications. Includes a new DependencyManager that loads participants from an extension point, to enable injection of the stereotype application repair.
Implement edit advice to protect read-only objects.
Implement a custom TransactionChangeRecorder that aborting the transaction if a read-only object is modified.
Add a new extension point oep.infra.gmfdiag.commands.historyListeners for registration of listeners to be added to the Papyrus operation history. Implement a listener that detects operations that failed because of rollback and presents a status dialog explaining the rollback.
Add a new label provider for EMF Resources to support presentation of the rollback dialog when an affected object is a resource.
Introduce an IAtomicOperationExecutor adapter for the object being edited by the widgets to to execute complex operations on the EMF command-stack (for EObjects being edited). This command stack is understood to support nested command execution.
Add the element being edited as context for the ReferenceValueFactory's creation of a new referenced object. This provides resource-set context for nested editors that need to create further new elements wherever in the model. This resource-set also can be used to look up the LabelProviderService for presentation of objects in the dialogs.
Improve the LabelProvider for "AnyType" elements
leads to critical model corruption
360243: [ModelExplorer] Undo/Redo on delete for Diagrams and Tables
LabelProviderService is now partially used.
EObject attached to a Papyrus ResourceSet
Add class ServiceUtilsForResource allowing to get the ServicesRegistry from an EOBject.