Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaspar De Groot2011-05-12 09:55:33 +0000
committerCaspar De Groot2011-05-12 09:55:33 +0000
commit0675165fb5d4641d39f6334f527b500ad48e8905 (patch)
treea35f96a68442d6b5c1b6db0e20c15a65e76029d1 /plugins/org.eclipse.emf.cdo
parent1d51ff38dbbc07736b0486ec6471a15e8bde6f4d (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDONotificationBuilder.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java1
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);

Back to the top