private static StreamTypeService GetStreamTypeService( string engineURI, int statementId, EventAdapterService eventAdapterService, IDictionary <string, Pair <EventType, string> > taggedEventTypes, IDictionary <string, Pair <EventType, string> > arrayEventTypes, IEnumerable <int> subexpressionIdStack, string objectType, StatementContext statementContext) { var filterTypes = new LinkedHashMap <string, Pair <EventType, string> >(); filterTypes.PutAll(taggedEventTypes); // handle array tags (match-until clause) if (arrayEventTypes != null) { var patternSubexEventType = GetPatternSubexEventType(statementId, objectType, subexpressionIdStack); var arrayTagCompositeEventType = eventAdapterService.CreateSemiAnonymousMapType( patternSubexEventType, new Dictionary <string, Pair <EventType, string> >(), arrayEventTypes, false); statementContext.StatementSemiAnonymousTypeRegistry.Register(arrayTagCompositeEventType); foreach (var entry in arrayEventTypes) { var tag = entry.Key; if (!filterTypes.ContainsKey(tag)) { var pair = new Pair <EventType, string>(arrayTagCompositeEventType, tag); filterTypes.Put(tag, pair); } } } return(new StreamTypeServiceImpl(filterTypes, engineURI, true, false)); }