@SuppressWarnings("unchecked")
 @Override
 public Set<AbstractPath<V>> getTestRequirements() {
   Set<AbstractPath<V>> paths = new AllDuPathsCoverage<V>(graph).getTestRequirements();
   Map<String, List<List<Object>>> defusesByVariable =
       Activator.getDefault().getDefUsesController().getDefUsesByVariable();
   Set<AbstractPath<V>> result = new TreeSet<AbstractPath<V>>();
   for (String key : defusesByVariable.keySet()) {
     nodes.clear();
     List<List<Object>> variableDefUses = defusesByVariable.get(key);
     List<Object> defs = variableDefUses.get(0);
     List<Object> uses = variableDefUses.get(1);
     for (AbstractPath<V> path : paths)
       if (isTestRequirement(defs, uses, path))
         for (Object obj : defs) {
           Node<V> node;
           if (obj instanceof Edge<?>) node = ((Edge<V>) obj).getBeginNode();
           else node = ((Node<V>) obj);
           if (node == path.from() && !nodes.contains(node)) {
             nodes.add(node);
             result.add(path);
           }
         }
   }
   return result;
 }
 @SuppressWarnings("unchecked")
 private boolean isTestRequirement(List<Object> defs, List<Object> uses, AbstractPath<V> path) {
   for (Object def : defs) {
     Node<V> begin;
     if (def instanceof Edge<?>) begin = ((Edge<V>) def).getBeginNode();
     else begin = ((Node<V>) def);
     if (begin == path.from())
       for (Object use : uses) {
         Node<V> end;
         if (use instanceof Edge<?>) end = ((Edge<V>) use).getEndNode();
         else end = ((Node<V>) use);
         if (end == path.to()) return true;
       }
   }
   return false;
 }