Esempio n. 1
0
        /// <summary>
        ///     Überprüft, ob es eine Create-Klasse gibt, die eine Instanz des Builders erzeugen kann.
        /// </summary>
        /// <param name="context"></param>
        /// <param name="testProject"></param>
        /// <param name="builderSymbol"></param>
        /// <param name="builderCopSettings"></param>
        private void AnalyseFactory(SymbolAnalysisContext context, Project testProject, INamedTypeSymbol builderSymbol, BuilderCopSettings builderCopSettings)
        {
            ITypeSymbol createClassSymbol = testProject.GetBuilderFactorySymbol(builderCopSettings);

            if (createClassSymbol == null)
            {
                return;
            }

            foreach (IMethodSymbol method in createClassSymbol.GetMembers().OfType <IMethodSymbol>())
            {
                if (method.MethodKind == MethodKind.Ordinary && TypeHelper.AreTypesEqual(method.ReturnType, builderSymbol))
                {
                    return;
                }
            }

            /* Die Diagnostic geht auf die Entity-Klasse, weil dass die Klasse ist, die untersucht wird.
             * Wird die Location auf den Builder gelegt, fliegt eine Exception, da der Builder nicht Teil des Kompilats ist,
             * welches analysiert wird.*/
            context.ReportFactoryMethodForBuilderExpected(context.Symbol);
        }