test_class.file: dexter-core/src/test/java/it/cnr/isti/hpc/dexter/spot/cleanpipe/PipeTest.java
test_class.identifier: PipeTest
test_case.body: @Test
  	public void pipe2() {
  		Pipe<String> pipe = new Pipe<String>(new AppendOne());
  		pipe = new Pipe<String>(pipe, new AppendTwo());
  		List<String> result = pipe.process("");
  		assertEquals("12",result.get(0));
  		
  	}
test_case.class_method_signature: PipeTest.pipe2()
test_case.full_signature: @Test public void pipe2()
test_case.identifier: pipe2
test_case.invocations: process assertEquals get
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void pipe2()
focal_class.declarator: next
focal_class.modifier: private
focal_class.original_string: private Pipe<T> next;
focal_class.type: Pipe<T>
focal_class.var_name: next
focal_class.declarator: output
focal_class.modifier: public
focal_class.original_string: public ArrayList<T> output;
focal_class.type: ArrayList<T>
focal_class.var_name: output
focal_class.declarator: fun
focal_class.modifier: private
focal_class.original_string: private Function<T> fun;
focal_class.type: Function<T>
focal_class.var_name: fun
focal_class.declarator: head = null
focal_class.modifier: private
focal_class.original_string: private Pipe<T> head = null;
focal_class.type: Pipe<T>
focal_class.var_name: head
focal_class.declarator: logger = LoggerFactory.getLogger(Pipe.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger logger = LoggerFactory.getLogger(Pipe.class);
focal_class.type: Logger
focal_class.var_name: logger
focal_class.declarator: collector
focal_class.modifier: private
focal_class.original_string: private OutputCollector collector;
focal_class.type: OutputCollector
focal_class.var_name: collector
focal_class.file: dexter-core/src/main/java/it/cnr/isti/hpc/dexter/spot/cleanpipe/Pipe.java
focal_class.identifier: Pipe
focal_class.class_method_signature: Pipe.Pipe(Function<T> fun)
focal_class.full_signature: public  Pipe(Function<T> fun)
focal_class.identifier: Pipe
focal_class.modifiers: public
focal_class.parameters: (Function<T> fun)
focal_class.signature:  Pipe(Function<T> fun)
focal_class.class_method_signature: Pipe.Pipe(Pipe<T> previous, Function<T> fun)
focal_class.full_signature: public  Pipe(Pipe<T> previous, Function<T> fun)
focal_class.identifier: Pipe
focal_class.modifiers: public
focal_class.parameters: (Pipe<T> previous, Function<T> fun)
focal_class.signature:  Pipe(Pipe<T> previous, Function<T> fun)
focal_class.class_method_signature: Pipe.getHead()
focal_class.full_signature: private Pipe<T> getHead()
focal_class.identifier: getHead
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Pipe<T>
focal_class.signature: Pipe<T> getHead()
focal_class.class_method_signature: Pipe.getNext()
focal_class.full_signature: private Pipe<T> getNext()
focal_class.identifier: getNext
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Pipe<T>
focal_class.signature: Pipe<T> getNext()
focal_class.class_method_signature: Pipe.getOutput()
focal_class.full_signature: private Iterator<T> getOutput()
focal_class.identifier: getOutput
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: Iterator<T>
focal_class.signature: Iterator<T> getOutput()
focal_class.class_method_signature: Pipe.clearOutput()
focal_class.full_signature: private void clearOutput()
focal_class.identifier: clearOutput
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void clearOutput()
focal_class.class_method_signature: Pipe.getResults()
focal_class.full_signature: protected List<T> getResults()
focal_class.identifier: getResults
focal_class.modifiers: protected
focal_class.parameters: ()
focal_class.return: List<T>
focal_class.signature: List<T> getResults()
focal_class.class_method_signature: Pipe.process(T elem)
focal_class.full_signature: public List<T> process(T elem)
focal_class.identifier: process
focal_class.modifiers: public
focal_class.parameters: (T elem)
focal_class.return: List<T>
focal_class.signature: List<T> process(T elem)
focal_class.class_method_signature: Pipe.pushResult(T elem)
focal_class.full_signature: protected void pushResult(T elem)
focal_class.identifier: pushResult
focal_class.modifiers: protected
focal_class.parameters: (T elem)
focal_class.return: void
focal_class.signature: void pushResult(T elem)
focal_method.body: public List<T> process(T elem) {
  		Pipe<T> p = head;
  		List<T> elems = new ArrayList<T>();
  		p.fun.eval(elem, p.collector);
  		while (p.getNext() != null) {
  			// logger.info("pipe {}",p.fun.getClass());
  			Iterator<T> iter = p.getOutput();
  			if (iter == null) {
  				logger.warn("iter is null");
  			}
  			elems.clear();
  			while (iter.hasNext()) {
  				T obj = iter.next();
  				if (obj == null) {
  					// FIXME understand why sometimes this is null, concurrency?
  					logger.warn("iter returned null object");
  				}
  				if (obj != null) {
  					elems.add(obj);
  				}
  			}
  			// logger.info("output -> {}",elems);
  			p.clearOutput();
  
  			p = p.getNext();
  			for (T t : elems) {
  				p.fun.eval(t, p.collector);
  
  			}
  		}
  		// logger.info("pipe {}",p.fun.getClass());
  		// logger.info("f output -> {}",output);
  
  		return getResults();
  	}
focal_method.class_method_signature: Pipe.process(T elem)
focal_method.full_signature: public List<T> process(T elem)
focal_method.identifier: process
focal_method.invocations: eval getNext getOutput warn clear hasNext next warn add clearOutput getNext eval getResults
focal_method.modifiers: public
focal_method.parameters: (T elem)
focal_method.return: List<T>
focal_method.signature: List<T> process(T elem)