Exemple #1
0
        private static void OutputWholeProgramReports(RapidTypeAnalysis rta, string reportingDirectory)
        {
            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedTypesFileName)) {
                foreach (var constructedType in rta.ConstructedTypes())
                {
                    outfile.WriteLine(constructedType);
                }
            }



            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedGenericParametersFileName)) {
                foreach (var constructedParameter in rta.ConstructedGenericParameters())
                {
                    if (constructedParameter is IGenericTypeParameter)
                    {
                        outfile.WriteLine("{0} from type {1}", constructedParameter, ((IGenericTypeParameter)constructedParameter).DefiningType);
                    }
                    else
                    {
                        outfile.WriteLine("{0} from method {1}", constructedParameter, ((IGenericMethodParameter)constructedParameter).DefiningMethod);
                    }
                }
            }

            ISet <IMethodDefinition> methodsRequiringReflectionSummary = rta.MethodsRequiringReflectionSummary();

            if (methodsRequiringReflectionSummary.Count() > 0)
            {
                Console.WriteLine("Found {0} methods requiring a reflection summary. List written in report directory to {1}",
                                  methodsRequiringReflectionSummary.Count(),
                                  ReflectionSummaryRequiredFileName);

                using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReflectionSummaryRequiredFileName)) {
                    foreach (var constructedType in methodsRequiringReflectionSummary)
                    {
                        outfile.WriteLine(constructedType);
                    }
                }
            }

            ISet <IReference> unresolvedReferences = rta.UnresolvedReferences();

            if (unresolvedReferences.Count() > 0)
            {
                Console.WriteLine("Found {0} unresolved references. List written in report directory to {1}",
                                  unresolvedReferences.Count(),
                                  UnresolvedReferencesFileName);

                using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + UnresolvedReferencesFileName)) {
                    foreach (var reference in unresolvedReferences)
                    {
                        outfile.WriteLine(reference);
                    }
                }
            }
        }
    private static void OutputAnalysisReasons(RapidTypeAnalysis rta, string reportingDirectory) {
      // Clearly we could do better here with some factoring out, etc.

      AnalysisReasons reasons = rta.GetAnalysisReasons();


      //Console.WriteLine("Calculating Best Reasons");

      //reasons.CalculateBestReasons();


      // Type reached reasons

      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedTypesReasonsFileName)) {
        foreach (var constructedType in rta.ConstructedTypes()) {
          outfile.WriteLine(constructedType);

          HashSet<TypeConstructedReason> constructedReasons = reasons.GetReasonsTypeWasConstructed(constructedType);

          if (constructedReasons.Count() == 0) {
            outfile.WriteLine("\t<UNKNOWN>");
          }
          else {
            foreach (TypeConstructedReason reason in constructedReasons) {
              outfile.WriteLine("\t" + reason);
            }
          }
        }
      }

      // Dispatch Reached Reasons (t-devinc: CLEAN THIS UP)

      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReachedNonVirtualDispatchReasonsFileName)) {
        foreach (var methodDispatchedAgainst in reasons.AllMethodsNonVirtuallyDispatchedAgainst()) {
          outfile.WriteLine(methodDispatchedAgainst);

          HashSet<DispatchReachedReason> dispatchReasons = reasons.GetReasonsNonVirtualDispatchWasReached(methodDispatchedAgainst);

          if (dispatchReasons.Count() == 0) {
            outfile.WriteLine("\t<UNKNOWN>");
          }
          else {
            foreach (DispatchReachedReason reason in dispatchReasons) {
              outfile.WriteLine("\t" + reason);
            }
          }
        }
      }


      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReachedVirtualDispatchReasonsFileName)) {
        foreach (var methodDispatchedAgainst in reasons.AllMethodsVirtuallyDispatchedAgainst()) {
          outfile.WriteLine(methodDispatchedAgainst);

          HashSet<DispatchReachedReason> dispatchReasons = reasons.GetReasonsVirtualDispatchWasReached(methodDispatchedAgainst);

          if (dispatchReasons.Count() == 0) {
            outfile.WriteLine("\t<UNKNOWN>");
          }
          else {
            foreach (DispatchReachedReason reason in dispatchReasons) {
              outfile.WriteLine("\t" + reason);
            }
          }
        }
      }

      // Method reached reasons


      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + MethodReachedReasonsFileName)) {
        foreach (var reachedMethod in rta.ReachableMethods()) {
          outfile.WriteLine(reachedMethod);

          HashSet<MethodReachedReason> methodReachedReason = reasons.GetReasonsMethodWasReached(reachedMethod);

          if (methodReachedReason.Count() == 0) {
            outfile.WriteLine("\t<UNKNOWN>");
          }
          else {
            foreach (MethodReachedReason reason in methodReachedReason) {
              outfile.WriteLine("\t" + reason);
            }
          }
        }
      }
    }
    private static void OutputWholeProgramReports(RapidTypeAnalysis rta, string reportingDirectory) {
      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedTypesFileName)) {
        foreach (var constructedType in rta.ConstructedTypes()) {
          outfile.WriteLine(constructedType);
        }
      }




      using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedGenericParametersFileName)) {
        foreach (var constructedParameter in rta.ConstructedGenericParameters()) {
          if (constructedParameter is IGenericTypeParameter) {
            outfile.WriteLine("{0} from type {1}", constructedParameter, ((IGenericTypeParameter)constructedParameter).DefiningType);
          }
          else {
            outfile.WriteLine("{0} from method {1}", constructedParameter, ((IGenericMethodParameter)constructedParameter).DefiningMethod);
          }
        }
      }

      ISet<IMethodDefinition> methodsRequiringReflectionSummary = rta.MethodsRequiringReflectionSummary();

      if (methodsRequiringReflectionSummary.Count() > 0) {
        Console.WriteLine("Found {0} methods requiring a reflection summary. List written in report directory to {1}",
           methodsRequiringReflectionSummary.Count(),
           ReflectionSummaryRequiredFileName);

        using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReflectionSummaryRequiredFileName)) {
          foreach (var constructedType in methodsRequiringReflectionSummary) {
            outfile.WriteLine(constructedType);
          }
        }
      }

      ISet<IReference> unresolvedReferences = rta.UnresolvedReferences();

      if (unresolvedReferences.Count() > 0) {
        Console.WriteLine("Found {0} unresolved references. List written in report directory to {1}",
           unresolvedReferences.Count(),
           UnresolvedReferencesFileName);

        using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + UnresolvedReferencesFileName)) {
          foreach (var reference in unresolvedReferences) {
            outfile.WriteLine(reference);
          }
        }
      }
    }
