Loading plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/scoping/TDLtxGlobalScopeProvider.xtend 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line package org.etsi.mts.tdl.scoping import com.google.common.base.Splitter import com.google.inject.Inject import com.google.inject.Provider import java.util.LinkedHashSet import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.resource.IResourceDescription import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider import org.eclipse.xtext.util.IResourceScopeCache import org.etsi.mts.tdl.RDS import org.etsi.mts.tdl.tdlPackage class TDLtxGlobalScopeProvider extends ImportUriGlobalScopeProvider { private static final Splitter SPLITTER = Splitter.on(','); @Inject IResourceDescription.Manager descriptionManager; @Inject IResourceScopeCache cache; override protected getImportedUris(Resource resource) { return cache.get(TDLtxGlobalScopeProvider.getSimpleName(), resource, new Provider<LinkedHashSet<URI>>() { override get() { val uniqueImportURIs = collectImportUris(resource, new LinkedHashSet<URI>(5)) val uriIter = uniqueImportURIs.iterator() while(uriIter.hasNext()) { if (!EcoreUtil2.isValidUri(resource, uriIter.next())) uriIter.remove() } return uniqueImportURIs } def LinkedHashSet<URI> collectImportUris(Resource resource, LinkedHashSet<URI> uniqueImportURIs) { val resourceDescription = descriptionManager.getResourceDescription(resource) val models = resourceDescription.getExportedObjectsByType(tdlPackage.Literals.PACKAGE) models.forEach[ val userData = getUserData(RDS.INCLUDES) if(userData !== null) { SPLITTER.split(userData).forEach[uri | var includedUri = URI.createURI(uri) includedUri = includedUri.resolve(resource.URI) if(uniqueImportURIs.add(includedUri)) { collectImportUris(resource.getResourceSet().getResource(includedUri, true), uniqueImportURIs) } ] } ] return uniqueImportURIs } }); } } No newline at end of file Loading
plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/scoping/TDLtxGlobalScopeProvider.xtend 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line package org.etsi.mts.tdl.scoping import com.google.common.base.Splitter import com.google.inject.Inject import com.google.inject.Provider import java.util.LinkedHashSet import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource import org.eclipse.xtext.EcoreUtil2 import org.eclipse.xtext.resource.IResourceDescription import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider import org.eclipse.xtext.util.IResourceScopeCache import org.etsi.mts.tdl.RDS import org.etsi.mts.tdl.tdlPackage class TDLtxGlobalScopeProvider extends ImportUriGlobalScopeProvider { private static final Splitter SPLITTER = Splitter.on(','); @Inject IResourceDescription.Manager descriptionManager; @Inject IResourceScopeCache cache; override protected getImportedUris(Resource resource) { return cache.get(TDLtxGlobalScopeProvider.getSimpleName(), resource, new Provider<LinkedHashSet<URI>>() { override get() { val uniqueImportURIs = collectImportUris(resource, new LinkedHashSet<URI>(5)) val uriIter = uniqueImportURIs.iterator() while(uriIter.hasNext()) { if (!EcoreUtil2.isValidUri(resource, uriIter.next())) uriIter.remove() } return uniqueImportURIs } def LinkedHashSet<URI> collectImportUris(Resource resource, LinkedHashSet<URI> uniqueImportURIs) { val resourceDescription = descriptionManager.getResourceDescription(resource) val models = resourceDescription.getExportedObjectsByType(tdlPackage.Literals.PACKAGE) models.forEach[ val userData = getUserData(RDS.INCLUDES) if(userData !== null) { SPLITTER.split(userData).forEach[uri | var includedUri = URI.createURI(uri) includedUri = includedUri.resolve(resource.URI) if(uniqueImportURIs.add(includedUri)) { collectImportUris(resource.getResourceSet().getResource(includedUri, true), uniqueImportURIs) } ] } ] return uniqueImportURIs } }); } } No newline at end of file