Program: 28827
Project: 28827
Buggy source:
private static InnerStateRuntime parse(StateElement stateElement,Map<String,AbstractDefinition> streamDefinitionMap,Map<String,AbstractDefinition> tableDefinitionMap,Map<String,AbstractDefinition> windowDefinitionMap,Map<String,Table> tableMap,MetaStateEvent metaStateEvent,SiddhiAppContext siddhiAppContext,List<VariableExpressionExecutor> variableExpressionExecutors,Map<String,ProcessStreamReceiver> processStreamReceiverMap,StreamPreStateProcessor streamPreStateProcessor,StreamPostStateProcessor streamPostStateProcessor,StateInputStream.Type stateType,ArrayList<Map.Entry<Long,Set<Integer>>> withinStates,LatencyTracker latencyTracker,String queryName){
  if (stateElement instanceof StreamStateElement) {
    BasicSingleInputStream basicSingleInputStream=((StreamStateElement)stateElement).getBasicSingleInputStream();
    SingleStreamRuntime singleStreamRuntime=SingleInputStreamParser.parseInputStream(basicSingleInputStream,siddhiAppContext,variableExpressionExecutors,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,processStreamReceiverMap.get(basicSingleInputStream.getUniqueStreamIds().get(0)),false,false,queryName);
    int stateIndex=metaStateEvent.getStreamEventCount() - 1;
    if (streamPreStateProcessor == null) {
      if (stateElement.getWithin() != null) {
        Set<Integer> withinStateset=new HashSet<Integer>();
        withinStateset.add(SiddhiConstants.ANY);
        withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
      }
      streamPreStateProcessor=new StreamPreStateProcessor(stateType,clonewithinStates(withinStates));
      streamPreStateProcessor.init(siddhiAppContext,queryName);
      if (stateElement.getWithin() != null) {
        withinStates.remove(0);
      }
    }
    streamPreStateProcessor.setStateId(stateIndex);
    streamPreStateProcessor.setNextProcessor(singleStreamRuntime.getProcessorChain());
    singleStreamRuntime.setProcessorChain(streamPreStateProcessor);
    if (streamPostStateProcessor == null) {
      streamPostStateProcessor=new StreamPostStateProcessor();
    }
    streamPostStateProcessor.setStateId(stateIndex);
    singleStreamRuntime.getProcessorChain().setToLast(streamPostStateProcessor);
    streamPostStateProcessor.setThisStatePreProcessor(streamPreStateProcessor);
    streamPreStateProcessor.setThisStatePostProcessor(streamPostStateProcessor);
    streamPreStateProcessor.setThisLastProcessor(streamPostStateProcessor);
    StreamInnerStateRuntime innerStateRuntime=new StreamInnerStateRuntime(stateType);
    innerStateRuntime.setFirstProcessor(streamPreStateProcessor);
    innerStateRuntime.setLastProcessor(streamPostStateProcessor);
    innerStateRuntime.addStreamRuntime(singleStreamRuntime);
    return innerStateRuntime;
  }
 else   if (stateElement instanceof NextStateElement) {
    StateElement currentElement=((NextStateElement)stateElement).getStateElement();
    InnerStateRuntime currentInnerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateSet=new HashSet<Integer>();
      withinStateSet.add(currentInnerStateRuntime.getFirstProcessor().getStateId());
      withinStateSet.add(currentInnerStateRuntime.getLastProcessor().getStateId());
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateSet));
    }
    StateElement nextElement=((NextStateElement)stateElement).getNextStateElement();
    InnerStateRuntime nextInnerStateRuntime=parse(nextElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    currentInnerStateRuntime.getLastProcessor().setNextStatePreProcessor(nextInnerStateRuntime.getFirstProcessor());
    NextInnerStateRuntime nextStateRuntime=new NextInnerStateRuntime(currentInnerStateRuntime,nextInnerStateRuntime,stateType);
    nextStateRuntime.setFirstProcessor(currentInnerStateRuntime.getFirstProcessor());
    nextStateRuntime.setLastProcessor(nextInnerStateRuntime.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : currentInnerStateRuntime.getSingleStreamRuntimeList()) {
      nextStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    for (    SingleStreamRuntime singleStreamRuntime : nextInnerStateRuntime.getSingleStreamRuntimeList()) {
      nextStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    return nextStateRuntime;
  }
 else   if (stateElement instanceof EveryStateElement) {
    StateElement currentElement=((EveryStateElement)stateElement).getStateElement();
    InnerStateRuntime innerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    EveryInnerStateRuntime everyInnerStateRuntime=new EveryInnerStateRuntime(innerStateRuntime,stateType);
    everyInnerStateRuntime.setFirstProcessor(innerStateRuntime.getFirstProcessor());
    everyInnerStateRuntime.setLastProcessor(innerStateRuntime.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime.getSingleStreamRuntimeList()) {
      everyInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    if (stateType == StateInputStream.Type.PATTERN) {
      everyInnerStateRuntime.getLastProcessor().setNextEveryStatePerProcessor(everyInnerStateRuntime.getFirstProcessor());
    }
    return everyInnerStateRuntime;
  }
 else   if (stateElement instanceof LogicalStateElement) {
    LogicalStateElement.Type type=((LogicalStateElement)stateElement).getType();
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateset=new HashSet<Integer>();
      withinStateset.add(SiddhiConstants.ANY);
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
    }
    LogicalPreStateProcessor logicalPreStateProcessor1=new LogicalPreStateProcessor(type,stateType,withinStates);
    logicalPreStateProcessor1.init(siddhiAppContext,queryName);
    LogicalPostStateProcessor logicalPostStateProcessor1=new LogicalPostStateProcessor(type);
    LogicalPreStateProcessor logicalPreStateProcessor2=new LogicalPreStateProcessor(type,stateType,withinStates);
    logicalPreStateProcessor2.init(siddhiAppContext,queryName);
    LogicalPostStateProcessor logicalPostStateProcessor2=new LogicalPostStateProcessor(type);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    logicalPostStateProcessor1.setPartnerPreStateProcessor(logicalPreStateProcessor2);
    logicalPostStateProcessor2.setPartnerPreStateProcessor(logicalPreStateProcessor1);
    logicalPostStateProcessor1.setPartnerPostStateProcessor(logicalPostStateProcessor2);
    logicalPostStateProcessor2.setPartnerPostStateProcessor(logicalPostStateProcessor1);
    logicalPreStateProcessor1.setPartnerStatePreProcessor(logicalPreStateProcessor2);
    logicalPreStateProcessor2.setPartnerStatePreProcessor(logicalPreStateProcessor1);
    StateElement stateElement2=((LogicalStateElement)stateElement).getStreamStateElement2();
    InnerStateRuntime innerStateRuntime2=parse(stateElement2,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,logicalPreStateProcessor2,logicalPostStateProcessor2,stateType,withinStates,latencyTracker,queryName);
    StateElement stateElement1=((LogicalStateElement)stateElement).getStreamStateElement1();
    InnerStateRuntime innerStateRuntime1=parse(stateElement1,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,logicalPreStateProcessor1,logicalPostStateProcessor1,stateType,withinStates,latencyTracker,queryName);
    LogicalInnerStateRuntime logicalInnerStateRuntime=new LogicalInnerStateRuntime(innerStateRuntime1,innerStateRuntime2,stateType);
    logicalInnerStateRuntime.setFirstProcessor(innerStateRuntime1.getFirstProcessor());
    logicalInnerStateRuntime.setLastProcessor(innerStateRuntime2.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime2.getSingleStreamRuntimeList()) {
      logicalInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime1.getSingleStreamRuntimeList()) {
      logicalInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    return logicalInnerStateRuntime;
  }
 else   if (stateElement instanceof CountStateElement) {
    int minCount=((CountStateElement)stateElement).getMinCount();
    int maxCount=((CountStateElement)stateElement).getMaxCount();
    if (minCount == SiddhiConstants.ANY) {
      minCount=0;
    }
    if (maxCount == SiddhiConstants.ANY) {
      maxCount=Integer.MAX_VALUE;
    }
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateset=new HashSet<Integer>();
      withinStateset.add(SiddhiConstants.ANY);
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
    }
    CountPreStateProcessor countPreStateProcessor=new CountPreStateProcessor(minCount,maxCount,stateType,withinStates);
    countPreStateProcessor.init(siddhiAppContext,queryName);
    CountPostStateProcessor countPostStateProcessor=new CountPostStateProcessor(minCount,maxCount);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    countPreStateProcessor.setCountPostStateProcessor(countPostStateProcessor);
    StateElement currentElement=((CountStateElement)stateElement).getStreamStateElement();
    InnerStateRuntime innerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,countPreStateProcessor,countPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    return new CountInnerStateRuntime((StreamInnerStateRuntime)innerStateRuntime);
  }
 else {
    throw new OperationNotSupportedException();
  }
}

Fixed version (ground truth):
private static InnerStateRuntime parse(StateElement stateElement,Map<String,AbstractDefinition> streamDefinitionMap,Map<String,AbstractDefinition> tableDefinitionMap,Map<String,AbstractDefinition> windowDefinitionMap,Map<String,Table> tableMap,MetaStateEvent metaStateEvent,SiddhiAppContext siddhiAppContext,List<VariableExpressionExecutor> variableExpressionExecutors,Map<String,ProcessStreamReceiver> processStreamReceiverMap,StreamPreStateProcessor streamPreStateProcessor,StreamPostStateProcessor streamPostStateProcessor,StateInputStream.Type stateType,ArrayList<Map.Entry<Long,Set<Integer>>> withinStates,LatencyTracker latencyTracker,String queryName){
  if (stateElement instanceof StreamStateElement) {
    BasicSingleInputStream basicSingleInputStream=((StreamStateElement)stateElement).getBasicSingleInputStream();
    SingleStreamRuntime singleStreamRuntime=SingleInputStreamParser.parseInputStream(basicSingleInputStream,siddhiAppContext,variableExpressionExecutors,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,processStreamReceiverMap.get(basicSingleInputStream.getUniqueStreamIds().get(0)),false,false,queryName);
    int stateIndex=metaStateEvent.getStreamEventCount() - 1;
    if (streamPreStateProcessor == null) {
      if (stateElement.getWithin() != null) {
        Set<Integer> withinStateset=new HashSet<Integer>();
        withinStateset.add(SiddhiConstants.ANY);
        withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
      }
      streamPreStateProcessor=new StreamPreStateProcessor(stateType,clonewithinStates(withinStates));
      streamPreStateProcessor.init(siddhiAppContext,queryName);
      if (stateElement.getWithin() != null) {
        withinStates.remove(0);
      }
    }
    streamPreStateProcessor.setStateId(stateIndex);
    streamPreStateProcessor.setNextProcessor(singleStreamRuntime.getProcessorChain());
    singleStreamRuntime.setProcessorChain(streamPreStateProcessor);
    if (streamPostStateProcessor == null) {
      streamPostStateProcessor=new StreamPostStateProcessor();
    }
    streamPostStateProcessor.setStateId(stateIndex);
    singleStreamRuntime.getProcessorChain().setToLast(streamPostStateProcessor);
    streamPostStateProcessor.setThisStatePreProcessor(streamPreStateProcessor);
    streamPreStateProcessor.setThisStatePostProcessor(streamPostStateProcessor);
    streamPreStateProcessor.setThisLastProcessor(streamPostStateProcessor);
    StreamInnerStateRuntime innerStateRuntime=new StreamInnerStateRuntime(stateType);
    innerStateRuntime.setFirstProcessor(streamPreStateProcessor);
    innerStateRuntime.setLastProcessor(streamPostStateProcessor);
    innerStateRuntime.addStreamRuntime(singleStreamRuntime);
    return innerStateRuntime;
  }
 else   if (stateElement instanceof NextStateElement) {
    StateElement currentElement=((NextStateElement)stateElement).getStateElement();
    InnerStateRuntime currentInnerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateSet=new HashSet<Integer>();
      withinStateSet.add(currentInnerStateRuntime.getFirstProcessor().getStateId());
      withinStateSet.add(currentInnerStateRuntime.getLastProcessor().getStateId());
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateSet));
    }
    StateElement nextElement=((NextStateElement)stateElement).getNextStateElement();
    InnerStateRuntime nextInnerStateRuntime=parse(nextElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    currentInnerStateRuntime.getLastProcessor().setNextStatePreProcessor(nextInnerStateRuntime.getFirstProcessor());
    NextInnerStateRuntime nextStateRuntime=new NextInnerStateRuntime(currentInnerStateRuntime,nextInnerStateRuntime,stateType);
    nextStateRuntime.setFirstProcessor(currentInnerStateRuntime.getFirstProcessor());
    nextStateRuntime.setLastProcessor(nextInnerStateRuntime.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : currentInnerStateRuntime.getSingleStreamRuntimeList()) {
      nextStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    for (    SingleStreamRuntime singleStreamRuntime : nextInnerStateRuntime.getSingleStreamRuntimeList()) {
      nextStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    return nextStateRuntime;
  }
 else   if (stateElement instanceof EveryStateElement) {
    StateElement currentElement=((EveryStateElement)stateElement).getStateElement();
    InnerStateRuntime innerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,streamPreStateProcessor,streamPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    EveryInnerStateRuntime everyInnerStateRuntime=new EveryInnerStateRuntime(innerStateRuntime,stateType);
    everyInnerStateRuntime.setFirstProcessor(innerStateRuntime.getFirstProcessor());
    everyInnerStateRuntime.setLastProcessor(innerStateRuntime.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime.getSingleStreamRuntimeList()) {
      everyInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    everyInnerStateRuntime.getLastProcessor().setNextEveryStatePerProcessor(everyInnerStateRuntime.getFirstProcessor());
    return everyInnerStateRuntime;
  }
 else   if (stateElement instanceof LogicalStateElement) {
    LogicalStateElement.Type type=((LogicalStateElement)stateElement).getType();
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateset=new HashSet<Integer>();
      withinStateset.add(SiddhiConstants.ANY);
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
    }
    LogicalPreStateProcessor logicalPreStateProcessor1=new LogicalPreStateProcessor(type,stateType,clonewithinStates(withinStates));
    logicalPreStateProcessor1.init(siddhiAppContext,queryName);
    LogicalPostStateProcessor logicalPostStateProcessor1=new LogicalPostStateProcessor(type);
    LogicalPreStateProcessor logicalPreStateProcessor2=new LogicalPreStateProcessor(type,stateType,clonewithinStates(withinStates));
    logicalPreStateProcessor2.init(siddhiAppContext,queryName);
    LogicalPostStateProcessor logicalPostStateProcessor2=new LogicalPostStateProcessor(type);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    logicalPostStateProcessor1.setPartnerPreStateProcessor(logicalPreStateProcessor2);
    logicalPostStateProcessor2.setPartnerPreStateProcessor(logicalPreStateProcessor1);
    logicalPostStateProcessor1.setPartnerPostStateProcessor(logicalPostStateProcessor2);
    logicalPostStateProcessor2.setPartnerPostStateProcessor(logicalPostStateProcessor1);
    logicalPreStateProcessor1.setPartnerStatePreProcessor(logicalPreStateProcessor2);
    logicalPreStateProcessor2.setPartnerStatePreProcessor(logicalPreStateProcessor1);
    StateElement stateElement2=((LogicalStateElement)stateElement).getStreamStateElement2();
    InnerStateRuntime innerStateRuntime2=parse(stateElement2,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,logicalPreStateProcessor2,logicalPostStateProcessor2,stateType,withinStates,latencyTracker,queryName);
    StateElement stateElement1=((LogicalStateElement)stateElement).getStreamStateElement1();
    InnerStateRuntime innerStateRuntime1=parse(stateElement1,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,logicalPreStateProcessor1,logicalPostStateProcessor1,stateType,withinStates,latencyTracker,queryName);
    LogicalInnerStateRuntime logicalInnerStateRuntime=new LogicalInnerStateRuntime(innerStateRuntime1,innerStateRuntime2,stateType);
    logicalInnerStateRuntime.setFirstProcessor(innerStateRuntime1.getFirstProcessor());
    logicalInnerStateRuntime.setLastProcessor(innerStateRuntime2.getLastProcessor());
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime2.getSingleStreamRuntimeList()) {
      logicalInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    for (    SingleStreamRuntime singleStreamRuntime : innerStateRuntime1.getSingleStreamRuntimeList()) {
      logicalInnerStateRuntime.addStreamRuntime(singleStreamRuntime);
    }
    return logicalInnerStateRuntime;
  }
 else   if (stateElement instanceof CountStateElement) {
    int minCount=((CountStateElement)stateElement).getMinCount();
    int maxCount=((CountStateElement)stateElement).getMaxCount();
    if (minCount == SiddhiConstants.ANY) {
      minCount=0;
    }
    if (maxCount == SiddhiConstants.ANY) {
      maxCount=Integer.MAX_VALUE;
    }
    if (stateElement.getWithin() != null) {
      Set<Integer> withinStateset=new HashSet<Integer>();
      withinStateset.add(SiddhiConstants.ANY);
      withinStates.add(0,new AbstractMap.SimpleEntry<Long,Set<Integer>>(stateElement.getWithin().getValue(),withinStateset));
    }
    CountPreStateProcessor countPreStateProcessor=new CountPreStateProcessor(minCount,maxCount,stateType,withinStates);
    countPreStateProcessor.init(siddhiAppContext,queryName);
    CountPostStateProcessor countPostStateProcessor=new CountPostStateProcessor(minCount,maxCount);
    if (stateElement.getWithin() != null) {
      withinStates.remove(0);
    }
    countPreStateProcessor.setCountPostStateProcessor(countPostStateProcessor);
    StateElement currentElement=((CountStateElement)stateElement).getStreamStateElement();
    InnerStateRuntime innerStateRuntime=parse(currentElement,streamDefinitionMap,tableDefinitionMap,windowDefinitionMap,tableMap,metaStateEvent,siddhiAppContext,variableExpressionExecutors,processStreamReceiverMap,countPreStateProcessor,countPostStateProcessor,stateType,withinStates,latencyTracker,queryName);
    return new CountInnerStateRuntime((StreamInnerStateRuntime)innerStateRuntime);
  }
 else {
    throw new OperationNotSupportedException();
  }
}