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} }} }}"); }
public override void VisitInterfaceDeclaration(InterfaceDeclarationSyntax node) { AddEntry(node.Identifier.Text, node.GetLocation()); base.VisitInterfaceDeclaration(node); }
public static CreateMemoizeInterfaceContext CreateFromSyntax(InterfaceDeclarationSyntax interfaceWithAttribute, ITypeSymbol interfaceType, SemanticModel interfaceModel, AttributeData createMemoizedAttributeData) { return(new CreateMemoizeInterfaceContext(interfaceWithAttribute, interfaceType, interfaceModel, createMemoizedAttributeData, interfaceWithAttribute.GetLocation())); }
public InterfaceError(InterfaceDeclarationSyntax interfaceDeclaration, string code) : base(code) { this.InterfaceName = interfaceDeclaration.Identifier.Text; this.SetLocation(interfaceDeclaration.GetLocation()); }