From 1d259077a25c67e5789b2b76074df799a01e3265 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Sat, 15 Sep 2012 09:08:22 +0200 Subject: Optimize AbstractCDOView.invalidate() --- .../emf/internal/cdo/view/AbstractCDOView.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'plugins') diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java index 8b84a59bf5..72a548df02 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/AbstractCDOView.java @@ -1203,6 +1203,8 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi } } + private Map resourcePathCache = new HashMap(); + /* * Synchronized through InvlidationRunner.run() */ @@ -1210,6 +1212,9 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi List allChangedObjects, List allDetachedObjects, List deltas, Map revisionDeltas, Set detachedObjects) { + boolean hasConflictResolvers = this instanceof CDOTransaction + && ((CDOTransaction)this).options().getConflictResolvers().length != 0; + Map> conflicts = null; for (CDORevisionKey key : allChangedObjects) { @@ -1217,17 +1222,25 @@ public abstract class AbstractCDOView extends Lifecycle implements InternalCDOVi if (key instanceof CDORevisionDelta) { delta = (CDORevisionDelta)key; - // Copy the revision delta if we are a transaction, so that conflict resolvers can modify it. - if (this instanceof CDOTransaction) + // Copy the revision delta so that conflict resolvers can modify it. + if (hasConflictResolvers) { delta = new CDORevisionDeltaImpl(delta, true); } deltas.add(delta); + + if (resourcePathCache != null && EresourcePackage.Literals.CDO_RESOURCE_NODE.isSuperTypeOf(delta.getEClass())) + { + if (delta.getFeatureDelta(EresourcePackage.Literals.CDO_RESOURCE_NODE__FOLDER) != null + || delta.getFeatureDelta(EresourcePackage.Literals.CDO_RESOURCE_NODE__NAME) != null) + { + resourcePathCache.clear(); + } + } } CDOObject changedObject = objects.get(key.getID()); - if (changedObject != null) { Pair oldInfo = new Pair( -- cgit v1.2.3