Replaced EObjectIdManager with built-in map
diff --git a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/EObjectIdManager.java b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/EObjectIdManager.java
deleted file mode 100644
index f3fbb43..0000000
--- a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/EObjectIdManager.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.eclipse.epsilon.flexmi;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-
-public class EObjectIdManager {
-
- protected HashMap<String, List<EObject>> cache = new HashMap<String, List<EObject>>();
-
- public void setEObjectId(EObject eObject, String id) {
- List<EObject> eObjects = cache.get(id);
- if (eObjects == null) {
- eObjects = new ArrayList<EObject>();
- cache.put(id, eObjects);
- }
- eObjects.add(eObject);
- }
-
- public List<EObject> getEObjectsById(String id) {
- List<EObject> eObjects = cache.get(id);
- if (eObjects == null) return Collections.emptyList();
- else return eObjects;
- }
-
- public boolean hasId(EObject eObject) {
- return cache.values().contains(eObject);
- }
-}
diff --git a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
index a33a217..95451b5 100644
--- a/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
+++ b/plugins/org.eclipse.epsilon.flexmi/src/org/eclipse/epsilon/flexmi/FlexmiResource.java
@@ -46,7 +46,6 @@
public static final String OPTION_ORPHANS_AS_TOP_LEVEL = "orphansAsTopLevel";
public static final String OPTION_FUZZY_MATCHING_THRESHOLD = "fuzzyMatchingThreshold";
- protected EObjectIdManager eObjectIdManager = new EObjectIdManager();
protected EObjectTraceManager eObjectTraceManager = new EObjectTraceManager();
protected List<UnresolvedReference> unresolvedReferences = new ArrayList<UnresolvedReference>();
protected Stack<Object> stack = new Stack<Object>();
@@ -142,7 +141,7 @@
scripts.clear();
eClassCache.clear();
allSubtypesCache.clear();
- eObjectIdManager = new EObjectIdManager();
+ setIntrinsicIDToEObjectMap(new HashMap<String, EObject>());
if (options != null) {
for (Object key : options.keySet()) {
@@ -357,20 +356,21 @@
for (UnresolvedReference reference : unresolvableReferences) {
addParseWarning("Could not resolve target " + reference.getValue() + " for reference " + reference.getAttributeName() + " (" + reference.getEReference().getName() + ")", reference.getUri(), reference.getLine());
}
- eObjectIdManager = new EObjectIdManager();
}
protected boolean resolveReference(UnresolvedReference unresolvedReference) {
- List<EObject> candidates = eObjectIdManager.getEObjectsById(unresolvedReference.getValue());
+ List<EObject> candidates = Arrays.asList(getIntrinsicIDToEObjectMap().get(unresolvedReference.getValue()));
if (!unresolvedReference.resolve(candidates)) {
+ System.out.println("Failed");
for (Resource resource : getResourceSet().getResources()) {
if (resource != this) {
candidates = Arrays.asList(resource.getEObject(unresolvedReference.getValue()));
if (unresolvedReference.resolve(candidates)) return true;
}
}
+ return false;
}
- return false;
+ return true;
}
public int getLineNumber(Node node) {
@@ -393,7 +393,7 @@
if (attributes.getNamedItem("id") != null) {
String value = attributes.getNamedItem("id").getNodeValue();
attributes.removeNamedItem("id");
- eObjectIdManager.setEObjectId(eObject, value);
+ getIntrinsicIDToEObjectMap().put(value, eObject);
}
}
@@ -459,7 +459,7 @@
if (eValue == null) return;
eObject.eSet(eAttribute, eValue);
if (eAttribute.isID() || "name".equalsIgnoreCase(eAttribute.getName())) {
- if (!eObjectIdManager.hasId(eObject)) eObjectIdManager.setEObjectId(eObject, value);
+ getIntrinsicIDToEObjectMap().put(value, eObject);
}
}
}