|
17 | 17 | import org.eclipse.emf.ecore.EClass; |
18 | 18 | import org.eclipse.emf.ecore.EObject; |
19 | 19 | import org.eclipse.emf.ecore.EReference; |
| 20 | +import org.eclipse.emf.ecore.resource.Resource; |
20 | 21 | import org.eclipse.xtext.linking.impl.DefaultLinkingService; |
21 | 22 | import org.eclipse.xtext.linking.impl.ImportedNamesAdapter; |
22 | 23 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
| 24 | +import org.eclipse.xtext.naming.IQualifiedNameProvider; |
23 | 25 | import org.eclipse.xtext.naming.QualifiedName; |
24 | 26 | import org.eclipse.xtext.nodemodel.INode; |
25 | 27 | import org.eclipse.xtext.resource.IEObjectDescription; |
@@ -82,13 +84,22 @@ private void registerNamedType(final EObject context, final QualifiedName name, |
82 | 84 | * the lookup type, may be {@code null} |
83 | 85 | */ |
84 | 86 | public void importObject(final EObject context, final EObject target, final EClass type) { |
85 | | - final IResourceDescriptions resourceDescriptions = provider.getResourceDescriptions(context.eResource()); |
86 | | - Iterator<IEObjectDescription> exports = resourceDescriptions.getExportedObjectsByObject(target).iterator(); |
87 | | - if (exports.hasNext()) { |
88 | | - QualifiedName targetName = exports.next().getName(); |
89 | | - if (targetName != null && !targetName.isEmpty()) { |
90 | | - registerNamedType(context, targetName.toLowerCase(), type); // NOPMD targetName not a String! |
| 87 | + Resource eResource = target.eResource(); |
| 88 | + QualifiedName targetName = null; |
| 89 | + if (eResource instanceof LazyLinkingResource2) { |
| 90 | + IQualifiedNameProvider nameProvider = ((LazyLinkingResource2) eResource).getService(IQualifiedNameProvider.class); |
| 91 | + if (nameProvider != null) { |
| 92 | + targetName = nameProvider.getFullyQualifiedName(target); |
91 | 93 | } |
| 94 | + } else { |
| 95 | + final IResourceDescriptions resourceDescriptions = provider.getResourceDescriptions(context.eResource()); |
| 96 | + Iterator<IEObjectDescription> exports = resourceDescriptions.getExportedObjectsByObject(target).iterator(); |
| 97 | + if (exports.hasNext()) { |
| 98 | + targetName = exports.next().getName(); |
| 99 | + } |
| 100 | + } |
| 101 | + if (targetName != null && !targetName.isEmpty()) { |
| 102 | + registerNamedType(context, targetName.toLowerCase(), type); // NOPMD targetName not a String! |
92 | 103 | } |
93 | 104 | } |
94 | 105 |
|
|
0 commit comments