Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java23
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java38
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java26
3 files changed, 27 insertions, 60 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
index 106b05d438..8f2dc36fc5 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageInfoImpl.java
@@ -20,7 +20,6 @@ import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.net4j.util.om.trace.ContextTracer;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EFactory;
import org.eclipse.emf.ecore.EPackage;
@@ -30,7 +29,7 @@ import java.text.MessageFormat;
/**
* @author Eike Stepper
*/
-public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackageInfo
+public class CDOPackageInfoImpl implements InternalCDOPackageInfo
{
private static final ContextTracer TRACER = new ContextTracer(OM.DEBUG, CDOPackageInfoImpl.class);
@@ -40,6 +39,8 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
private String parentURI;
+ private EPackage ePackage;
+
public CDOPackageInfoImpl()
{
}
@@ -107,24 +108,12 @@ public class CDOPackageInfoImpl extends AdapterImpl implements InternalCDOPackag
public EPackage getEPackage(boolean loadOnDemand)
{
- return doGetEPackage(loadOnDemand);
- }
-
- public EPackage doGetEPackage(boolean loadOnDemand)
- {
- EPackage ePackage = (EPackage)getTarget();
- if (ePackage != null)
- {
- return ePackage;
- }
-
- if (loadOnDemand)
+ if (ePackage == null && loadOnDemand)
{
- packageUnit.load(true); // TODO (CD) Dubious: is resolution-on-load really a good idea?
- return (EPackage)getTarget();
+ packageUnit.load(true);
}
- return null;
+ return ePackage;
}
public boolean isCorePackage()
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
index 67ee3803e9..c8dd79a8e7 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageRegistryImpl.java
@@ -16,7 +16,6 @@ import org.eclipse.emf.cdo.common.model.CDOModelUtil;
import org.eclipse.emf.cdo.common.model.CDOPackageInfo;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.model.CDOPackageUnit.State;
-import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.internal.common.bundle.OM;
import org.eclipse.emf.cdo.internal.common.messages.Messages;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageInfo;
@@ -33,8 +32,6 @@ import org.eclipse.net4j.util.lifecycle.LifecycleState;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.om.trace.ContextTracer;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
@@ -87,6 +84,8 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
private Set<CDOPackageInfo> visitedPackages = new HashSet<CDOPackageInfo>();
+ private Map<EPackage, InternalCDOPackageInfo> packageInfoMap = new HashMap<EPackage, InternalCDOPackageInfo>();
+
public CDOPackageRegistryImpl()
{
}
@@ -193,7 +192,7 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
EPackage newValue = (EPackage)value;
if (oldPackageInfo.getEPackage(false) == null)
{
- EMFUtil.addAdapter(newValue, oldPackageInfo);
+ registerPackageInfo(newValue, oldPackageInfo);
oldPackageInfo.getPackageUnit().setState(CDOPackageUnit.State.LOADED);
}
}
@@ -257,7 +256,7 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
EPackage ePackage = packageInfo.getEPackage(false);
if (ePackage != null)
{
- EMFUtil.addAdapter(ePackage, packageInfo);
+ registerPackageInfo(ePackage, packageInfo);
basicPut(ePackage.getNsURI(), ePackage);
}
else
@@ -283,11 +282,16 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
}
}
+ public synchronized void registerPackageInfo(EPackage ePackage, InternalCDOPackageInfo packageInfo)
+ {
+ packageInfoMap.put(ePackage, packageInfo);
+ }
+
public synchronized InternalCDOPackageInfo getPackageInfo(EPackage ePackage)
{
LifecycleUtil.checkActive(this);
- // Looks in the registry
+ // Looks up a package descriptor in the registry
Object object = get(ePackage.getNsURI());
if (object instanceof InternalCDOPackageInfo)
{
@@ -298,25 +302,8 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
}
}
- // Looks in the adapters
- synchronized (ePackage)
- {
- EList<Adapter> adapters = ePackage.eAdapters();
- for (int i = 0, size = adapters.size(); i < size; ++i)
- {
- Adapter adapter = adapters.get(i);
- if (adapter instanceof InternalCDOPackageInfo)
- {
- InternalCDOPackageInfo packageInfo = (InternalCDOPackageInfo)adapter;
- if (packageInfo.getPackageUnit().getPackageRegistry() == this)
- {
- return packageInfo;
- }
- }
- }
- }
-
- return null;
+ // Looks up a package info in the packageInfoMap
+ return packageInfoMap.get(ePackage);
}
public synchronized InternalCDOPackageInfo[] getPackageInfos()
@@ -612,6 +599,7 @@ public class CDOPackageRegistryImpl extends EPackageRegistryImpl implements Inte
{
try
{
+ packageInfoMap.clear();
disposePackageUnits();
clear();
active = false;
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
index db20245bf3..ca23110573 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/model/CDOPackageUnitImpl.java
@@ -218,25 +218,14 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
public void dispose()
{
- for (InternalCDOPackageInfo packageInfo : packageInfos)
- {
- EPackage ePackage = packageInfo.getEPackage(false);
- if (ePackage != null)
- {
- synchronized (ePackage)
- {
- ePackage.eAdapters().remove(packageInfo);
- }
- }
- }
-
packageInfos = null;
setState(State.DISPOSED);
}
public synchronized void load(boolean resolve)
{
- load(packageRegistry.getPackageLoader(), resolve);
+ PackageLoader packageLoader = packageRegistry.getPackageLoader();
+ load(packageLoader, resolve);
}
public synchronized void load(PackageLoader packageLoader, boolean resolve)
@@ -254,10 +243,10 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
{
String packageURI = ePackage.getNsURI();
InternalCDOPackageInfo packageInfo = getPackageInfo(packageURI);
- synchronized (ePackage)
+ packageRegistry.registerPackageInfo(ePackage, packageInfo);
+ if (resolve)
{
- EMFUtil.addAdapter(ePackage, packageInfo);
- if (resolve)
+ synchronized (ePackage)
{
EcoreUtil.resolveAll(ePackage);
}
@@ -347,9 +336,10 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
packageInfo.setPackageUnit(this);
packageInfo.setPackageURI(ePackage.getNsURI());
packageInfo.setParentURI(ePackage.getESuperPackage() == null ? null : ePackage.getESuperPackage().getNsURI());
- EMFUtil.addAdapter(ePackage, packageInfo);
+ packageRegistry.registerPackageInfo(ePackage, packageInfo);
packageRegistry.basicPut(ePackage.getNsURI(), ePackage);
+
result.add(packageInfo);
for (EPackage subPackage : ePackage.getESubpackages())
{
@@ -362,7 +352,7 @@ public class CDOPackageUnitImpl implements InternalCDOPackageUnit
InternalCDOPackageInfo packageInfo = getPackageInfo(ePackage.getNsURI());
if (packageInfo != null)
{
- EMFUtil.addAdapter(ePackage, packageInfo);
+ packageRegistry.registerPackageInfo(ePackage, packageInfo);
}
for (EPackage subPackage : ePackage.getESubpackages())

Back to the top