Exemple #4
0
        private static void OutputAnalysisReasons(RapidTypeAnalysis rta, string reportingDirectory)
        {
            // Clearly we could do better here with some factoring out, etc.

            AnalysisReasons reasons = rta.GetAnalysisReasons();


            //Console.WriteLine("Calculating Best Reasons");

            //reasons.CalculateBestReasons();


            // Type reached reasons

            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ConstructedTypesReasonsFileName)) {
                foreach (var constructedType in rta.ConstructedTypes())
                {
                    outfile.WriteLine(constructedType);

                    HashSet <TypeConstructedReason> constructedReasons = reasons.GetReasonsTypeWasConstructed(constructedType);

                    if (constructedReasons.Count() == 0)
                    {
                        outfile.WriteLine("\t<UNKNOWN>");
                    }
                    else
                    {
                        foreach (TypeConstructedReason reason in constructedReasons)
                        {
                            outfile.WriteLine("\t" + reason);
                        }
                    }
                }
            }

            // Dispatch Reached Reasons (t-devinc: CLEAN THIS UP)

            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReachedNonVirtualDispatchReasonsFileName)) {
                foreach (var methodDispatchedAgainst in reasons.AllMethodsNonVirtuallyDispatchedAgainst())
                {
                    outfile.WriteLine(methodDispatchedAgainst);

                    HashSet <DispatchReachedReason> dispatchReasons = reasons.GetReasonsNonVirtualDispatchWasReached(methodDispatchedAgainst);

                    if (dispatchReasons.Count() == 0)
                    {
                        outfile.WriteLine("\t<UNKNOWN>");
                    }
                    else
                    {
                        foreach (DispatchReachedReason reason in dispatchReasons)
                        {
                            outfile.WriteLine("\t" + reason);
                        }
                    }
                }
            }


            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + ReachedVirtualDispatchReasonsFileName)) {
                foreach (var methodDispatchedAgainst in reasons.AllMethodsVirtuallyDispatchedAgainst())
                {
                    outfile.WriteLine(methodDispatchedAgainst);

                    HashSet <DispatchReachedReason> dispatchReasons = reasons.GetReasonsVirtualDispatchWasReached(methodDispatchedAgainst);

                    if (dispatchReasons.Count() == 0)
                    {
                        outfile.WriteLine("\t<UNKNOWN>");
                    }
                    else
                    {
                        foreach (DispatchReachedReason reason in dispatchReasons)
                        {
                            outfile.WriteLine("\t" + reason);
                        }
                    }
                }
            }

            // Method reached reasons


            using (StreamWriter outfile = new StreamWriter(reportingDirectory + @"\" + MethodReachedReasonsFileName)) {
                foreach (var reachedMethod in rta.ReachableMethods())
                {
                    outfile.WriteLine(reachedMethod);

                    HashSet <MethodReachedReason> methodReachedReason = reasons.GetReasonsMethodWasReached(reachedMethod);

                    if (methodReachedReason.Count() == 0)
                    {
                        outfile.WriteLine("\t<UNKNOWN>");
                    }
                    else
                    {
                        foreach (MethodReachedReason reason in methodReachedReason)
                        {
                            outfile.WriteLine("\t" + reason);
                        }
                    }
                }
            }
        }