private void AnalyzeCompilation(CompilationAnalysisContext context) { // Get the particular attributes I need to look for. var companyAttributeSymbol = KnownTypes.CompanyAttribute(context.Compilation); var copyrightAttributeSymbol = KnownTypes.CopyrightAttribute(context.Compilation); var descriptionAttributeSymbol = KnownTypes.DescriptionAttribute(context.Compilation); var titleAttributeSymbol = KnownTypes.TitleAttribute(context.Compilation); // Assume they are all not found. Boolean companyAttributeGood = false; Boolean copyrightAttributeGood = false; Boolean descriptionAttributeGood = false; Boolean titleAttributeGood = false; // Pound through each attribute in the assembly checking that the specific ones // are present and the parameters are not empty. foreach (var attribute in context.Compilation.Assembly.GetAttributes()) { if ((companyAttributeSymbol != null) && (attribute.AttributeClass.Equals(companyAttributeSymbol))) { companyAttributeGood = CheckAttributeParameter(attribute); continue; } if ((copyrightAttributeSymbol != null) && (attribute.AttributeClass.Equals(copyrightAttributeSymbol))) { copyrightAttributeGood = CheckAttributeParameter(attribute); continue; } if ((descriptionAttributeSymbol != null) && (attribute.AttributeClass.Equals(descriptionAttributeSymbol))) { descriptionAttributeGood = CheckAttributeParameter(attribute); continue; } if ((titleAttributeSymbol != null) && (attribute.AttributeClass.Equals(titleAttributeSymbol))) { titleAttributeGood = CheckAttributeParameter(attribute); continue; } } // If any of the assembly wide attributes are missing or empty, trigger a warning. if (!companyAttributeGood) { context.ReportDiagnostic(Diagnostic.Create(companyRule, Location.None)); } if (!copyrightAttributeGood) { context.ReportDiagnostic(Diagnostic.Create(copyrightRule, Location.None)); } if (!descriptionAttributeGood) { context.ReportDiagnostic(Diagnostic.Create(descriptionRule, Location.None)); } if (!titleAttributeGood) { context.ReportDiagnostic(Diagnostic.Create(titleRule, Location.None)); } }