diff options
author | Caspar De Groot | 2011-05-12 09:55:33 +0000 |
---|---|---|
committer | Caspar De Groot | 2011-05-12 09:55:33 +0000 |
commit | 0675165fb5d4641d39f6334f527b500ad48e8905 (patch) | |
tree | a35f96a68442d6b5c1b6db0e20c15a65e76029d1 /plugins/org.eclipse.emf.cdo | |
parent | 1d51ff38dbbc07736b0486ec6471a15e8bde6f4d (diff) | |
download | cdo-0675165fb5d4641d39f6334f527b500ad48e8905.tar.gz cdo-0675165fb5d4641d39f6334f527b500ad48e8905.tar.xz cdo-0675165fb5d4641d39f6334f527b500ad48e8905.zip |
[Bug 341081] Make loaded revisions immutable
https://bugs.eclipse.org/bugs/show_bug.cgi?id=341081
Diffstat (limited to 'plugins/org.eclipse.emf.cdo')
2 files changed, 11 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDONotificationBuilder.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDONotificationBuilder.java index 01d4668c1b..aee63c95be 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDONotificationBuilder.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDONotificationBuilder.java @@ -32,6 +32,7 @@ import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.InternalEObject; +import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import java.util.Set; @@ -182,6 +183,9 @@ public class CDONotificationBuilder extends CDOFeatureDeltaVisitorImpl List<Object> list = (List<Object>)oldValue; if (!list.isEmpty()) { + list = new ArrayList<Object>(list); // Copy the list so that it.set() does not change the frozen oldRevision + boolean changed = false; + for (ListIterator<Object> it = list.listIterator(); it.hasNext();) { Object element = it.next(); @@ -192,9 +196,15 @@ public class CDONotificationBuilder extends CDOFeatureDeltaVisitorImpl if (oldObject != null) { it.set(oldObject); + changed = true; } } } + + if (changed) + { + oldValue = list; + } } } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java index e710c1be1c..30719c76cd 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java @@ -752,6 +752,7 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent // Adjust revision revision.adjustForCommit(transaction.getBranch(), data.getTimeStamp()); revision.adjustReferences(data.getReferenceAdjuster()); + revision.freeze(); InternalCDORevisionManager revisionManager = transaction.getSession().getRevisionManager(); revisionManager.addRevision(revision); |