예제 #1
0
        public void AnalyzeSymbol(ISymbol symbol, Compilation compilation, Action <Diagnostic> addDiagnostic, CancellationToken cancellationToken)
        {
            //var tree = compilation.SyntaxTrees.ToList()[2];
            //var model = compilation.GetSemanticModel(tree);


            var typeSymbol = (INamedTypeSymbol)symbol;

            ((CSharpRecognitionContext)RecognitionContextManager.ctx).Compilations = new List <Compilation> {
                compilation
            };
            RecognitionContextManager.InitLogger();

            RecognitionContextManager.ctx.Init(RecognitionContextManager.GetLogger(), false);

            SingletonRecognizer fmrec = new SingletonRecognizer();

            fmrec.Context = RecognitionContextManager.ctx;

            foreach (var m in RecognitionContextManager.ctx.Types.Cast <CSharpNamedType>())
            {
                if (m.SourceSymbol == typeSymbol)
                {
                    if (fmrec.IsInstance(m))
                    {
                        var diagnostic = Diagnostic.Create(Rule, typeSymbol.Locations[0], typeSymbol.Name);
                        addDiagnostic(diagnostic);
                    }
                }
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            LoggerProvider lp = new LoggerProvider();


            var solution = @"EPPlus.sln";
            CSharpRecognitionContext ctx = new CSharpRecognitionContext("EPPlus");



            ProfilerService.Init(typeof(NullProfiler), (s, t) => { });

            using (ProfilerService.Current.Section("Total"))
            {
                using (ProfilerService.Current.Section("GetCompilations"))
                {
                    ctx.Compilations = CSharpModelBuilder.GetRecognitionContextInputFromSolution(solution);
                }
                using (ProfilerService.Current.Section("Init"))
                {
                    ctx.Init(lp);
                }
                SingletonRecognizer srec = new SingletonRecognizer();
                srec.Context = ctx;

                CompositeRecognizer crec = new CompositeRecognizer();
                crec.Context = ctx;

                //ProxyRecognizer prec = new ProxyRecognizer();
                //prec.Context = ctx;

                ChainOfResponsiblityRecognizer correc = new ChainOfResponsiblityRecognizer();
                correc.Context = ctx;

                FactoryMethodRecognizer frec = new FactoryMethodRecognizer();
                frec.Context = ctx;

                DecoratorRecognizer drec = new DecoratorRecognizer();
                drec.Context = ctx;

                MediatorRecognizer mmrec = new MediatorRecognizer();
                mmrec.Context = ctx;

                Console.Clear();

                using (var fres = File.CreateText("results.txt"))
                {
                    foreach (var item in ctx.Types)
                    {
                        try
                        {
                            if (mmrec.IsInstance(item))
                            {
                                Console.WriteLine("{0} is a mediator base", item.ToString());
                                fres.WriteLine(string.Format("{0} is a singleton", item.ToString()));
                            }
                        }
                        catch
                        { }

                        try
                        {
                            if (srec.IsInstance(item))
                            {
                                Console.WriteLine(string.Format("{0} is a singleton", item.ToString()));
                                fres.WriteLine(string.Format("{0} is a singleton", item.ToString()));
                            }
                        }
                        catch (Exception)
                        { }


                        try
                        {
                            if (crec.IsInstance(item))
                            {
                                Console.WriteLine(string.Format("{0} is a composite", item.ToString()));
                                fres.WriteLine(string.Format("{0} is a composite", item.ToString()));
                            }
                        }
                        catch (Exception)
                        {
                        }

                        //if (prec.isinstance(item))
                        //{
                        //    console.writeline(string.format("{0} is a proxy", item.tostring()));
                        //    fres.writeline(string.format("{0} is a proxy", item.tostring()));
                        //}
                        try
                        {
                            if (correc.IsInstance(item))
                            {
                                Console.WriteLine(string.Format("{0} is a chain of responsiblity base", item.ToString()));
                                fres.WriteLine(string.Format("{0} is a chain of responsiblity base", item.ToString()));
                            }
                        }
                        catch (Exception)
                        {
                        }

                        try
                        {
                            if (drec.IsInstance(item))
                            {
                                Console.WriteLine(string.Format("{0} is a decorator", item.ToString()));
                                fres.WriteLine(string.Format("{0} is a decorator", item.ToString()));
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }



                    foreach (var item in ctx.Types.SelectMany(t => t.Methods))
                    {
                        try
                        {
                            if (frec.IsInstance(item))
                            {
                                Console.WriteLine(string.Format("{0} is a factory method", item.ToString()));
                                fres.WriteLine(string.Format("{0} is a factory method", item.ToString()));
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
            }
            Console.ReadLine();
        }