/// <inheritdoc/> public (string nameSpace, string name) Generate( IWriterSelector writerSelector, IInterfaceDeclaration itfDeclaration, string implName) { if (itfDeclaration == null) { throw new ArgumentNullException(nameof(itfDeclaration), $"The argument {nameof(itfDeclaration)} was null."); } var(location, nameSpace) = this.locator.ComputeTargetLocation(itfDeclaration.DeclarationNameSpace); this.generator.Generate(location, implName, writer => { var generatorWalker = new ImplementationGeneratorWalker( writer, this.itfPattern, this.implPattern, itfDeclaration, implName, nameSpace, writerSelector); generatorWalker.Visit(this.implPattern.SyntaxNodeProvider.SyntaxNode.SyntaxTree.GetRoot()); }); return(nameSpace, implName); }
/// <summary> /// Initializes a new instance of the <see cref="ImplementationGeneratorWalker"/> class. /// </summary> /// <param name="writer">The writer where to write generated code.</param> /// <param name="itfPattern">Interface pattern.</param> /// <param name="implPattern">Implementation pattern.</param> /// <param name="itfDeclaration">Interface declaration to implement.</param> /// <param name="implName">Implementation name.</param> /// <param name="implNameSpace">Implementation name space.</param> /// <param name="writerSelector">Writer selector.</param> /// <param name="textSubstitutionHandler">Optional text substitution handler.</param> public ImplementationGeneratorWalker( TextWriter writer, IInterfaceDeclaration itfPattern, IGenericDeclaration <SyntaxNode> implPattern, IInterfaceDeclaration itfDeclaration, string implName, string implNameSpace, IWriterSelector writerSelector, Func <string, string> textSubstitutionHandler = null) { this.writer = writer; this.itfPattern = itfPattern; this.implPattern = implPattern; this.declaration = itfDeclaration; this.implName = implName; this.implNameSpace = implNameSpace; this.writerSelector = writerSelector; this.textSubstitutionHandler = textSubstitutionHandler ?? SameText; }