private void BindCallerReadEffects(PointsToAndWriteEffects calleePTWE, Label lb, InterProcMapping ipm)
 {
     foreach (AField af in calleePTWE.readEffects)
     {
         // Get the related caller's nodes
         foreach (IPTAnalysisNode n in ipm.RelatedExtended(af.Src))
         {
             if (IsVisibleEffect(n, af.Field))
             {
                 readEffects.AddEffect(n, af.Field, lb);
             }
             allReadEffects.AddEffect(n, af.Field, lb);
         }
     }
 }
        /* This was related with the old way of dealing with non analyzable calls
        private void RegisterModifiesInReachableObjects(Variable v, Label lb, bool confined)
        {
            // Use Filters for !owned!!!!!!
            Nodes reachables = PointsToGraph.NodesForwardReachableFromVariable(v, confined);
            foreach (IPTAnalysisNode n in reachables)
            {
                //if (n is LValueNode || n.IsGlobal)
                if(n.IsObjectAbstraction)
                {
                    RegisterWriteEffect(n, PTGraph.allFields, lb,false);    
                }
            }
        }
        private void RegisterReadInReachableObjects(Variable v, Label lb, bool confined)
        {
            // Use Filters for !owned!!!!!!
            Nodes reachables = PointsToGraph.NodesForwardReachableFromVariable(v,confined);
            foreach (IPTAnalysisNode n in reachables)
            {
                // Add Filters!!!!!!
                //if (n is LValueNode || n.IsGlobal)
                if (n.IsObjectAbstraction)
                {
                    RegisterReadEffect(n, PTGraph.allFields, lb);
                }
            }
        }
        */

        /// <summary>
        /// Apply the inter-procedural analysis, binding information from caller and callee
        /// </summary>
        /// <param name="vr"></param>
        /// <param name="callee"></param>
        /// <param name="receiver"></param>
        /// <param name="arguments"></param>
        /// <param name="calleePTWE"></param>
        /// <param name="lb"></param>
        /// 
        public override void ApplyAnalyzableCall(Variable vr, Method callee, Variable receiver, 
            ExpressionList arguments, PointsToState calleecState, Label lb, out InterProcMapping ipm)
        {
            
            if (this.method.FullName.Contains("Count"))
            {
                if (callee.Name.Name.Contains("Reverse"))
                { }
                if (callee.Name.Name.Contains("Dispose"))
                { }
            }
            if (callee.Name.Name.Contains("MoveNext2")) 
              { }

            base.ApplyAnalyzableCall(vr, callee, receiver, arguments, calleecState, lb, out ipm);
            PointsToAndWriteEffects calleePTWE = (PointsToAndWriteEffects)calleecState;

            // Join the set of non-analyzable calls
            joinCalledMethod(callToNonAnalyzableMethods, calleePTWE.callToNonAnalyzableMethods);
  
            
            // For each write effect in the calee
            foreach (AField af in calleePTWE.writeEffects)
            {
                
                // Get the related caller's nodes
                foreach (IPTAnalysisNode n in ipm.RelatedExtended(af.Src))
                {

                    if (IsVisibleEffect(n, af.Field))
                    {
                        writeEffects.AddEffect(n, af.Field, lb);
                    }
                    allWriteEffects.AddEffect(n, af.Field, lb);
                }
            }
            BindCallerReadEffects(calleePTWE, lb, ipm);
        }