private void AddDependences(CandidateInstance ci)
        {
            VariableCollector vc = new VariableCollector();

            vc.VisitExpr(ci.Expr);

            foreach (var v in vc.usedVars.Where(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc)))
            {
                VariableDescriptor vd =
                    varDepAnalyser.MakeDescriptor(ci.Proc, v);
                if (!variableDirectlyReferredToByCandidates.ContainsKey(vd))
                {
                    variableDirectlyReferredToByCandidates[vd] = new HashSet <string>();
                }
                variableDirectlyReferredToByCandidates[vd].Add(ci.Candidate);

                foreach (var w in varDepAnalyser.DependsOn(vd))
                {
                    candidateDependsOn[ci.Candidate].Add(w);
                }
            }
        }
        private void AddDependences(CandidateInstance ci)
        {
            VariableCollector vc = new VariableCollector();
              vc.VisitExpr(ci.Expr);

              foreach (var v in vc.usedVars.Where(Item => varDepAnalyser.VariableRelevantToAnalysis(Item, ci.Proc))) {
            VariableDescriptor vd =
              varDepAnalyser.MakeDescriptor(ci.Proc, v);
            if (!variableDirectlyReferredToByCandidates.ContainsKey(vd)) {
              variableDirectlyReferredToByCandidates[vd] = new HashSet<string>();
            }
            variableDirectlyReferredToByCandidates[vd].Add(ci.Candidate);

            foreach (var w in varDepAnalyser.DependsOn(vd)) {
              candidateDependsOn[ci.Candidate].Add(w);
            }
              }
        }