@Override
public Scope outgoingScopeFor( Set<Scope> incomingScopes )
{
Fields argumentFields = resolveArgumentSelector( incomingScopes );
verifyArguments( argumentFields );
Fields declaredFields = resolveDeclared( incomingScopes, argumentFields );
verifyDeclaredFields( declaredFields );
Fields outgoingValuesFields = resolveOutgoingValuesSelector( incomingScopes, argumentFields, declaredFields );
verifyOutputSelector( outgoingValuesFields );
Fields outgoingGroupingFields = Fields.asDeclaration( outgoingValuesFields );
Fields passThroughFields = resolveIncomingOperationPassThroughFields( getFirst( incomingScopes ) );
Fields remainderFields = resolveRemainderFields( incomingScopes, argumentFields );
return new Scope( getName(), Scope.Kind.EACH, passThroughFields, remainderFields, argumentFields, declaredFields, outgoingGroupingFields, outgoingValuesFields );
}