Skip to content

Add Template Method pattern source generator#104

Merged
JerrettDavis merged 12 commits intomainfrom
copilot/add-template-method-generator
Feb 6, 2026
Merged

Add Template Method pattern source generator#104
JerrettDavis merged 12 commits intomainfrom
copilot/add-template-method-generator

Conversation

Copy link
Contributor

Copilot AI commented Jan 30, 2026

Template Method Pattern Generator - Complete Implementation

Summary

Source generator for Template Method pattern with deterministic step ordering, lifecycle hooks, and async/await support. All tests passing (454/454).

Latest Fix - Test Failure Resolution

Fixed ImportWorkflowDemo.LoadData - Method now checks if RawData is already set before loading, allowing test scenarios to pre-populate invalid data
Test now passes - Invalid_Data_Triggers_OnError_Hook test validates error handling correctly
Generator confirmed working - TemplateGenerator IS generating Execute/ExecuteAsync methods correctly in Examples project

Previous Changes - Third PR Review Round

✅ Improved code consistency with IsCancellationToken helper
✅ Fixed test assertion for generic "Import failed" message
✅ Updated TemplateErrorPolicy documentation

Previous Changes - Second PR Review Round

✅ Fixed CancellationToken detection to use fully qualified type name
✅ Updated documentation to accurately reflect HandleAndContinue behavior
✅ Improved error messages and refactored validation loops

Previous Changes - First PR Review Round

✅ Removed unused imports, PKTMP006 diagnostic
✅ Fixed ValueTask validation to distinguish non-generic from generic
✅ Added 5 new tests (21 generator tests, all passing)
✅ Refactored loops to use explicit LINQ filtering

Core Features

  • Deterministic step ordering
  • Lifecycle hooks (BeforeAll, AfterAll, OnError)
  • Async/await with non-generic ValueTask and CancellationToken
  • Error handling with configurable policies
  • Support for class, struct, record class, record struct
  • 7 actionable diagnostics
  • Zero runtime dependency

Resolution

The generator IS working correctly. The test failure was caused by LoadData unconditionally overwriting ctx.RawData, which prevented test scenarios from injecting invalid data. Fixed by checking if RawData is already populated before loading.

Original prompt

This section details on the original issue you should resolve

<issue_title>Generator: Create Template Method Pattern</issue_title>
<issue_description>## Summary

Add a source generator that produces a complete implementation of the Template Method pattern for consumer-defined workflows.

The generator lives in PatternKit.Generators and emits self-contained, readable C# with no runtime PatternKit dependency.

Primary goals:

  • Define a canonical sequence of steps (the “template”).
  • Allow consumers to override hooks and optional steps safely.
  • Support sync + async flows (favoring ValueTask).
  • Provide deterministic ordering, diagnostics, and testability.

Motivation / Problem

Template Method is commonly re-implemented as:

  • base classes with virtual methods (inheritance tax)
  • ad-hoc pipelines with no clear contract for overrides
  • scattered hooks with inconsistent error handling

We want a declarative, boilerplate-free way to define a workflow that:

  • makes step order explicit
  • makes override points explicit
  • is friendly to records/immutability
  • is reflection-free and generator-deterministic

Supported Targets (must-have)

The generator must support:

  • partial class
  • partial struct
  • partial record class
  • partial record struct

The annotated type represents the workflow host (the place consumers call Execute/ExecuteAsync).


Proposed User Experience

Minimal template with required steps

[Template]
public partial class ImportWorkflow
{
    [TemplateStep(Order = 0)]
    private void Validate(ImportContext ctx);

    [TemplateStep(Order = 1)]
    private void Transform(ImportContext ctx);

    [TemplateStep(Order = 2)]
    private void Persist(ImportContext ctx);
}

Generated (representative shape):

  • Execute(ImportContext ctx) invokes steps in deterministic order.
  • ExecuteAsync(ImportContext ctx, CancellationToken ct = default) emitted when async steps/hooks exist or ForceAsync=true.

Hooks + error handling

[Template(GenerateAsync = true)]
public partial class ImportWorkflow
{
    [TemplateHook(HookPoint.BeforeAll)]
    private void OnStart(ImportContext ctx);

    [TemplateStep(0)]
    private ValueTask ValidateAsync(ImportContext ctx, CancellationToken ct);

    [TemplateStep(1)]
    private void Transform(ImportContext ctx);

    [TemplateHook(HookPoint.OnError)]
    private void OnError(ImportContext ctx, Exception ex);

    [TemplateHook(HookPoint.AfterAll)]
    private void OnComplete(ImportContext ctx);
}

Attributes / Surface Area

Namespace: PatternKit.Generators.Template

Core attributes

  • [Template] on the workflow host
  • [TemplateStep] on methods that form the required step sequence
  • [TemplateHook] on methods that plug into hook points

Suggested shapes:

TemplateAttribute

  • string ExecuteMethodName = "Execute"
  • string ExecuteAsyncMethodName = "ExecuteAsync"
  • bool GenerateAsync (default: inferred)
  • bool ForceAsync (default: false)
  • TemplateErrorPolicy ErrorPolicy (default: Rethrow)

TemplateStepAttribute

  • int Order (required in v1)
  • bool Optional (default: false)
  • string? Name (optional; for diagnostics)

TemplateHookAttribute

  • HookPoint HookPoint (BeforeAll, AfterAll, OnError)
  • int? StepOrder (reserved for v2: BeforeStep/AfterStep targeting)

Step Semantics

  • Steps execute in ascending Order.
  • Duplicate orders are errors.
  • Steps are invoked exactly once unless marked optional and suppressed (v2). In v1, Optional only affects error-policy eligibility.

Async rules

  • If any step/hook returns ValueTask or accepts CancellationToken, generator emits async path.
  • Sync Execute can exist alongside async ExecuteAsync.
  • Generated async APIs use ValueTask.

Error rules

  • Default: throw after invoking OnError (if present).
  • If ErrorPolicy = HandleAndContinue, only allowed when all remaining steps are optional. Otherwise emit diagnostic.

Diagnostics (must-have)

