/**
* generated by Xtext 2.10.0
*/
package org.thingml.xtext.scoping;
import com.google.common.base.Objects;
import java.util.ArrayList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.scoping.Scopes;
import org.sintef.thingml.constraints.ThingMLHelpers;
import org.thingml.xtext.scoping.AbstractThingMLScopeProvider;
import org.thingml.xtext.thingML.Message;
import org.thingml.xtext.thingML.Port;
import org.thingml.xtext.thingML.Thing;
import org.thingml.xtext.thingML.ThingMLPackage;
/**
* This class contains custom scoping description.
*
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping
* on how and when to use it.
*/
@SuppressWarnings("all")
public class ThingMLScopeProvider extends AbstractThingMLScopeProvider {
private final ThingMLPackage p = ThingMLPackage.eINSTANCE;
@Override
public IScope getScope(final EObject context, final EReference reference) {
if ((Objects.equal(reference, this.p.getPort_Receives()) || Objects.equal(reference, this.p.getPort_Sends()))) {
return this.scopeForMessagesInPort(((Port) context));
}
return super.getScope(context, reference);
}
protected IScope scopeForMessagesInPort(final Port context) {
EObject _eContainer = context.eContainer();
ArrayList<Message> _allMessages = ThingMLHelpers.allMessages(((Thing) _eContainer));
return Scopes.scopeFor(_allMessages);
}
}