public void AnalyzeSimpleSolution2(AnalysisStrategy strategy) { var callgraph = GenerateCallGraph(50); var syntax = GenerateCode(callgraph); var code = syntax.ToFullString(); Logger.Instance.Log("CallGraphGenerator", "AnalyzeSimpleSolution2", code); var solution = ReachingTypeAnalysis.Utils.CreateSolution(code); Logger.Instance.Log("CallGraphGenerator", "AnalyzeSimpleSolution2", solution.FilePath); var solAnalyzer = new SolutionAnalyzer(solution); solAnalyzer.Analyze(strategy); var resolved = solAnalyzer.GenerateCallGraph(); var resolvedNodes = resolved.GetNodes().Count(); var callgraphNodes = callgraph.GetNodes().Count(); Assert.IsTrue(resolvedNodes == callgraphNodes); var resolveEdgeCount = resolved.GetEdges().Count(); var callgraphEdgeCount = callgraph.GetEdges().Count(); foreach (var node in resolved.GetNodes()) { //var callees = callgraph.GetCallees(node.Name); var callees = callgraph.GetCallees(node.MethodName); var resolvedCallees = resolved.GetCallees(node); Assert.IsTrue(callees.Count() == resolvedCallees.Count(), "Mismatched callee counts for " + node); } Assert.IsTrue(resolved.GetEdges().Count() == callgraph.GetEdges().Count()); }
//public static CallGraph<IMethodSymbol,Location> BuildCallGraph(Solution solution) public static CallGraph<MethodDescriptor, LocationDescriptor> BuildCallGraph(Solution solution) { var analyzer = new SolutionAnalyzer(solution); analyzer.Analyze(); //analyzer.GenerateCallGraph(); var callgraph = analyzer.GenerateCallGraph(); Console.WriteLine("Reachable methods={0}", callgraph.GetReachableMethods().Count); return callgraph; }
private static bool CompareDispatchers(Solution solution) { var analyzerLocal = new SolutionAnalyzer(solution); var timerLocal = new Stopwatch(); timerLocal.Start(); // This dispacher doesn't parse the methods... analyzerLocal.Analyze(new SynchronousLocalDispatcher()); analyzerLocal.Analyze(AnalysisStrategy.ONDEMAND_SYNC); timerLocal.Stop(); var callgraphLocal = analyzerLocal.GenerateCallGraph(); Logger.Instance.Log("Program", "CompareDispatchers", "Local analysis time: {0}", timerLocal.Elapsed); var analyzerParallel = new SolutionAnalyzer(solution); var timerQueuing = new Stopwatch(); timerQueuing.Start(); analyzerParallel.Analyze(AnalysisStrategy.ONDEMAND_ASYNC); /* using (var queryingDispatcher = new QueueingDispatcher(solution)) { analyzerParallel.AnalyzeEntireSolution(); // block here waiting while (!queryingDispatcher.IsDoneProcessing) { Console.WriteLine("Queue {0}", queryingDispatcher.GetQueueCount()); Console.WriteLine("A total of {0} messages delivered", queryingDispatcher.MessageCount); System.Threading.Thread.Sleep(10000); } }*/ timerQueuing.Stop(); var callgraphQueuing = analyzerParallel.GenerateCallGraph(); Logger.Instance.Log("Program", "CompareDispatchers", "Queueing analysis time: {0}", timerLocal.Elapsed); Logger.Instance.Log("Program", "CompareDispatchers", "Analysis {0} {1} methods ", 1, callgraphLocal.GetReachableMethods().Count); Logger.Instance.Log("Program", "CompareDispatchers", "Analysis {0} {1} methods ", 2, callgraphQueuing.GetReachableMethods().Count); if (callgraphLocal.GetReachableMethods().Count != callgraphQueuing.GetReachableMethods().Count) { return false; } if (callgraphLocal.GetEdges().Count() != callgraphQueuing.GetEdges().Count()) { return false; } // seems like they are the same return true; }
private static CallGraph<MethodDescriptor, LocationDescriptor> GenerateCallGraph(Solution solution) { var analyzer = new SolutionAnalyzer(solution); var timerLocal = new Stopwatch(); timerLocal.Start(); // This dispacher doesn't parse the methods... analyzerLocal.Analyze(new SynchronousLocalDispatcher()); analyzer.Analyze(AnalysisStrategy.ONDEMAND_ORLEANS); timerLocal.Stop(); return analyzer.GenerateCallGraph(); }
private static void CompareExample(string source) { var solution = ReachingTypeAnalysis.Utils.CreateSolution(source); var analyzerLocal = new SolutionAnalyzer(solution); analyzerLocal.Analyze(AnalysisStrategy.ONDEMAND_SYNC); var callgraphLocal = analyzerLocal.GenerateCallGraph(); var analyzerParallel = new SolutionAnalyzer(solution); var queueingDispatcher = new QueueingDispatcher(); analyzerParallel.Analyze(AnalysisStrategy.ENTIRE_ASYNC); var callgraphQueuing = analyzerParallel.GenerateCallGraph(); var localReachable = callgraphLocal.GetReachableMethods().Count; var queuingReachable = callgraphQueuing.GetReachableMethods().Count; Assert.IsTrue(localReachable == queuingReachable); Assert.IsTrue(callgraphLocal.GetEdges().Count() == callgraphQueuing.GetEdges().Count()); }
private static void AnalyzeExample(string source, RunChecks checker, AnalysisStrategy strategy = AnalysisStrategy.NONE) { //var solution = ReachingTypeAnalysis.Utils.CreateSolution(source); //var solAnalyzer = new SolutionAnalyzer(solution); var solAnalyzer = new SolutionAnalyzer(source); solAnalyzer.Analyze(strategy); var callgraph = solAnalyzer.GenerateCallGraph(); checker(solAnalyzer, callgraph); }
private static void AnalizeSolution(Solution solution, RunChecks checker, AnalysisStrategy type = AnalysisStrategy.NONE) { var solAnalyzer = new SolutionAnalyzer(solution); solAnalyzer.Analyze(type); var callgraph = solAnalyzer.GenerateCallGraph(); checker(solAnalyzer, callgraph); }
internal MethodEntitiesCallsInfo(Solution solution) { this.solutionAnalyzer= new SolutionAnalyzer(solution); this.solutionAnalyzer.AnalyzeWithoutAppSettings(); }