Stable IDs, actionable:

  • PKTMP001 Type marked [Template] must be partial.
  • PKTMP002 No [TemplateStep] methods found.
  • PKTMP003 Duplicate step order detected.
  • PKTMP004 Step method signature invalid.
  • PKTMP005 Hook method signature invalid.
  • PKTMP006 Mixed sync/async signatures not supported (explain required shapes).
  • PKTMP007 CancellationToken required for async step but missing.
  • PKTMP008 HandleAndContinue not allowed when non-optional steps remain.

Generated Code Layout

  • TypeName.Template.g.cs

Deterministic ordering:

  • steps ordered by Order, then by fully-qualified method name for tie-breaking in diagnostics.

Testing Expectations

  • Deterministic ordering with multiple steps.
  • Hooks fire at correct points.
  • Error behavior: OnError invoked; default rethrow policy enforced.
  • Async path uses ValueTask and respects cancellation....

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 5 commits January 30, 2026 06:22
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copilot AI changed the title [WIP] Add source generator for Template Method pattern Add Template Method pattern source generator Jan 30, 2026
Copilot AI requested a review from JerrettDavis January 30, 2026 06:45
@JerrettDavis JerrettDavis marked this pull request as ready for review January 30, 2026 19:07
@JerrettDavis JerrettDavis requested a review from Copilot January 30, 2026 19:07
@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

Test Results

1 072 tests   1 072 ✅  7s ⏱️
    1 suites      0 💤
    1 files        0 ❌

Results for commit 59cfa34.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

🔍 PR Validation Results

Version: ``

✅ Validation Steps

  • Build solution
  • Run tests
  • Build documentation
  • Dry-run NuGet packaging

📊 Artifacts

Dry-run artifacts have been uploaded and will be available for 7 days.


This comment was automatically generated by the PR validation workflow.

@codecov
Copy link

codecov bot commented Jan 30, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.38%. Comparing base (8849a40) to head (6981ca0).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #104      +/-   ##
==========================================
+ Coverage   82.53%   87.38%   +4.85%     
==========================================
  Files         175      175              
  Lines       16706    16706              
  Branches     2366     2366              
