package org.example.smalljava.scoping;
import com.google.common.base.Objects;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.naming.IQualifiedNameProvider;
import org.eclipse.xtext.naming.QualifiedName;
import org.eclipse.xtext.resource.EObjectDescription;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy;
import org.eclipse.xtext.util.IAcceptor;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.example.smalljava.smallJava.SJClass;
import org.example.smalljava.smallJava.SJProgram;
/**
* If you enable this strategy, the NamesAreUniqueValidator will not
* work as expected.
*/
@Singleton
@SuppressWarnings("all")
public class SmallJavaResourceDescriptionsStrategy extends DefaultResourceDescriptionStrategy {
@Inject
@Extension
private IQualifiedNameProvider _iQualifiedNameProvider;
@Override
public boolean createEObjectDescriptions(final EObject eObject, final IAcceptor<IEObjectDescription> acceptor) {
boolean _xifexpression = false;
if ((eObject instanceof SJProgram)) {
boolean _xblockexpression = false;
{
EList<SJClass> _classes = ((SJProgram) eObject).getClasses();
final Procedure1<SJClass> _function = new Procedure1<SJClass>() {
@Override
public void apply(final SJClass sjClass) {
final QualifiedName fullyQualifiedName = SmallJavaResourceDescriptionsStrategy.this._iQualifiedNameProvider.getFullyQualifiedName(sjClass);
boolean _notEquals = (!Objects.equal(fullyQualifiedName, null));
if (_notEquals) {
IEObjectDescription _create = EObjectDescription.create(fullyQualifiedName, sjClass);
acceptor.accept(_create);
}
}
};
IterableExtensions.<SJClass>forEach(_classes, _function);
_xblockexpression = true;
}
_xifexpression = _xblockexpression;
} else {
_xifexpression = false;
}
return _xifexpression;
}
}