package org.example.smalljava.scoping;
import com.google.common.base.Objects;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.resource.IContainer;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.IResourceDescription;
import org.eclipse.xtext.resource.IResourceDescriptions;
import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.example.smalljava.smallJava.SmallJavaPackage;
@SuppressWarnings("all")
public class SmallJavaIndex {
@Inject
private ResourceDescriptionsProvider rdp;
@Inject
private IContainer.Manager cm;
public Iterable<IEObjectDescription> getVisibleEObjectDescriptions(final EObject o) {
List<IContainer> _visibleContainers = this.getVisibleContainers(o);
final Function1<IContainer, Iterable<IEObjectDescription>> _function = new Function1<IContainer, Iterable<IEObjectDescription>>() {
@Override
public Iterable<IEObjectDescription> apply(final IContainer container) {
return container.getExportedObjects();
}
};
List<Iterable<IEObjectDescription>> _map = ListExtensions.<IContainer, Iterable<IEObjectDescription>>map(_visibleContainers, _function);
return Iterables.<IEObjectDescription>concat(_map);
}
public Iterable<IEObjectDescription> getVisibleEObjectDescriptions(final EObject o, final EClass type) {
List<IContainer> _visibleContainers = this.getVisibleContainers(o);
final Function1<IContainer, Iterable<IEObjectDescription>> _function = new Function1<IContainer, Iterable<IEObjectDescription>>() {
@Override
public Iterable<IEObjectDescription> apply(final IContainer container) {
return container.getExportedObjectsByType(type);
}
};
List<Iterable<IEObjectDescription>> _map = ListExtensions.<IContainer, Iterable<IEObjectDescription>>map(_visibleContainers, _function);
return Iterables.<IEObjectDescription>concat(_map);
}
public Iterable<IEObjectDescription> getVisibleClassesDescriptions(final EObject o) {
EClass _sJClass = SmallJavaPackage.eINSTANCE.getSJClass();
return this.getVisibleEObjectDescriptions(o, _sJClass);
}
public List<IContainer> getVisibleContainers(final EObject o) {
List<IContainer> _xblockexpression = null;
{
Resource _eResource = o.eResource();
final IResourceDescriptions index = this.rdp.getResourceDescriptions(_eResource);
Resource _eResource_1 = o.eResource();
URI _uRI = _eResource_1.getURI();
final IResourceDescription rd = index.getResourceDescription(_uRI);
List<IContainer> _xifexpression = null;
boolean _notEquals = (!Objects.equal(rd, null));
if (_notEquals) {
_xifexpression = this.cm.getVisibleContainers(rd, index);
} else {
_xifexpression = CollectionLiterals.<IContainer>emptyList();
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
public IResourceDescription getResourceDescription(final EObject o) {
IResourceDescription _xblockexpression = null;
{
Resource _eResource = o.eResource();
final IResourceDescriptions index = this.rdp.getResourceDescriptions(_eResource);
Resource _eResource_1 = o.eResource();
URI _uRI = _eResource_1.getURI();
_xblockexpression = index.getResourceDescription(_uRI);
}
return _xblockexpression;
}
public Iterable<IEObjectDescription> getExportedEObjectDescriptions(final EObject o) {
IResourceDescription _resourceDescription = this.getResourceDescription(o);
return _resourceDescription.getExportedObjects();
}
}