Community
Participate
Working Groups
org.eclipse.sphinx.emf.util.EObjectUtil.deproxify(EObject) has the following fragment: for (Iterator<EObject> iter = eObject.eAllContents(); iter.hasNext();) { deproxify(iter.next()); } Which means that it invokes the same function for its entire subtree. That means that the subtree again invokes all of it subtrees, resulting in exponential runtime. I think we have to alternatives: Either use eContents, which will use recursion to iterate through the tree for (Iterator<EObject> iter = eObject.eContents(); iter.hasNext();) { deproxify(iter.next()); } or invoke the unsetting inline: for (Iterator<EObject> iter = eObject.eAllContents(); iter.hasNext();) { if (eObject != null) { // Deproxify given EObject if (eObject.eIsProxy() && eObject instanceof InternalEObject) { ((InternalEObject) eObject).eSetProxyURI(null); } } } I'd go for the 2nd and would expect performance improvements when shifting around huge models. BTW, proxify does not seem to need a fix (uses recursion).
Closed stale issue before migration