Source:
<code>public void open(IProgressMonitor monitor) { try { monitor.beginTask(Messages.DAnalysisSessionImpl_openMsg, 33); SessionManager.INSTANCE.add(this); monitor.worked(1); notifyListeners(SessionListener.OPENING); monitor.worked(1); DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_SESSION_KEY); ResourceSetSync.getOrInstallResourceSetSync(transactionalEditingDomain).registerClient(resourcesSynchronizer); monitor.worked(1); this.representationNameListener = new RepresentationNameListener(this); monitor.worked(1); tracker.initialize(monitor); monitor.worked(1); setSynchronizeStatusofEveryResource(); monitor.worked(1); configureInterpreter(); monitor.worked(1); initializeAccessor(); monitor.worked(1); ViewpointRegistry.getInstance().addListener(this.vsmUpdater); TransactionalEditingDomain.DefaultOptions options = TransactionUtil.getAdapter(getTransactionalEditingDomain(), TransactionalEditingDomain.DefaultOptions.class); if (options != null) { Object value = options.getDefaultTransactionOptions().get(Transaction.OPTION_VALIDATE_EDIT); ValidateEditSupport delegate = null; if (value instanceof ValidateEditSupport) { delegate = (ValidateEditSupport) value; } if (!(delegate instanceof ResourceModifiedFieldUpdater) && getTransactionalEditingDomain() instanceof InternalTransactionalEditingDomain) { InternalTransactionalEditingDomain internalDomain = (InternalTransactionalEditingDomain) getTransactionalEditingDomain(); new ResourceModifiedFieldUpdater(internalDomain, delegate); } } ECrossReferenceAdapterWithUnproxyCapability semanticCrossReferencer = getSemanticCrossReferencer(); for (DAnalysis dAnalysis : analyses) { dAnalysis.eAdapters().add(semanticCrossReferencer); } <START> <END> DViewOperations.on(this).updateSelectedViewpointsData(new SubProgressMonitor(monitor, 10)); initLocalTriggers(); checkResourceErrors(); super.setOpen(true); DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.OPEN_SESSION_KEY); notifyListeners(SessionListener.OPENED); monitor.worked(1); } catch (RuntimeException e) { super.setOpen(true); close(new SubProgressMonitor(monitor, 10)); throw e; } finally { monitor.done(); } }</code><technical_language>Simpler proposal: registerResourceInCrossReferencer(sessionResource); equivalent, putting adapter resource level instead of of root elements (there roots now) feels a safer</technical_language>

Target:
public void open(IProgressMonitor monitor) { try { monitor.beginTask(Messages.DAnalysisSessionImpl_openMsg, 33); SessionManager.INSTANCE.add(this); monitor.worked(1); notifyListeners(SessionListener.OPENING); monitor.worked(1); DslCommonPlugin.PROFILER.startWork(SiriusTasksKey.OPEN_SESSION_KEY); ResourceSetSync.getOrInstallResourceSetSync(transactionalEditingDomain).registerClient(resourcesSynchronizer); monitor.worked(1); this.representationNameListener = new RepresentationNameListener(this); monitor.worked(1); tracker.initialize(monitor); monitor.worked(1); setSynchronizeStatusofEveryResource(); monitor.worked(1); configureInterpreter(); monitor.worked(1); initializeAccessor(); monitor.worked(1); ViewpointRegistry.getInstance().addListener(this.vsmUpdater); TransactionalEditingDomain.DefaultOptions options = TransactionUtil.getAdapter(getTransactionalEditingDomain(), TransactionalEditingDomain.DefaultOptions.class); if (options != null) { Object value = options.getDefaultTransactionOptions().get(Transaction.OPTION_VALIDATE_EDIT); ValidateEditSupport delegate = null; if (value instanceof ValidateEditSupport) { delegate = (ValidateEditSupport) value; } if (!(delegate instanceof ResourceModifiedFieldUpdater) && getTransactionalEditingDomain() instanceof InternalTransactionalEditingDomain) { InternalTransactionalEditingDomain internalDomain = (InternalTransactionalEditingDomain) getTransactionalEditingDomain(); new ResourceModifiedFieldUpdater(internalDomain, delegate); } } registerResourceInCrossReferencer(sessionResource); DViewOperations.on(this).updateSelectedViewpointsData(new SubProgressMonitor(monitor, 10)); initLocalTriggers(); checkResourceErrors(); super.setOpen(true); DslCommonPlugin.PROFILER.stopWork(SiriusTasksKey.OPEN_SESSION_KEY); notifyListeners(SessionListener.OPENED); monitor.worked(1); } catch (RuntimeException e) { super.setOpen(true); close(new SubProgressMonitor(monitor, 10)); throw e; } finally { monitor.done(); } }