WindowedEvaluationFunction implements EvaluationFunction<T> { @Override public Set<String> getChannelIdentifiers() { Set<String> results = new HashSet<>(); if(filterPrototype != null){ results.addAll(filterPrototype.getChannelIdentifiers()); } results.addAll(recordWindowPrototype.getChannelIdentifiers()); return results; } private  WindowedEvaluationFunction(
            RecordWindow recordWindow,
            WindowExtractor<T> extractor,
            EventFilter<T> filter
    ); static Builder<B> builder(); @Override void eval(EvaluationContext<T> context); @Override Set<String> getChannelIdentifiers();  }
@Test public void getChannelIdentifiers() { Collection<String> channels = function.getChannelIdentifiers(); assertTrue(channels.contains("flag")); assertTrue(channels.contains("test")); channels = clone.getChannelIdentifiers(); assertTrue(channels.contains("flag")); assertTrue(channels.contains("test")); }