コード例 #1
0
        private string?GenerateImplementation(
            bool isInput,
            GeneratorExecutionContext context,
            InterfaceDeclarationSyntax syntax,
            INamedTypeSymbol symbol)
        {
            if (!syntax.Modifiers.Any(Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword))
            {
                // No partial keyword, error to the user
                context.ReportDiagnostic(Diagnostic.Create(
                                             Diagnostics.QueryGroupInterfaceMustBePartial,
                                             syntax.GetLocation(),
                                             syntax.Identifier.ValueText));
                return(null);
            }
            if (!SymbolEqualityComparer.Default.Equals(symbol.ContainingSymbol, symbol.ContainingNamespace))
            {
                // Non-top-level declaration, error to the user
                context.ReportDiagnostic(Diagnostic.Create(
                                             Diagnostics.QueryGroupInterfaceMustBeTopLevel,
                                             syntax.GetLocation(),
                                             syntax.Identifier.ValueText));
                return(null);
            }
            // It's a proper interface, generate source code

            var namespaceName     = symbol.ContainingNamespace.ToDisplayString();
            var interfaceName     = symbol.Name;
            var accessibility     = AccessibilityToString(symbol.DeclaredAccessibility);
            var baseInterfacePart = isInput ? $": {TypeNames.IInputQueryGroup}" : string.Empty;
            var contents          = isInput
                ? GenerateInputQueryContents(context, symbol)
                : GenerateQueryContents(context, symbol);

            return($@"
namespace {namespaceName}
{{
    {accessibility} partial interface {interfaceName} {baseInterfacePart}
    {{
        {contents}
    }}
}}");
        }
コード例 #2
0
        public override void VisitInterfaceDeclaration(InterfaceDeclarationSyntax node)
        {
            AddEntry(node.Identifier.Text, node.GetLocation());

            base.VisitInterfaceDeclaration(node);
        }
コード例 #3
0
 public static CreateMemoizeInterfaceContext CreateFromSyntax(InterfaceDeclarationSyntax interfaceWithAttribute, ITypeSymbol interfaceType, SemanticModel interfaceModel, AttributeData createMemoizedAttributeData)
 {
     return(new CreateMemoizeInterfaceContext(interfaceWithAttribute, interfaceType, interfaceModel, createMemoizedAttributeData, interfaceWithAttribute.GetLocation()));
 }
コード例 #4
0
 public InterfaceError(InterfaceDeclarationSyntax interfaceDeclaration, string code) :
     base(code)
 {
     this.InterfaceName = interfaceDeclaration.Identifier.Text;
     this.SetLocation(interfaceDeclaration.GetLocation());
 }