@Override
	public void calculateIncoming(Node node, Set<Expression> incoming,
			Map<Node, Set<Expression>> outgoing, ControlflowGraph graph) {
		
		State mergedState = new State();
		for(Node predecessor : graph.getParents(node)){
			Set<Expression> predecessorOutgoing = outgoing.get(predecessor);
			if(predecessorOutgoing.size() != 1)  throw new RuntimeException("More than one expression");
			State predecessorState = new State((StateExpression) predecessorOutgoing.toArray()[0]);
			
			Iterator<Variable> varIt = predecessorState.variableIterator();
			while(varIt.hasNext()){
				Variable variable = varIt.next();
				NumberTop nt;
				if(mergedState.containsVariable(variable) && mergedState.getValue(variable) != predecessorState.getValue(variable)){
					nt = NumberTop.top();
				} else {
					nt = predecessorState.getValue(variable);
				}
				mergedState.setVariable(variable, nt);
			}
		}
		
		incoming.clear();
		incoming.add(mergedState.createStateExpression());
	}