package org.jnario.feature.jvmmodel;
import com.google.common.collect.Iterables;
import com.google.inject.Inject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.xtend.core.xtend.XtendField;
import org.eclipse.xtend.core.xtend.XtendMember;
import org.eclipse.xtext.common.types.JvmField;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociations;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.util.XbaseUsageCrossReferencer;
import org.jnario.feature.feature.Step;
import org.jnario.feature.jvmmodel.StepExpressionProvider;
import org.jnario.feature.jvmmodel.VisibleMembersCalculator;
@SuppressWarnings("all")
public class StepContextProvider {
@Inject
@Extension
private StepExpressionProvider _stepExpressionProvider;
@Inject
@Extension
private IJvmModelAssociations _iJvmModelAssociations;
@Inject
@Extension
private VisibleMembersCalculator _visibleMembersCalculator;
public Set<XtendField> usedFields(final Step step) {
Set<XtendField> _xblockexpression = null;
{
final XExpression expr = this._stepExpressionProvider.expressionOf(step);
Iterable<XtendMember> _allVisibleMembers = this._visibleMembersCalculator.allVisibleMembers(step);
Iterable<XtendField> _filter = Iterables.<XtendField>filter(_allVisibleMembers, XtendField.class);
final Function1<XtendField, Boolean> _function = new Function1<XtendField, Boolean>() {
public Boolean apply(final XtendField it) {
boolean _xblockexpression = false;
{
Set<EObject> _jvmElements = StepContextProvider.this._iJvmModelAssociations.getJvmElements(it);
Iterable<JvmField> _filter = Iterables.<JvmField>filter(_jvmElements, JvmField.class);
Iterator<JvmField> _iterator = _filter.iterator();
final JvmField field = _iterator.next();
ArrayList<XExpression> _newArrayList = CollectionLiterals.<XExpression>newArrayList(expr);
final Collection<EStructuralFeature.Setting> usages = XbaseUsageCrossReferencer.find(field, _newArrayList);
boolean _isEmpty = usages.isEmpty();
_xblockexpression = (!_isEmpty);
}
return Boolean.valueOf(_xblockexpression);
}
};
Iterable<XtendField> _filter_1 = IterableExtensions.<XtendField>filter(_filter, _function);
_xblockexpression = IterableExtensions.<XtendField>toSet(_filter_1);
}
return _xblockexpression;
}
}