예제 #1
0
        public IEnumerable <INamedTypeSymbol> GetSymbols(Compilation compilation)
        {
            var visitor = new NamedTypeSymbolVisitor();

            visitor.Visit(compilation.GlobalNamespace);
            return(visitor.AllTypeSymbols);
        }
예제 #2
0
        public List <INamedTypeSymbol> GetAllSymbols(Compilation compilation)
        {
            var visitor = new NamedTypeSymbolVisitor();

            visitor.Visit(compilation.GlobalNamespace);

            return(visitor.NamedTypeSymbols);
        }
예제 #3
0
        public void NoMatchNamedTypeSymbolTest()
        {
            // Arrange
            var helpers    = new TestHelpers();
            var pattern    = this.GetDesignPattern();
            var symbol     = helpers.GetMockClass(Constants.EmptyPublicClass);
            var visitor    = new NamedTypeSymbolVisitor();
            var candidates = pattern.Components.Cast <IBaseConfigModel>();

            // Act
            var results = visitor.Visit(symbol, candidates);

            // Assert
            Assert.IsNotNull(results);
            Assert.IsFalse(results.match);
            Assert.AreEqual(0, results.componentMatches.Count());
        }
예제 #4
0
        public void MatchNamedTypeSymbolTest()
        {
            // Arrange
            var helpers = new TestHelpers();
            var pattern = this.GetDesignPattern();
            var symbol  = helpers.GetMockClass(Constants.EmptyPrivateStaticClass);
            var visitor = new NamedTypeSymbolVisitor();

            var candidates = pattern.Components.Cast <IBaseConfigModel>();

            // Act
            var results = visitor.Visit(symbol, candidates);

            // Assert
            Assert.IsNotNull(results);
            Assert.IsTrue(results.match);
            Assert.AreEqual(1, results.componentMatches.Count());

            var componentMatch = results.componentMatches.Single();

            Assert.AreEqual("TestDesignpattern", componentMatch.Component.DesignPatternName);
            Assert.AreEqual("TestComponent", componentMatch.Component.Name);
        }
        /// <summary>
        /// Analyze the workspace
        /// </summary>
        /// <returns>The results of the analysis</returns>
        public Dictionary <Component, List <ComponentMatch> > AnalyzeSymbols()
        {
            var classVisitor = new NamedTypeSymbolVisitor();

            Parallel.ForEach(this.namespaceMembers, (symbol) =>
            {
                if (symbol != null)
                {
                    var componentCandidates      = configurationModel.Components.Cast <IBaseConfigModel>().ToList();
                    var(match, componentMatches) = classVisitor.Visit(symbol, componentCandidates);

                    if (match)
                    {
                        foreach (var componentMatch in componentMatches)
                        {
                            this.AddComponentMatch(componentMatch);
                        }
                    }
                }
            });

            return(this.componentMatches);
        }