==========================================
+ Hits        13788    14599     +811     
+ Misses       2291     2107     -184     
+ Partials      627        0     -627     
Flag Coverage Δ
unittests 87.38% <0.00%> (+4.85%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements an incremental source generator for the Template Method pattern that generates Execute/ExecuteAsync methods from declarative workflow definitions with ordered steps and lifecycle hooks.

Changes:

  • Adds Template Method pattern generator with support for sync/async workflows, deterministic step ordering, and lifecycle hooks (BeforeAll, AfterAll, OnError)
  • Introduces attribute-based API ([Template], [TemplateStep], [TemplateHook]) with configurable error handling policies
  • Includes comprehensive unit tests (16 tests), BDD-style integration tests, real-world examples, and complete documentation

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 17 comments.

Show a summary per file
File Description
src/PatternKit.Generators/TemplateGenerator.cs Core incremental generator implementation with 8 diagnostics, signature validation, and code generation for sync/async execution methods
src/PatternKit.Generators.Abstractions/Template/*.cs Attribute definitions for Template, TemplateStep, TemplateHook, HookPoint enum, and TemplateErrorPolicy enum
test/PatternKit.Generators.Tests/TemplateGeneratorTests.cs Comprehensive unit tests covering basic templates, hooks, async patterns, type targets, and diagnostics
test/PatternKit.Examples.Tests/TemplateMethodGeneratorDemo/*.cs BDD-style integration tests for ImportWorkflow and OrderProcessing examples
src/PatternKit.Examples/TemplateMethodGeneratorDemo/*.cs Real-world examples demonstrating data import pipeline and async order processing workflows
docs/generators/template-method-generator.md Complete documentation with quick start, real-world examples, configuration options, and migration guide
docs/generators/toc.yml Table of contents update to include Template Method generator documentation

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@JerrettDavis
Copy link
Owner

@copilot apply changes based on the comments in this thread

…iagnostic, refactor loops, add tests

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copilot AI requested a review from JerrettDavis January 31, 2026 01:32
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@JerrettDavis
Copy link
Owner

@copilot apply changes based on the comments in this thread

…ix test assertion, update TemplateErrorPolicy docs

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
@JerrettDavis
Copy link
Owner

@copilot apply changes based on the comments in this thread

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@JerrettDavis
Copy link
Owner

@copilot There is a test failure, fix it.

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:02.66]     PatternKit.Examples.Tests.TemplateMethodGeneratorDemo.ImportWorkflowDemoTests.Invalid_Data_Triggers_OnError_Hook [FAIL]
  Failed PatternKit.Examples.Tests.TemplateMethodGeneratorDemo.ImportWorkflowDemoTests.Invalid_Data_Triggers_OnError_Hook [22 ms]
  Error Message:
   System.InvalidOperationException : Step failed: And finds invalid lines: TinyBddAssertionException: Assertion failed: finds invalid lines
  Stack Trace:
     at TinyBDD.ScenarioContextAsserts.AssertPassed(ScenarioContext ctx)
   at TinyBDD.ThenChain`1.AssertPassed(CancellationToken cancellationToken)
--- End of stack trace from previous location ---
  Standard Output Messages:
 Feature: Template Method Generator - Import Workflow
 Scenario: Import validates data and logs errors
   Given import workflow with invalid data [OK] 10 ms
   When executing the workflow [OK] 0 ms
   Then loads data [OK] 0 ms
   And attempts validation [OK] 0 ms
   And finds invalid lines [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: finds invalid lines
     Expected: null
     Actual: null
   And invokes OnError hook [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: invokes OnError hook
     Expected: null
     Actual: null
   And logs validation failure [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: logs validation failure
     Expected: null
     Actual: null
   And does not reach transform step [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: does not reach transform step
     Expected: null
     Actual: null



Failed!  - Failed:     1, Passed:   453, Skipped:     0, Total:   454, Duration: 6 s - PatternKit.Examples.Tests.dll (net9.0)
Test run for /home/runner/work/PatternKit/PatternKit/test/PatternKit.Examples.Tests/bin/Release/net10.0/PatternKit.Examples.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:01.70]     PatternKit.Examples.Tests.TemplateMethodGeneratorDemo.ImportWorkflowDemoTests.Invalid_Data_Triggers_OnError_Hook [FAIL]
  Failed PatternKit.Examples.Tests.TemplateMethodGeneratorDemo.ImportWorkflowDemoTests.Invalid_Data_Triggers_OnError_Hook [21 ms]
  Error Message:
   System.InvalidOperationException : Step failed: And finds invalid lines: TinyBddAssertionException: Assertion failed: finds invalid lines
  Stack Trace:
     at TinyBDD.ScenarioContextAsserts.AssertPassed(ScenarioContext ctx)
   at TinyBDD.ThenChain`1.AssertPassed(CancellationToken cancellationToken)
--- End of stack trace from previous location ---
  Standard Output Messages:
 Feature: Template Method Generator - Import Workflow
 Scenario: Import validates data and logs errors
   Given import workflow with invalid data [OK] 9 ms
   When executing the workflow [OK] 0 ms
   Then loads data [OK] 0 ms
   And attempts validation [OK] 0 ms
   And finds invalid lines [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: finds invalid lines
     Expected: null
     Actual: null
   And invokes OnError hook [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: invokes OnError hook
     Expected: null
     Actual: null
   And logs validation failure [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: logs validation failure
     Expected: null
     Actual: null
   And does not reach transform step [FAIL] 0 ms
     Error: TinyBddAssertionException: Assertion failed: does not reach transform step
     Expected: null
     Actual: null

Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 5, 2026

@copilot There is a test failure, fix it.

...

Fixed in 1589a06. The test failure was caused by LoadData unconditionally overwriting ctx.RawData, preventing test scenarios from injecting invalid data. Added a check to preserve pre-set RawData. All 454 tests now pass.

- Apply dotnet format to all files
- Resolve merge conflict in DispatcherGeneratorTests.cs
- All tests passing (1839 passed, 0 failed)
@JerrettDavis JerrettDavis merged commit bd79bdf into main Feb 6, 2026
6 checks passed
@JerrettDavis JerrettDavis deleted the copilot/add-template-method-generator branch February 6, 2026 04:23
@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

Code Coverage

Summary
  Generated on: 02/06/2026 - 04:26:18
  Coverage date: 02/06/2026 - 04:25:42 - 02/06/2026 - 04:26:12
  Parser: MultiReport (9x Cobertura)
  Assemblies: 4
  Classes: 402
  Files: 262
  Line coverage: 78.8%
  Covered lines: 14743
  Uncovered lines: 3949
  Coverable lines: 18692
  Total lines: 46660
  Branch coverage: 71% (4778 of 6721)
  Covered branches: 4778
  Total branches: 6721
  Method coverage: 74.9% (2639 of 3522)
  Full method coverage: 68.3% (2407 of 3522)
  Covered methods: 2639
  Fully covered methods: 2407
  Total methods: 3522

PatternKit.Core                                                                                                   96.8%
  PatternKit.Behavioral.Chain.ActionChain<T>                                                                       100%
  PatternKit.Behavioral.Chain.AsyncActionChain<T>                                                                  100%
  PatternKit.Behavioral.Chain.AsyncResultChain<T1, T2>                                                            97.7%
  PatternKit.Behavioral.Chain.ResultChain<T1, T2>                                                                  100%
  PatternKit.Behavioral.Command.Command<T>                                                                         100%
  PatternKit.Behavioral.Interpreter.ActionInterpreter                                                              100%
  PatternKit.Behavioral.Interpreter.ActionInterpreter<T>                                                          96.9%
  PatternKit.Behavioral.Interpreter.ActionInterpreterBuilder<T>                                                    100%
  PatternKit.Behavioral.Interpreter.AsyncActionInterpreter                                                         100%
  PatternKit.Behavioral.Interpreter.AsyncActionInterpreter<T>                                                      100%
  PatternKit.Behavioral.Interpreter.AsyncActionInterpreterBuilder<T>                                               100%
  PatternKit.Behavioral.Interpreter.AsyncInterpreter                                                               100%
  PatternKit.Behavioral.Interpreter.AsyncInterpreter<T1, T2>                                                      96.8%
  PatternKit.Behavioral.Interpreter.AsyncInterpreterBuilder<T1, T2>                                                100%
  PatternKit.Behavioral.Interpreter.Builder<T1, T2>                                                                 96%
  PatternKit.Behavioral.Interpreter.ExpressionExtensions                                                           100%
  PatternKit.Behavioral.Interpreter.Interpreter                                                                    100%
  PatternKit.Behavioral.Interpreter.Interpreter<T1, T2>                                                           96.6%
  PatternKit.Behavioral.Interpreter.NonTerminalExpression                                                          100%
  PatternKit.Behavioral.Interpreter.TerminalExpression                                                             100%
  PatternKit.Behavioral.Iterator.AsyncFlow<T>                                                                      100%
  PatternKit.Behavioral.Iterator.AsyncFlowExtensions                                                               100%
  PatternKit.Behavioral.Iterator.AsyncReplayBuffer<T>                                                             93.9%
  PatternKit.Behavioral.Iterator.Flow<T>                                                                          94.4%
  PatternKit.Behavioral.Iterator.FlowExtensions                                                                    100%
  PatternKit.Behavioral.Iterator.ReplayableSequence<T>                                                            98.2%
  PatternKit.Behavioral.Iterator.ReplayableSequenceExtensions                                                      100%
  PatternKit.Behavioral.Iterator.SharedAsyncFlow<T>                                                                100%
  PatternKit.Behavioral.Iterator.SharedFlow<T>                                                                     100%
  PatternKit.Behavioral.Iterator.WindowSequence                                                                    100%
  PatternKit.Behavioral.Mediator.Mediator                                                                         91.9%
  PatternKit.Behavioral.Mediator.MediatorHelpers                                                                   100%
  PatternKit.Behavioral.Mediator.TaskExtensions                                                                    100%
  PatternKit.Behavioral.Memento.Memento<T>                                                                         100%
  PatternKit.Behavioral.Observer.AsyncObserver<T>                                                                 98.7%
  PatternKit.Behavioral.Observer.Observer<T>                                                                      98.2%
  PatternKit.Behavioral.State.AsyncStateMachine<T1, T2>                                                             95%
  PatternKit.Behavioral.State.StateMachine<T1, T2>                                                                  99%
  PatternKit.Behavioral.Strategy.ActionStrategy<T>                                                                  97%
  PatternKit.Behavioral.Strategy.AsyncActionStrategy<T>                                                            100%
  PatternKit.Behavioral.Strategy.AsyncStrategy<T1, T2>                                                             100%
  PatternKit.Behavioral.Strategy.Strategy<T1, T2>                                                                  100%
  PatternKit.Behavioral.Strategy.TryStrategy<T1, T2>                                                              95.8%
  PatternKit.Behavioral.Template.ActionTemplate<T>                                                                 100%
  PatternKit.Behavioral.Template.AsyncActionTemplate<T>                                                            100%
  PatternKit.Behavioral.Template.AsyncTemplate<T1, T2>                                                            97.1%
  PatternKit.Behavioral.Template.AsyncTemplateMethod<T1, T2>                                                       100%
  PatternKit.Behavioral.Template.Template<T1, T2>                                                                  100%
  PatternKit.Behavioral.Template.TemplateMethod<T1, T2>                                                            100%
  PatternKit.Behavioral.TypeDispatcher.ActionTypeDispatcher<T>                                                    91.4%
  PatternKit.Behavioral.TypeDispatcher.AsyncActionTypeDispatcher<T>                                               94.5%
  PatternKit.Behavioral.TypeDispatcher.AsyncTypeDispatcher<T1, T2>                                                94.4%
  PatternKit.Behavioral.TypeDispatcher.TypeDispatcher<T1, T2>                                                      100%
  PatternKit.Behavioral.Visitor.ActionVisitor<T>                                                                  85.7%
  PatternKit.Behavioral.Visitor.ActionVisitorBase<T>                                                               100%
  PatternKit.Behavioral.Visitor.AsyncActionVisitor<T>                                                             94.5%
  PatternKit.Behavioral.Visitor.AsyncFluentActionVisitor<T>                                                        100%
  PatternKit.Behavioral.Visitor.AsyncFluentVisitor<T1, T2>                                                         100%
  PatternKit.Behavioral.Visitor.AsyncVisitor<T1, T2>                                                              86.1%
  PatternKit.Behavioral.Visitor.FluentActionVisitor<T>                                                             100%
  PatternKit.Behavioral.Visitor.FluentVisitor<T1, T2>                                                              100%
  PatternKit.Behavioral.Visitor.Visitor<T1, T2>                                                                   91.1%
  PatternKit.Behavioral.Visitor.VisitorBase<T1, T2>                                                                100%
  PatternKit.Common.Option<T>                                                                                      100%
  PatternKit.Common.Throw                                                                                          100%
  PatternKit.Common.TryHandlerExtensions                                                                           100%
  PatternKit.Creational.AbstractFactory.AbstractFactory<T>                                                        91.6%
  PatternKit.Creational.Builder.BranchBuilder<T1, T2>                                                              100%
  PatternKit.Creational.Builder.BuilderExtensions                                                                  100%
  PatternKit.Creational.Builder.ChainBuilder<T>                                                                    100%
  PatternKit.Creational.Builder.Composer<T1, T2>                                                                   100%
  PatternKit.Creational.Builder.MutableBuilder<T>                                                                  100%
  PatternKit.Creational.Factory.Factory<T1, T2>                                                                   92.3%
  PatternKit.Creational.Factory.Factory<T1, T2, T3>                                                               92.3%
  PatternKit.Creational.Prototype.Prototype<T>                                                                     100%
  PatternKit.Creational.Prototype.Prototype<T1, T2>                                                                 90%
  PatternKit.Creational.Singleton.Singleton<T>                                                                    96.5%
  PatternKit.Structural.Adapter.Adapter<T1, T2>                                                                    100%
  PatternKit.Structural.Adapter.AsyncAdapter<T1, T2>                                                               100%
  PatternKit.Structural.Bridge.ActionBridge<T1, T2>                                                               90.9%
  PatternKit.Structural.Bridge.AsyncActionBridge<T1, T2>                                                          96.5%
  PatternKit.Structural.Bridge.AsyncBridge<T1, T2, T3>                                                            90.6%
  PatternKit.Structural.Bridge.Bridge<T1, T2, T3>                                                                  100%
  PatternKit.Structural.Composite.ActionComposite<T>                                                               100%
  PatternKit.Structural.Composite.AsyncActionComposite<T>                                                          100%
  PatternKit.Structural.Composite.AsyncComposite<T1, T2>                                                          97.8%
  PatternKit.Structural.Composite.Composite<T1, T2>                                                               97.3%
  PatternKit.Structural.Decorator.ActionDecorator<T>                                                               100%
  PatternKit.Structural.Decorator.AsyncActionDecorator<T>                                                          100%
  PatternKit.Structural.Decorator.AsyncDecorator<T1, T2>                                                            98%
  PatternKit.Structural.Decorator.Decorator<T1, T2>                                                               97.6%
  PatternKit.Structural.Facade.Facade<T1, T2>                                                                     88.8%
  PatternKit.Structural.Facade.TypedFacade<T>                                                                     79.4%
  PatternKit.Structural.Facade.TypedFacadeDispatchProxy<T>                                                        81.8%
  PatternKit.Structural.Facade.TypedFacadeProxyFactory<T>                                                          100%
  PatternKit.Structural.Flyweight.Flyweight<T1, T2>                                                                100%
  PatternKit.Structural.Proxy.ActionProxy<T>                                                                       100%
  PatternKit.Structural.Proxy.AsyncActionProxy<T>                                                                  100%
  PatternKit.Structural.Proxy.AsyncProxy<T1, T2>                                                                  98.6%
  PatternKit.Structural.Proxy.Proxy<T1, T2>                                                                       98.8%

PatternKit.Examples                                                                                               60.7%
  PatternKit.Examples.AbstractFactoryDemo.AbstractFactoryDemo                                                     98.2%
  PatternKit.Examples.ApiGateway.Demo                                                                             97.9%
  PatternKit.Examples.ApiGateway.MiniRouter                                                                       96.6%
  PatternKit.Examples.ApiGateway.Request                                                                            75%
  PatternKit.Examples.ApiGateway.Response                                                                          100%
  PatternKit.Examples.ApiGateway.Responses                                                                         100%
  PatternKit.Examples.AsyncStateDemo.ConnectionStateDemo                                                          93.5%
  PatternKit.Examples.BridgeDemo.BridgeDemo                                                                       96.7%
  PatternKit.Examples.Chain.AuthLoggingDemo                                                                       95.2%
  PatternKit.Examples.Chain.CardProcessors                                                                         100%
  PatternKit.Examples.Chain.CardTenderStrategy                                                                    77.7%
  PatternKit.Examples.Chain.CashTenderStrategy                                                                     100%
  PatternKit.Examples.Chain.ChainStage                                                                             100%
  PatternKit.Examples.Chain.CharityRoundUpRule                                                                      50%
  PatternKit.Examples.Chain.ConfigDriven.Bundle1OffEach                                                           14.2%
  PatternKit.Examples.Chain.ConfigDriven.CardTender                                                               72.2%
  PatternKit.Examples.Chain.ConfigDriven.Cash2Pct                                                                 16.6%
  PatternKit.Examples.Chain.ConfigDriven.CashTender                                                               90.9%
  PatternKit.Examples.Chain.ConfigDriven.CharityRoundUp                                                            100%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineBuilderExtensions                                    94.2%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineDemo                                                  100%
  PatternKit.Examples.Chain.ConfigDriven.Loyalty5Pct                                                                20%
  PatternKit.Examples.Chain.ConfigDriven.NickelCashOnly                                                           77.7%
  PatternKit.Examples.Chain.ConfigDriven.PipelineOptions                                                           100%
  PatternKit.Examples.Chain.Customer                                                                               100%
  PatternKit.Examples.Chain.DeviceBus                                                                              100%
  PatternKit.Examples.Chain.GenericProcessor                                                                       100%
  PatternKit.Examples.Chain.HttpRequest                                                                            100%
  PatternKit.Examples.Chain.IRoundingRule                                                                          100%
  PatternKit.Examples.Chain.LineItem                                                                               100%
  PatternKit.Examples.Chain.MediatedTransactionPipelineDemo                                                        100%
  PatternKit.Examples.Chain.NickelCashOnlyRule                                                                     100%
  PatternKit.Examples.Chain.NoopCharityTracker                                                                     100%
  PatternKit.Examples.Chain.RoundingPipeline                                                                       100%
  PatternKit.Examples.Chain.Tender                                                                                 100%
  PatternKit.Examples.Chain.TenderRouterFactory                                                                   91.3%
  PatternKit.Examples.Chain.TransactionContext                                                                     100%
  PatternKit.Examples.Chain.TransactionPipeline                                                                    100%
  PatternKit.Examples.Chain.TransactionPipelineBuilder                                                            92.3%
  PatternKit.Examples.Chain.TxResult                                                                               100%
  PatternKit.Examples.CompositeDemo.CompositeDemo                                                                  100%
  PatternKit.Examples.Decorators.CachingFileStorage                                                                  0%
  PatternKit.Examples.Decorators.FileStorageDecoratorBase                                                            0%
  PatternKit.Examples.Decorators.FileStorageDecorators                                                               0%
  PatternKit.Examples.Decorators.InMemoryFileStorage                                                                 0%
  PatternKit.Examples.Decorators.LoggingFileStorage                                                                  0%
  PatternKit.Examples.Decorators.RetryFileStorage                                                                    0%
  PatternKit.Examples.Decorators.StorageDecoratorDemo                                                                0%
  PatternKit.Examples.EnterpriseDemo.EnterpriseOrderDemo                                                          97.1%
  PatternKit.Examples.FacadeDemo.FacadeDemo                                                                        100%
  PatternKit.Examples.FlyweightDemo.FlyweightDemo                                                                 96.9%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.BackgroundJobsModule                     100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateApp                             100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateApplication                    21.4%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateApplicationBuilder             52.6%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateApplicationBuilderExtensions   94.7%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateApplicationDemo                27.2%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.CorporateAppState                        100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.InMemoryJobScheduler                     100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.MessagingModule                          100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.NotificationOptions                        0%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.ObservabilityModule                      100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.QueueNotificationPublisher               100%
  PatternKit.Examples.Generators.Builders.CorporateApplicationBuilderDemo.SecretsProvider                          100%
  PatternKit.Examples.Generators.Facade.BillingFacade                                                              100%
  PatternKit.Examples.Generators.Facade.BillingFacadeDemo                                                           96%
  PatternKit.Examples.Generators.Facade.BillingHost                                                               96.1%
  PatternKit.Examples.Generators.Facade.BillingResult                                                              100%
  PatternKit.Examples.Generators.Facade.DeliveryEstimator                                                           70%
  PatternKit.Examples.Generators.Facade.Invoice                                                                    100%
  PatternKit.Examples.Generators.Facade.InvoiceService                                                             100%
  PatternKit.Examples.Generators.Facade.NotificationService                                                         50%
  PatternKit.Examples.Generators.Facade.PaymentProcessor                                                            62%
  PatternKit.Examples.Generators.Facade.PaymentRecord                                                              100%
  PatternKit.Examples.Generators.Facade.PaymentResult                                                              100%
  PatternKit.Examples.Generators.Facade.RateCalculator                                                              75%
  PatternKit.Examples.Generators.Facade.RefundResult                                                                40%
  PatternKit.Examples.Generators.Facade.ShippingFacade                                                             100%
  PatternKit.Examples.Generators.Facade.ShippingFacadeDemo                                                         100%
  PatternKit.Examples.Generators.Facade.ShippingHost                                                              90.9%
  PatternKit.Examples.Generators.Facade.ShippingValidator                                                          100%
  PatternKit.Examples.Generators.Facade.TaxService                                                                91.6%
  PatternKit.Examples.Generators.Factories.ApplicationOrchestrator                                                   0%
  PatternKit.Examples.Generators.Factories.BackgroundWorker                                                        100%
  PatternKit.Examples.Generators.Factories.ConsoleMetricsSink                                                      100%
  PatternKit.Examples.Generators.Factories.MemoryCacheProvider                                                     100%
  PatternKit.Examples.Generators.Factories.OrchestratorStepFactory                                                13.4%
  PatternKit.Examples.Generators.Factories.SeedDataStep                                                            100%
  PatternKit.Examples.Generators.Factories.ServiceModuleBootstrap                                                  100%
  PatternKit.Examples.Generators.Factories.ServiceModules                                                           44%
  PatternKit.Examples.Generators.Factories.StartWorkersStep                                                        100%
  PatternKit.Examples.Generators.Factories.WarmCacheStep                                                           100%
  PatternKit.Examples.Generators.Memento.EditorStateDemo                                                             0%
  PatternKit.Examples.Generators.Memento.EditorStateHistory                                                          0%
  PatternKit.Examples.Generators.Memento.EditorStateMemento                                                          0%
  PatternKit.Examples.Generators.Memento.GameStateDemo                                                               0%
  PatternKit.Examples.Generators.Memento.GameStateHistory                                                            0%
  PatternKit.Examples.Generators.Memento.GameStateMemento                                                            0%
  PatternKit.Examples.Generators.Strategies.IntParser                                                               60%
  PatternKit.Examples.Generators.Strategies.OrderRouter                                                           95.2%
  PatternKit.Examples.Generators.Strategies.ScoreLabeler                                                           100%
  PatternKit.Examples.Generators.Visitors.Document                                                                   0%
  PatternKit.Examples.Generators.Visitors.DocumentActionVisitorBuilder                                               0%
  PatternKit.Examples.Generators.Visitors.DocumentAsyncActionVisitorBuilder                                          0%
  PatternKit.Examples.Generators.Visitors.DocumentAsyncVisitorBuilder<T>                                             0%
  PatternKit.Examples.Generators.Visitors.DocumentProcessingDemo                                                     0%
  PatternKit.Examples.Generators.Visitors.DocumentVisitorBuilder<T>                                                  0%
  PatternKit.Examples.Generators.Visitors.MarkdownDocument                                                           0%
  PatternKit.Examples.Generators.Visitors.PdfDocument                                                                0%
  PatternKit.Examples.Generators.Visitors.SpreadsheetDocument                                                        0%
  PatternKit.Examples.Generators.Visitors.WordDocument                                                               0%
  PatternKit.Examples.InterpreterDemo.InterpreterDemo                                                             93.1%
  PatternKit.Examples.IteratorDemo.IteratorDemo                                                                   98.8%
  PatternKit.Examples.MediatorDemo.AppMediator                                                                     100%
  PatternKit.Examples.MediatorDemo.AuditLogHandler                                                                 100%
  PatternKit.Examples.MediatorDemo.BoxHelper                                                                        25%
  PatternKit.Examples.MediatorDemo.CountUpCmd                                                                      100%
  PatternKit.Examples.MediatorDemo.CountUpHandler                                                                  100%
  PatternKit.Examples.MediatorDemo.EchoCmd                                                                         100%
  PatternKit.Examples.MediatorDemo.EchoHandler                                                                     100%
  PatternKit.Examples.MediatorDemo.LoggingBehavior<T1, T2>                                                         100%
  PatternKit.Examples.MediatorDemo.MediatorAssemblyScanner                                                         100%
  PatternKit.Examples.MediatorDemo.MediatorDemoSink                                                                100%
  PatternKit.Examples.MediatorDemo.MediatorRegistry                                                                100%
  PatternKit.Examples.MediatorDemo.PingCmd                                                                         100%
  PatternKit.Examples.MediatorDemo.PingHandler                                                                     100%
  PatternKit.Examples.MediatorDemo.ServiceCollectionExtensions                                                    83.3%
  PatternKit.Examples.MediatorDemo.SumCmd                                                                          100%
  PatternKit.Examples.MediatorDemo.SumCmdBehavior                                                                  100%
  PatternKit.Examples.MediatorDemo.SumHandler                                                                      100%
  PatternKit.Examples.MediatorDemo.UserCreated                                                                     100%
  PatternKit.Examples.MediatorDemo.WelcomeEmailHandler                                                             100%
  PatternKit.Examples.MementoDemo.MementoDemo                                                                     83.5%
  PatternKit.Examples.Messaging.CreateUser                                                                           0%
  PatternKit.Examples.Messaging.DispatcherUsageExamples                                                              0%
  PatternKit.Examples.Messaging.EmailSent                                                                            0%
  PatternKit.Examples.Messaging.OrderPlaced                                                                          0%
  PatternKit.Examples.Messaging.PagedItem                                                                            0%
  PatternKit.Examples.Messaging.PagedRequest                                                                         0%
  PatternKit.Examples.Messaging.SearchQuery                                                                          0%
  PatternKit.Examples.Messaging.SearchResult                                                                         0%
  PatternKit.Examples.Messaging.SendEmail                                                                            0%
  PatternKit.Examples.Messaging.SourceGenerated.ComprehensiveMediatorDemo                                            0%
  PatternKit.Examples.Messaging.SourceGenerated.CreateCustomerCommand                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.CreateCustomerHandler                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.Customer                                                             0%
  PatternKit.Examples.Messaging.SourceGenerated.CustomerCreatedEvent                                                 0%
  PatternKit.Examples.Messaging.SourceGenerated.GetCustomerHandler                                                   0%
  PatternKit.Examples.Messaging.SourceGenerated.GetCustomerQuery                                                     0%
  PatternKit.Examples.Messaging.SourceGenerated.GetOrdersByCustomerHandler                                           0%
  PatternKit.Examples.Messaging.SourceGenerated.GetOrdersByCustomerQuery                                             0%
  PatternKit.Examples.Messaging.SourceGenerated.InMemoryCustomerRepository                                           0%
  PatternKit.Examples.Messaging.SourceGenerated.InMemoryLogger                                                       0%
  PatternKit.Examples.Messaging.SourceGenerated.InMemoryOrderRepository                                              0%
  PatternKit.Examples.Messaging.SourceGenerated.InMemoryProductRepository                                            0%
  PatternKit.Examples.Messaging.SourceGenerated.LoggingBehavior<T1, T2>                                              0%
  PatternKit.Examples.Messaging.SourceGenerated.MediatorServiceCollectionExtensions                                  0%
  PatternKit.Examples.Messaging.SourceGenerated.NotifyInventoryHandler                                               0%
  PatternKit.Examples.Messaging.SourceGenerated.Order                                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.OrderItem                                                            0%
  PatternKit.Examples.Messaging.SourceGenerated.OrderPlacedEvent                                                     0%
  PatternKit.Examples.Messaging.SourceGenerated.PaymentProcessedEvent                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.PerformanceBehavior<T1, T2>                                          0%
  PatternKit.Examples.Messaging.SourceGenerated.PlaceOrderCommand                                                    0%
  PatternKit.Examples.Messaging.SourceGenerated.PlaceOrderHandler                                                    0%
  PatternKit.Examples.Messaging.SourceGenerated.ProcessPaymentCommand                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.ProcessPaymentHandler                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.ProductionDispatcher                                                 0%
  PatternKit.Examples.Messaging.SourceGenerated.ProductSearchResult                                                  0%
  PatternKit.Examples.Messaging.SourceGenerated.RecordPaymentAuditHandler                                            0%
  PatternKit.Examples.Messaging.SourceGenerated.SearchProductsHandler                                                0%
  PatternKit.Examples.Messaging.SourceGenerated.SearchProductsQuery                                                  0%
  PatternKit.Examples.Messaging.SourceGenerated.SendOrderConfirmationHandler                                         0%
  PatternKit.Examples.Messaging.SourceGenerated.SendWelcomeEmailHandler                                              0%
  PatternKit.Examples.Messaging.SourceGenerated.TransactionBehavior<T1, T2>                                          0%
  PatternKit.Examples.Messaging.SourceGenerated.UpdateCustomerStatsHandler                                           0%
  PatternKit.Examples.Messaging.SourceGenerated.ValidationBehavior<T1, T2>                                           0%
  PatternKit.Examples.Messaging.UserCreated                                                                          0%
  PatternKit.Examples.Messaging.UserRegistered                                                                       0%
  PatternKit.Examples.ObserverDemo.EventHub<T>                                                                     100%
  PatternKit.Examples.ObserverDemo.LineItem                                                                        100%
  PatternKit.Examples.ObserverDemo.ObservableList<T>                                                                47%
  PatternKit.Examples.ObserverDemo.ObservableVar<T>                                                                100%
  PatternKit.Examples.ObserverDemo.ProfileViewModel                                                                100%
  PatternKit.Examples.ObserverDemo.PropertyChangedHub                                                              100%
  PatternKit.Examples.ObserverDemo.ReactiveTransaction                                                            95.4%
  PatternKit.Examples.ObserverDemo.UserEvent                                                                       100%
  PatternKit.Examples.PatternShowcase.PatternShowcase                                                             91.2%
  PatternKit.Examples.PointOfSale.CustomerInfo                                                                     100%
  PatternKit.Examples.PointOfSale.Demo                                                                            99.6%
  PatternKit.Examples.PointOfSale.OrderLineItem                                                                    100%
  PatternKit.Examples.PointOfSale.PaymentProcessorDemo                                                            95.7%
  PatternKit.Examples.PointOfSale.PaymentReceipt                                                                   100%
  PatternKit.Examples.PointOfSale.PromotionConfig                                                                  100%
  PatternKit.Examples.PointOfSale.PurchaseOrder                                                                    100%
  PatternKit.Examples.PointOfSale.ReceiptLineItem                                                                  100%
  PatternKit.Examples.PointOfSale.StoreLocation                                                                    100%
  PatternKit.Examples.Pricing.ApiPricingSource                                                                     100%
  PatternKit.Examples.Pricing.CharityRoundUpRule                                                                   100%
  PatternKit.Examples.Pricing.Coupon                                                                               100%
  PatternKit.Examples.Pricing.DbPricingSource                                                                      100%
  PatternKit.Examples.Pricing.DefaultSourceRouting                                                                83.3%
  PatternKit.Examples.Pricing.FilePricingSource                                                                    100%
  PatternKit.Examples.Pricing.LineItem                                                                             100%
  PatternKit.Examples.Pricing.Location                                                                             100%
  PatternKit.Examples.Pricing.LoyaltyMembership                                                                    100%
  PatternKit.Examples.Pricing.NickelCashOnlyRule                                                                   100%
  PatternKit.Examples.Pricing.PercentLoyaltyRule                                                                   100%
  PatternKit.Examples.Pricing.PricingContext                                                                       100%
  PatternKit.Examples.Pricing.PricingDemo                                                                         56.7%
  PatternKit.Examples.Pricing.PricingPipeline                                                                      100%
  PatternKit.Examples.Pricing.PricingPipelineBuilder                                                               100%
  PatternKit.Examples.Pricing.PricingResult                                                                        100%
  PatternKit.Examples.Pricing.RegionCategoryTaxPolicy                                                              100%
  PatternKit.Examples.Pricing.Sku                                                                                 85.7%
  PatternKit.Examples.Pricing.SourceRouter                                                                        92.3%
  PatternKit.Examples.PrototypeDemo.PrototypeDemo                                                                  100%
  PatternKit.Examples.ProxyDemo.ProxyDemo                                                                         94.5%
  PatternKit.Examples.ProxyGeneratorDemo.GetTransactionHistoryMethodContext                                          0%
  PatternKit.Examples.ProxyGeneratorDemo.Interceptors.AuthenticationInterceptor                                      0%
  PatternKit.Examples.ProxyGeneratorDemo.Interceptors.CachingInterceptor                                             0%
  PatternKit.Examples.ProxyGeneratorDemo.Interceptors.LoggingInterceptor                                             0%
  PatternKit.Examples.ProxyGeneratorDemo.Interceptors.RetryInterceptor                                               0%
  PatternKit.Examples.ProxyGeneratorDemo.Interceptors.TimingInterceptor                                              0%
  PatternKit.Examples.ProxyGeneratorDemo.PaymentRequest                                                              0%
  PatternKit.Examples.ProxyGeneratorDemo.PaymentResult                                                               0%
  PatternKit.Examples.ProxyGeneratorDemo.PaymentServiceProxy                                                         0%
  PatternKit.Examples.ProxyGeneratorDemo.ProcessPaymentAsyncMethodContext                                            0%
  PatternKit.Examples.ProxyGeneratorDemo.ProcessPaymentMethodContext                                                 0%
  PatternKit.Examples.ProxyGeneratorDemo.ProxyGeneratorDemo                                                          0%
  PatternKit.Examples.ProxyGeneratorDemo.RealPaymentService                                                          0%
  PatternKit.Examples.ProxyGeneratorDemo.Transaction                                                                 0%
  PatternKit.Examples.Singleton.DeviceRegistry                                                                     100%
  PatternKit.Examples.Singleton.PosAppState                                                                        100%
  PatternKit.Examples.Singleton.PosAppStateDemo                                                                    100%
  PatternKit.Examples.Singleton.PricingCache                                                                       100%
  PatternKit.Examples.Singleton.StoreConfig                                                                        100%
  PatternKit.Examples.StateDemo.OrderStateDemo                                                                     100%
  PatternKit.Examples.Strategies.Coercion.Coercer<T>                                                              83.3%
  PatternKit.Examples.Strategies.Coercion.CoercerExtensions                                                        100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicy                                                            100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicyFactory                                                     100%
  PatternKit.Examples.Strategies.Composed.ComposedStrategies                                                      94.2%
  PatternKit.Examples.Strategies.Composed.SendContext                                                              100%
  PatternKit.Examples.Strategies.Composed.SendResult                                                               100%
  PatternKit.Examples.TemplateDemo.AsyncDataPipeline                                                               100%
  PatternKit.Examples.TemplateDemo.DataProcessor                                                                   100%
  PatternKit.Examples.TemplateDemo.TemplateAsyncFluentDemo                                                         100%
  PatternKit.Examples.TemplateDemo.TemplateFluentDemo                                                               90%
  PatternKit.Examples.TemplateDemo.TemplateMethodDemo                                                              100%
  PatternKit.Examples.TemplateMethodGeneratorDemo.DataRecord                                                       100%
  PatternKit.Examples.TemplateMethodGeneratorDemo.ImportContext                                                    100%
  PatternKit.Examples.TemplateMethodGeneratorDemo.ImportWorkflow                                                   100%
  PatternKit.Examples.TemplateMethodGeneratorDemo.ImportWorkflowDemo                                              88.4%
  PatternKit.Examples.TemplateMethodGeneratorDemo.OrderContext                                                     100%
  PatternKit.Examples.TemplateMethodGeneratorDemo.OrderProcessingDemo                                             85.7%
  PatternKit.Examples.TemplateMethodGeneratorDemo.OrderProcessingWorkflow                                           97%
  PatternKit.Examples.VisitorDemo.Card                                                                             100%
  PatternKit.Examples.VisitorDemo.Cash                                                                             100%
  PatternKit.Examples.VisitorDemo.CountersHandler                                                                  100%
  PatternKit.Examples.VisitorDemo.Demo                                                                             100%
  PatternKit.Examples.VisitorDemo.GiftCard                                                                         100%
  PatternKit.Examples.VisitorDemo.ReceiptRendering                                                                 100%
  PatternKit.Examples.VisitorDemo.Routing                                                                          100%
  PatternKit.Examples.VisitorDemo.StoreCredit                                                                      100%
  PatternKit.Examples.VisitorDemo.Tender                                                                           100%
  PatternKit.Examples.VisitorDemo.Unknown                                                                          100%

PatternKit.Generators                                                                                             91.6%
  PatternKit.Generators.Builders.BuilderGenerator                                                                 96.3%
  PatternKit.Generators.ComposerGenerator                                                                         87.6%
  PatternKit.Generators.DecoratorGenerator                                                                        90.5%
  PatternKit.Generators.FacadeGenerator                                                                           92.8%
  PatternKit.Generators.Factories.FactoriesGenerator                                                              86.6%
  PatternKit.Generators.MementoGenerator                                                                          94.8%
  PatternKit.Generators.Messaging.DispatcherGenerator                                                             98.1%
  PatternKit.Generators.PrototypeGenerator                                                                        95.3%
  PatternKit.Generators.ProxyGenerator                                                                              85%
  PatternKit.Generators.StrategyGenerator                                                                         93.9%
  PatternKit.Generators.TemplateGenerator                                                                         84.6%
  PatternKit.Generators.VisitorGenerator                                                                          99.4%

PatternKit.Generators.Abstractions                                                                                33.6%
  PatternKit.Generators.Builders.BuilderRequiredAttribute                                                          100%
  PatternKit.Generators.Builders.GenerateBuilderAttribute                                                          100%
  PatternKit.Generators.Composer.ComposerAttribute                                                                   0%
  PatternKit.Generators.Composer.ComposeStepAttribute                                                                0%
  PatternKit.Generators.Decorator.GenerateDecoratorAttribute                                                         0%
  PatternKit.Generators.Facade.FacadeExposeAttribute                                                                 0%
  PatternKit.Generators.Facade.FacadeMapAttribute                                                                    0%
  PatternKit.Generators.Facade.GenerateFacadeAttribute                                                               0%
  PatternKit.Generators.Factories.FactoryCaseAttribute                                                             100%
  PatternKit.Generators.Factories.FactoryClassAttribute                                                            100%
  PatternKit.Generators.Factories.FactoryClassKeyAttribute                                                         100%
  PatternKit.Generators.Factories.FactoryMethodAttribute                                                           100%
  PatternKit.Generators.GenerateStrategyAttribute                                                                  100%
  PatternKit.Generators.MementoAttribute                                                                             0%
  PatternKit.Generators.MementoStrategyAttribute                                                                     0%
  PatternKit.Generators.Messaging.GenerateDispatcherAttribute                                                        0%
  PatternKit.Generators.Prototype.PrototypeAttribute                                                                 0%
  PatternKit.Generators.Prototype.PrototypeStrategyAttribute                                                         0%
  PatternKit.Generators.Proxy.GenerateProxyAttribute                                                                 0%
  PatternKit.Generators.Template.TemplateAttribute                                                                   0%
  PatternKit.Generators.Template.TemplateHookAttribute                                                               0%
  PatternKit.Generators.Template.TemplateStepAttribute                                                               0%
  PatternKit.Generators.Visitors.GenerateVisitorAttribute                                                            0%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Generator: Create Template Method Pattern

2 participants