EMF >> Resolve Proxies
>> In general, true is a good default. It specifies that the referenced object in an instance of a class with that reference may be contained in a different resource, i.e., it specifies that cross resource references are supported, which is generally the case, except for a few rare exceptions.
>> When a resource is serialized, any reference to an EObject that's in a different resource from the referencing object will be serialized as a "proxy reference", i.e., <resource-uri>#<fragment-of-object-in-that-resource>. When that resource is deserialized, an instance object is created and it carries that URI as its proxy URI. When that object is accessed, and the reference specifies resolveProxies true, the object is inspect to see if it's a proxy and if so to retrieve its proxy URI. Ultimately resourceSet.getEObject is called with that URI, and if that successfully returns an EObject, it replaces the proxy and is returned instead of the proxy. So generally you'll never see a proxy when using the generated API, except when a proxy fails to resolve, in which case the proxy itself will be return.
>> The most common reason proxies fail to resolve, is poor choice of Resource URIs. I.e., a Resource's URI should generally be an absolute URI, in which case the URIs in the serialization will generally be relative URIs. Another reason proxy resolution might fail is because the referenced object is no longer present in the resource...