package org.jnario.ui.findrefs; import com.google.common.base.Objects; import com.google.inject.Inject; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.common.types.JvmType; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.resource.IReferenceDescription; import org.eclipse.xtext.resource.IResourceDescription; import org.eclipse.xtext.resource.IResourceDescriptions; import org.eclipse.xtext.resource.IResourceServiceProvider; import org.eclipse.xtext.ui.editor.findrefs.DefaultReferenceFinder; import org.eclipse.xtext.ui.editor.findrefs.IReferenceFinder; import org.eclipse.xtext.util.IAcceptor; import org.eclipse.xtext.util.concurrent.IUnitOfWork; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class XtendReferenceFinder extends DefaultReferenceFinder implements IReferenceFinder { private IQualifiedNameConverter nameConverter; @Inject public XtendReferenceFinder(final IResourceDescriptions indexData, final IResourceServiceProvider.Registry serviceProviderRegistry, final IQualifiedNameConverter nameConverter) { super(indexData, serviceProviderRegistry); this.nameConverter = nameConverter; } public void findReferences(final Set<URI> targetURIs, final IResourceDescription resourceDescription, final IAcceptor<IReferenceDescription> acceptor, final IProgressMonitor monitor, final IReferenceFinder.ILocalResourceAccess localResourceAccess) { final Function1<URI, URI> _function = new Function1<URI, URI>() { public URI apply(final URI it) { return it.trimFragment(); } }; Iterable<URI> _map = IterableExtensions.<URI, URI>map(targetURIs, _function); final Function1<URI, Boolean> _function_1 = new Function1<URI, Boolean>() { public Boolean apply(final URI it) { URI _uRI = resourceDescription.getURI(); return Boolean.valueOf(Objects.equal(it, _uRI)); } }; boolean _exists = IterableExtensions.<URI>exists(_map, _function_1); if (_exists) { return; } final HashSet<QualifiedName> names = CollectionLiterals.<QualifiedName>newHashSet(); for (final URI uri : targetURIs) { final IUnitOfWork<Boolean, ResourceSet> _function_2 = new IUnitOfWork<Boolean, ResourceSet>() { public Boolean exec(final ResourceSet it) throws Exception { boolean _xblockexpression = false; { EObject _eObject = it.getEObject(uri, true); final JvmType obj = EcoreUtil2.<JvmType>getContainerOfType(_eObject, JvmType.class); boolean _xifexpression = false; boolean _notEquals = (!Objects.equal(obj, null)); if (_notEquals) { String _identifier = obj.getIdentifier(); String _lowerCase = _identifier.toLowerCase(); QualifiedName _qualifiedName = XtendReferenceFinder.this.nameConverter.toQualifiedName(_lowerCase); _xifexpression = names.add(_qualifiedName); } _xblockexpression = _xifexpression; } return Boolean.valueOf(_xblockexpression); } }; localResourceAccess.<Boolean>readOnly(uri, _function_2); } Iterable<QualifiedName> _importedNames = resourceDescription.getImportedNames(); final Function1<QualifiedName, QualifiedName> _function_3 = new Function1<QualifiedName, QualifiedName>() { public QualifiedName apply(final QualifiedName it) { return it.toLowerCase(); } }; Iterable<QualifiedName> _map_1 = IterableExtensions.<QualifiedName, QualifiedName>map(_importedNames, _function_3); final Set<QualifiedName> importedNames = IterableExtensions.<QualifiedName>toSet(_map_1); final Function1<QualifiedName, Boolean> _function_4 = new Function1<QualifiedName, Boolean>() { public Boolean apply(final QualifiedName it) { return Boolean.valueOf(importedNames.contains(it)); } }; boolean _exists_1 = IterableExtensions.<QualifiedName>exists(names, _function_4); if (_exists_1) { URI _uRI = resourceDescription.getURI(); final IUnitOfWork<Object, ResourceSet> _function_5 = new IUnitOfWork<Object, ResourceSet>() { public Object exec(final ResourceSet it) throws Exception { URI _uRI = resourceDescription.getURI(); Resource _resource = it.getResource(_uRI, true); final IAcceptor<IReferenceDescription> _function = new IAcceptor<IReferenceDescription>() { public void accept(final IReferenceDescription it) { acceptor.accept(it); } }; XtendReferenceFinder.this.findLocalReferencesInResource(targetURIs, _resource, _function); return null; } }; localResourceAccess.<Object>readOnly(_uRI, _function_5); } } }