diff --git a/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj b/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj
index 5e87042..81f76f8 100644
--- a/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj
+++ b/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj
@@ -1,8 +1,10 @@
- netstandard2.0;net472
false
false
+ net6.0
+ enable
+ 10
full
@@ -20,8 +22,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md b/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md
index d9a71c7..aa5f43d 100644
--- a/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md
+++ b/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md
@@ -2,13 +2,13 @@
## DesignByContractViolationException : Exception
- TargetSite: MethodBase { get; }
- - StackTrace: string { get; }
- Message: string? [Nullable] { get; }
- Data: IDictionary? [Nullable] { get; }
- InnerException: Exception { get; }
- HelpLink: string { get; set; }
- Source: string { get; set; }
- HResult: int { get; set; }
+ - StackTrace: string { get; }
## Fail
- Fail.IfTooLong(
@@ -139,13 +139,13 @@
) : DateTime [Extension, AssertionMethod]
- Fail.BecauseEnumOutOfRange(
value: T
- ) : DesignByContractViolationException [NotNull, Pure]
+ ) : DesignByContractViolationException? [NullableContext, NotNull, Pure]
- Fail.IfEnumNotDefined(
value: object [NotNull, NotNull]
) : Void
- Fail.IfEnumNotDefined(
value: T
- ) : Void
+ ) : Void? [NullableContext]
- Fail.FailIfEnumOutOfRange(
value: Enum [NotNull, NotNull],
name: string [NotNull, NotNull]
@@ -201,8 +201,8 @@
) : T [Extension, NotNull, AssertionMethod, ContractAnnotation]
- Fail.OrFail(
value: Nullable`1,
- name: string [NotNull, NotNull]
- ) : T [Extension, ContractAnnotation]
+ name: string? [Nullable, NotNull, NotNull]
+ ) : T? [NullableContext, Extension, ContractAnnotation]
- Fail.NotNull(
value: T [CanBeNull, AssertionCondition, NoEnumeration],
name: string [NotNull, NotNull]
@@ -247,7 +247,7 @@
argumentName: string [NotNull, NotNull]
) : Void [AssertionMethod, ContractAnnotation]
- Fail.OrFailIfWhiteSpace(
- value: string [CanBeNull, AssertionCondition, NoEnumeration],
+ value: string? [Nullable, AssertionCondition, NoEnumeration],
name: string [NotNull, NotNull]
) : string [Extension, NotNull, AssertionMethod, ContractAnnotation]
- Fail.IfWhitespace(
@@ -270,8 +270,9 @@
description: string
) : Principle [MustUseReturnValue]
- Business.When(
- preCondition: bool
- ) : Precondition [MustUseReturnValue]
+ preCondition: bool,
+ expression: string [CallerArgumentExpression, Optional]
+ ) : Precondition? [NullableContext, MustUseReturnValue]
- Business.Requires(
condition: bool
) : Requirement [MustUseReturnValue]
@@ -279,13 +280,13 @@
## Requirements.BusinessRuleViolationException : Exception
- Requirement: Requirement { get; }
- TargetSite: MethodBase { get; }
- - StackTrace: string { get; }
- Message: string? [Nullable] { get; }
- Data: IDictionary? [Nullable] { get; }
- InnerException: Exception { get; }
- HelpLink: string { get; set; }
- Source: string { get; set; }
- HResult: int { get; set; }
+ - StackTrace: string { get; }
## Requirements.Business+Precondition (struct)
- Met: bool { get; }
diff --git a/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt b/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt
index 50b0100..f3bfafb 100644
--- a/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt
+++ b/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt
@@ -1,6 +1,6 @@
[assembly: System.Resources.NeutralResourcesLanguage("en")]
[assembly: System.Runtime.InteropServices.ComVisible(false)]
-[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v5.0", FrameworkDisplayName="")]
+[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")]
namespace Synergy.Contracts
{
[System.Serializable]
@@ -207,7 +207,7 @@ namespace Synergy.Contracts
[JetBrains.Annotations.ContractAnnotation("value: null => halt; value: notnull => notnull")]
[JetBrains.Annotations.NotNull]
[return: System.Diagnostics.CodeAnalysis.NotNull]
- public static string OrFailIfWhiteSpace([JetBrains.Annotations.AssertionCondition(JetBrains.Annotations.AssertionConditionType.IS_NOT_NULL)] [JetBrains.Annotations.CanBeNull] [JetBrains.Annotations.NoEnumeration] this string value, [JetBrains.Annotations.NotNull] [System.Diagnostics.CodeAnalysis.NotNull] string name) { }
+ public static string OrFailIfWhiteSpace([JetBrains.Annotations.AssertionCondition(JetBrains.Annotations.AssertionConditionType.IS_NOT_NULL)] [JetBrains.Annotations.NoEnumeration] this string? value, [JetBrains.Annotations.NotNull] [System.Diagnostics.CodeAnalysis.NotNull] string name) { }
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "HeapView.BoxingAllocation")]
public readonly struct Violation
@@ -230,7 +230,7 @@ namespace Synergy.Contracts.Requirements
[JetBrains.Annotations.MustUseReturnValue]
public static Synergy.Contracts.Requirements.Business.Principle Rule(string description) { }
[JetBrains.Annotations.MustUseReturnValue]
- public static Synergy.Contracts.Requirements.Business.Precondition When(bool preCondition) { }
+ public static Synergy.Contracts.Requirements.Business.Precondition When(bool preCondition, [System.Runtime.CompilerServices.CallerArgumentExpression("preCondition")] string? expression = null) { }
public interface IPrecondition
{
bool Met { get; }
diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs
index 770efe9..5177c9a 100644
--- a/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs
+++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs
@@ -12,6 +12,11 @@ namespace Synergy.Contracts.Test.Requirements
{
public class BusinessDocumentation : BusinessTest
{
+ public static string? Read(string method)
+ {
+ return ClassReader.ReadMethodBody(method);
+ }
+
[Fact]
public void General()
{
@@ -57,6 +62,8 @@ private void Step1Sample()
yield return new Markdown.Paragraph("This will throw `NotImplementedException` for sure. But we have not finished our job yet.");
}
+
+
private void Step2Sample(int withdrawLimit, int withdrawAmount)
{
Business.Rule("When withdraw limit is set, withdrawn amount cannot exceed the limit")
diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs
new file mode 100644
index 0000000..235ab24
--- /dev/null
+++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs
@@ -0,0 +1,20 @@
+using System;
+using Synergy.Contracts.Requirements;
+using Synergy.Contracts.Test.Documentation;
+
+namespace Synergy.Contracts.Test.Requirements
+{
+ partial class BusinessUsage
+ {
+ private static string? Read(string method)
+ {
+ return ClassReader.ReadMethodBody(method);
+ }
+
+ public void Step1Sample()
+ {
+ Business.Rule("When withdraw limit is set, withdrawn amount cannot exceed the limit")
+ .Throws(new NotImplementedException("NOT IMPLEMENTED"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs
new file mode 100644
index 0000000..58ca63b
--- /dev/null
+++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs
@@ -0,0 +1,314 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version: 16.0.0.0
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+// ------------------------------------------------------------------------------
+namespace Synergy.Contracts.Test.Requirements
+{
+ using System;
+
+ ///
+ /// Class to produce the template output
+ ///
+
+ #line 1 "C:\Projects\Synergy\framework\src\Contracts\Synergy.Contracts.Test\Requirements\BusinessUsage.tt"
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")]
+ public partial class BusinessUsage : BusinessUsageBase
+ {
+#line hidden
+ ///
+ /// Create the template output
+ ///
+ public virtual string TransformText()
+ {
+ this.Write("\r\n# Business class\r\n\r\n## Definition\r\n\r\nNamespace: Synergy.Contracts.Requirements
\r\nAssembly: Synergy.Contracts.dll\r\n\r\nAllows to create business requirement verification conditions and checks.\r\n\r\n## Methods\r\n\r\n| Name | Summary |\r\n|------|---------|\r\n| Rule(string) | Gets rule with description only. |\r\n| When(bool, string) | |\r\n| Requires(bool) | |\r\n\r\n## Examples\r\n\r\n### First step: business requirements gathering\r\n\r\nQuite often you might hear during analysis phase of your project such words:\r\n\r\n> When withdraw limit is set, withdrawn amount cannot exceed the limit\r\n\r\nWhen you hear such sentence just start your development by writing it down like that:\r\n\r\n``` csharp\r\n");
+
+ #line 32 "C:\Projects\Synergy\framework\src\Contracts\Synergy.Contracts.Test\Requirements\BusinessUsage.tt"
+ this.Write(this.ToStringHelper.ToStringWithCulture(Read(nameof(this.Step1Sample))));
+
+ #line default
+ #line hidden
+ this.Write("\r\n```\r\n\r\ntest");
+ return this.GenerationEnvironment.ToString();
+ }
+ }
+
+ #line default
+ #line hidden
+ #region Base class
+ ///
+ /// Base class for this transformation
+ ///
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")]
+ public class BusinessUsageBase
+ {
+ #region Fields
+ private global::System.Text.StringBuilder generationEnvironmentField;
+ private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField;
+ private global::System.Collections.Generic.List indentLengthsField;
+ private string currentIndentField = "";
+ private bool endsWithNewline;
+ private global::System.Collections.Generic.IDictionary sessionField;
+ #endregion
+ #region Properties
+ ///
+ /// The string builder that generation-time code is using to assemble generated output
+ ///
+ protected System.Text.StringBuilder GenerationEnvironment
+ {
+ get
+ {
+ if ((this.generationEnvironmentField == null))
+ {
+ this.generationEnvironmentField = new global::System.Text.StringBuilder();
+ }
+ return this.generationEnvironmentField;
+ }
+ set
+ {
+ this.generationEnvironmentField = value;
+ }
+ }
+ ///
+ /// The error collection for the generation process
+ ///
+ public System.CodeDom.Compiler.CompilerErrorCollection Errors
+ {
+ get
+ {
+ if ((this.errorsField == null))
+ {
+ this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection();
+ }
+ return this.errorsField;
+ }
+ }
+ ///
+ /// A list of the lengths of each indent that was added with PushIndent
+ ///
+ private System.Collections.Generic.List indentLengths
+ {
+ get
+ {
+ if ((this.indentLengthsField == null))
+ {
+ this.indentLengthsField = new global::System.Collections.Generic.List();
+ }
+ return this.indentLengthsField;
+ }
+ }
+ ///
+ /// Gets the current indent we use when adding lines to the output
+ ///
+ public string CurrentIndent
+ {
+ get
+ {
+ return this.currentIndentField;
+ }
+ }
+ ///
+ /// Current transformation session
+ ///
+ public virtual global::System.Collections.Generic.IDictionary Session
+ {
+ get
+ {
+ return this.sessionField;
+ }
+ set
+ {
+ this.sessionField = value;
+ }
+ }
+ #endregion
+ #region Transform-time helpers
+ ///
+ /// Write text directly into the generated output
+ ///
+ public void Write(string textToAppend)
+ {
+ if (string.IsNullOrEmpty(textToAppend))
+ {
+ return;
+ }
+ // If we're starting off, or if the previous text ended with a newline,
+ // we have to append the current indent first.
+ if (((this.GenerationEnvironment.Length == 0)
+ || this.endsWithNewline))
+ {
+ this.GenerationEnvironment.Append(this.currentIndentField);
+ this.endsWithNewline = false;
+ }
+ // Check if the current text ends with a newline
+ if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture))
+ {
+ this.endsWithNewline = true;
+ }
+ // This is an optimization. If the current indent is "", then we don't have to do any
+ // of the more complex stuff further down.
+ if ((this.currentIndentField.Length == 0))
+ {
+ this.GenerationEnvironment.Append(textToAppend);
+ return;
+ }
+ // Everywhere there is a newline in the text, add an indent after it
+ textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField));
+ // If the text ends with a newline, then we should strip off the indent added at the very end
+ // because the appropriate indent will be added when the next time Write() is called
+ if (this.endsWithNewline)
+ {
+ this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length));
+ }
+ else
+ {
+ this.GenerationEnvironment.Append(textToAppend);
+ }
+ }
+ ///
+ /// Write text directly into the generated output
+ ///
+ public void WriteLine(string textToAppend)
+ {
+ this.Write(textToAppend);
+ this.GenerationEnvironment.AppendLine();
+ this.endsWithNewline = true;
+ }
+ ///
+ /// Write formatted text directly into the generated output
+ ///
+ public void Write(string format, params object[] args)
+ {
+ this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args));
+ }
+ ///
+ /// Write formatted text directly into the generated output
+ ///
+ public void WriteLine(string format, params object[] args)
+ {
+ this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args));
+ }
+ ///
+ /// Raise an error
+ ///
+ public void Error(string message)
+ {
+ System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError();
+ error.ErrorText = message;
+ this.Errors.Add(error);
+ }
+ ///
+ /// Raise a warning
+ ///
+ public void Warning(string message)
+ {
+ System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError();
+ error.ErrorText = message;
+ error.IsWarning = true;
+ this.Errors.Add(error);
+ }
+ ///
+ /// Increase the indent
+ ///
+ public void PushIndent(string indent)
+ {
+ if ((indent == null))
+ {
+ throw new global::System.ArgumentNullException("indent");
+ }
+ this.currentIndentField = (this.currentIndentField + indent);
+ this.indentLengths.Add(indent.Length);
+ }
+ ///
+ /// Remove the last indent that was added with PushIndent
+ ///
+ public string PopIndent()
+ {
+ string returnValue = "";
+ if ((this.indentLengths.Count > 0))
+ {
+ int indentLength = this.indentLengths[(this.indentLengths.Count - 1)];
+ this.indentLengths.RemoveAt((this.indentLengths.Count - 1));
+ if ((indentLength > 0))
+ {
+ returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength));
+ this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength));
+ }
+ }
+ return returnValue;
+ }
+ ///
+ /// Remove any indentation
+ ///
+ public void ClearIndent()
+ {
+ this.indentLengths.Clear();
+ this.currentIndentField = "";
+ }
+ #endregion
+ #region ToString Helpers
+ ///
+ /// Utility class to produce culture-oriented representation of an object as a string.
+ ///
+ public class ToStringInstanceHelper
+ {
+ private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture;
+ ///
+ /// Gets or sets format provider to be used by ToStringWithCulture method.
+ ///
+ public System.IFormatProvider FormatProvider
+ {
+ get
+ {
+ return this.formatProviderField ;
+ }
+ set
+ {
+ if ((value != null))
+ {
+ this.formatProviderField = value;
+ }
+ }
+ }
+ ///
+ /// This is called from the compile/run appdomain to convert objects within an expression block to a string
+ ///
+ public string ToStringWithCulture(object objectToConvert)
+ {
+ if ((objectToConvert == null))
+ {
+ throw new global::System.ArgumentNullException("objectToConvert");
+ }
+ System.Type t = objectToConvert.GetType();
+ System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] {
+ typeof(System.IFormatProvider)});
+ if ((method == null))
+ {
+ return objectToConvert.ToString();
+ }
+ else
+ {
+ return ((string)(method.Invoke(objectToConvert, new object[] {
+ this.formatProviderField })));
+ }
+ }
+ }
+ private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper();
+ ///
+ /// Helper to produce culture-oriented representation of an object as a string
+ ///
+ public ToStringInstanceHelper ToStringHelper
+ {
+ get
+ {
+ return this.toStringHelperField;
+ }
+ }
+ #endregion
+ }
+ #endregion
+}
diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt
new file mode 100644
index 0000000..1ea47d9
--- /dev/null
+++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt
@@ -0,0 +1,35 @@
+<#@ template language="C#" #>
+<#@output extension=".md"#>
+
+# Business class
+
+## Definition
+
+Namespace: Synergy.Contracts.Requirements
+Assembly: Synergy.Contracts.dll
+
+Allows to create business requirement verification conditions and checks.
+
+## Methods
+
+| Name | Summary |
+|------|---------|
+| Rule(string) | Gets rule with description only. |
+| When(bool, string) | |
+| Requires(bool) | |
+
+## Examples
+
+### First step: business requirements gathering
+
+Quite often you might hear during analysis phase of your project such words:
+
+> When withdraw limit is set, withdrawn amount cannot exceed the limit
+
+When you hear such sentence just start your development by writing it down like that:
+
+``` csharp
+<#= Read(nameof(this.Step1Sample)) #>
+```
+
+test
\ No newline at end of file
diff --git a/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj b/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj
index f0c1fb6..4d8e1df 100644
--- a/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj
+++ b/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj
@@ -3,8 +3,8 @@
false
false
enable
- 9
- net5.0
+ 10
+ net6.0
full
@@ -24,9 +24,15 @@
+
+
+ True
+ True
+ BusinessUsage.tt
+
@@ -35,5 +41,12 @@
+
+
+
+
+ TextTemplatingFilePreprocessor
+ BusinessUsage.cs
+
\ No newline at end of file
diff --git a/Contracts/Synergy.Contracts/Synergy.Contracts.csproj b/Contracts/Synergy.Contracts/Synergy.Contracts.csproj
index 44f638a..2982974 100644
--- a/Contracts/Synergy.Contracts/Synergy.Contracts.csproj
+++ b/Contracts/Synergy.Contracts/Synergy.Contracts.csproj
@@ -1,6 +1,6 @@
- net452;net472;net5.0;netcoreapp2.1;netcoreapp3.1;netstandard2.0;netstandard2.1
+ net472;net5.0;net6.0;netcoreapp2.1;netcoreapp3.1;netstandard2.0;netstandard2.1
false
false
true
@@ -13,7 +13,8 @@
Design by contract programming support
Copyright © Synergy Marcin Celej 2019
DbC Design-By-Contract Precondition Postcondition Contract Code-Contract Resharper Annotations R# jetbrains.annotations design contract programming SLARCH
- 9
+ 10
+ enable
full
diff --git a/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj b/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj
index dba51bd..f6e91ae 100644
--- a/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj
+++ b/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net472
+ net472;net6.0;netstandard2.0
8
enable
diff --git a/Contracts/Synergy.Contracts.Test/Documentation/ClassReader.cs b/Contracts/Synergy.Documentation/ClassReader.cs
similarity index 100%
rename from Contracts/Synergy.Contracts.Test/Documentation/ClassReader.cs
rename to Contracts/Synergy.Documentation/ClassReader.cs
diff --git a/Contracts/Synergy.Documentation/Synergy.Documentation.csproj b/Contracts/Synergy.Documentation/Synergy.Documentation.csproj
new file mode 100644
index 0000000..efdd810
--- /dev/null
+++ b/Contracts/Synergy.Documentation/Synergy.Documentation.csproj
@@ -0,0 +1,10 @@
+
+
+
+ enable
+ 10
+ net6.0
+ enable
+
+
+
diff --git a/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj b/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj
index 01b634a..e7f4cc4 100644
--- a/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj
+++ b/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj
@@ -1,8 +1,8 @@
- net5.0
enable
+ net5.0;net6.0
diff --git a/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj b/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj
index 8f68fcf..30ba819 100644
--- a/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj
+++ b/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj
@@ -1,8 +1,8 @@
- net5.0
enable
+ net5.0;net6.0
diff --git a/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md b/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md
index a819700..13b2953 100644
--- a/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md
+++ b/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md
@@ -23,10 +23,21 @@ The following example table shows result of method execution on System.String pu
| Method | Friendly name |
|--------|---------------|
+| Int32 LastIndexOf(System.String, Int32) | LastIndexOf(string, int) |
+| Int32 LastIndexOf(System.String, Int32, Int32) | LastIndexOf(string, int, int) |
+| Int32 LastIndexOf(System.String, System.StringComparison) | LastIndexOf(string, StringComparison) |
+| Int32 LastIndexOf(System.String, Int32, System.StringComparison) | LastIndexOf(string, int, StringComparison) |
+| Int32 LastIndexOf(System.String, Int32, Int32, System.StringComparison) | LastIndexOf(string, int, int, StringComparison) |
+| System.String PadRight(Int32) | PadRight(int) |
+| System.String PadRight(Int32, Char) | PadRight(int, char) |
+| System.String Remove(Int32, Int32) | Remove(int, int) |
+| System.String Remove(Int32) | Remove(int) |
| System.String Replace(System.String, System.String, Boolean, System.Globalization.CultureInfo) | Replace(string, string, bool, CultureInfo) |
| System.String Replace(System.String, System.String, System.StringComparison) | Replace(string, string, StringComparison) |
| System.String Replace(Char, Char) | Replace(char, char) |
| System.String Replace(System.String, System.String) | Replace(string, string) |
+| System.String ReplaceLineEndings() | ReplaceLineEndings() |
+| System.String ReplaceLineEndings(System.String) | ReplaceLineEndings(string) |
| System.String[] Split(Char, System.StringSplitOptions) | Split(char, StringSplitOptions) |
| System.String[] Split(Char, Int32, System.StringSplitOptions) | Split(char, int, StringSplitOptions) |
| System.String[] Split(Char[]) | Split(char[]) |
@@ -78,11 +89,8 @@ The following example table shows result of method execution on System.String pu
| Int32 LastIndexOfAny(Char[], Int32) | LastIndexOfAny(char[], int) |
| Int32 LastIndexOfAny(Char[], Int32, Int32) | LastIndexOfAny(char[], int, int) |
| Int32 LastIndexOf(System.String) | LastIndexOf(string) |
-| Int32 LastIndexOf(System.String, Int32) | LastIndexOf(string, int) |
-| Int32 LastIndexOf(System.String, Int32, Int32) | LastIndexOf(string, int, int) |
-| Int32 LastIndexOf(System.String, System.StringComparison) | LastIndexOf(string, StringComparison) |
-| Int32 LastIndexOf(System.String, Int32, System.StringComparison) | LastIndexOf(string, int, StringComparison) |
-| Int32 LastIndexOf(System.String, Int32, Int32, System.StringComparison) | LastIndexOf(string, int, int, StringComparison) |
+| Boolean IsNullOrEmpty(System.String) | IsNullOrEmpty(string) |
+| Boolean IsNullOrWhiteSpace(System.String) | IsNullOrWhiteSpace(string) |
| Char& GetPinnableReference() | GetPinnableReference() |
| System.String ToString() | ToString() |
| System.String ToString(System.IFormatProvider) | ToString(IFormatProvider) |
@@ -93,6 +101,8 @@ The following example table shows result of method execution on System.String pu
| Boolean IsNormalized(System.Text.NormalizationForm) | IsNormalized(NormalizationForm) |
| System.String Normalize() | Normalize() |
| System.String Normalize(System.Text.NormalizationForm) | Normalize(NormalizationForm) |
+| Char get_Chars(Int32) | get_Chars(int) |
+| Int32 get_Length() | get_Length() |
| System.String Concat(System.Object) | Concat(object) |
| System.String Concat(System.Object, System.Object) | Concat(object, object) |
| System.String Concat(System.Object, System.Object, System.Object) | Concat(object, object, object) |
@@ -116,22 +126,16 @@ The following example table shows result of method execution on System.String pu
| System.String Format(System.IFormatProvider, System.String, System.Object[]) | Format(IFormatProvider, string, object[]) |
| System.String Insert(Int32, System.String) | Insert(int, string) |
| System.String Join(Char, System.String[]) | Join(char, string[]) |
-| System.String Join(Char, System.Object[]) | Join(char, object[]) |
-| System.String Join[T](Char, System.Collections.Generic.IEnumerable`1[T]) | Join(char, IEnumerable) |
-| System.String Join(Char, System.String[], Int32, Int32) | Join(char, string[], int, int) |
| System.String Join(System.String, System.String[]) | Join(string, string[]) |
+| System.String Join(Char, System.String[], Int32, Int32) | Join(char, string[], int, int) |
+| System.String Join(System.String, System.String[], Int32, Int32) | Join(string, string[], int, int) |
+| System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String]) | Join(string, IEnumerable) |
+| System.String Join(Char, System.Object[]) | Join(char, object[]) |
| System.String Join(System.String, System.Object[]) | Join(string, object[]) |
+| System.String Join[T](Char, System.Collections.Generic.IEnumerable`1[T]) | Join(char, IEnumerable) |
| System.String Join[T](System.String, System.Collections.Generic.IEnumerable`1[T]) | Join(string, IEnumerable) |
-| System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String]) | Join(string, IEnumerable) |
-| System.String Join(System.String, System.String[], Int32, Int32) | Join(string, string[], int, int) |
| System.String PadLeft(Int32) | PadLeft(int) |
| System.String PadLeft(Int32, Char) | PadLeft(int, char) |
-| System.String PadRight(Int32) | PadRight(int) |
-| System.String PadRight(Int32, Char) | PadRight(int, char) |
-| System.String Remove(Int32, Int32) | Remove(int, int) |
-| System.String Remove(Int32) | Remove(int) |
-| Char get_Chars(Int32) | get_Chars(int) |
-| Int32 get_Length() | get_Length() |
| System.String Intern(System.String) | Intern(string) |
| System.String IsInterned(System.String) | IsInterned(string) |
| Int32 Compare(System.String, System.String) | Compare(string, string) |
@@ -168,14 +172,16 @@ The following example table shows result of method execution on System.String pu
| Boolean StartsWith(System.String, Boolean, System.Globalization.CultureInfo) | StartsWith(string, bool, CultureInfo) |
| Boolean StartsWith(Char) | StartsWith(char) |
| System.String Create[TState](Int32, TState, System.Buffers.SpanAction`2[System.Char,TState]) | Create(int, TState, SpanAction) |
+| System.String Create(System.IFormatProvider, System.Runtime.CompilerServices.DefaultInterpolatedStringHandler ByRef) | Create(IFormatProvider, DefaultInterpolatedStringHandler&) |
+| System.String Create(System.IFormatProvider, System.Span`1[System.Char], System.Runtime.CompilerServices.DefaultInterpolatedStringHandler ByRef) | Create(IFormatProvider, Span, DefaultInterpolatedStringHandler&) |
| System.ReadOnlySpan`1[System.Char] op_Implicit(System.String) | op_Implicit(string) |
| System.Object Clone() | Clone() |
| System.String Copy(System.String) | Copy(string) |
| Void CopyTo(Int32, Char[], Int32, Int32) | CopyTo(int, char[], int, int) |
+| Void CopyTo(System.Span`1[System.Char]) | CopyTo(Span) |
+| Boolean TryCopyTo(System.Span`1[System.Char]) | TryCopyTo(Span) |
| Char[] ToCharArray() | ToCharArray() |
| Char[] ToCharArray(Int32, Int32) | ToCharArray(int, int) |
-| Boolean IsNullOrEmpty(System.String) | IsNullOrEmpty(string) |
-| Boolean IsNullOrWhiteSpace(System.String) | IsNullOrWhiteSpace(string) |
| System.Type GetType() | GetType() |
The following example table shows result of method execution on some other methods
diff --git a/Synergy.Catalogue/Synergy.Catalogue.csproj b/Synergy.Catalogue/Synergy.Catalogue.csproj
index 1f804ae..9a0d0e0 100644
--- a/Synergy.Catalogue/Synergy.Catalogue.csproj
+++ b/Synergy.Catalogue/Synergy.Catalogue.csproj
@@ -1,8 +1,8 @@
- net5.0
enable
+ net6.0
diff --git a/Synergy.Framework.sln b/Synergy.Framework.sln
index 56fe3af..e51ef8a 100644
--- a/Synergy.Framework.sln
+++ b/Synergy.Framework.sln
@@ -67,6 +67,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Markdowns", "Markdo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Markdowns.Test", "Markdown\Synergy.Markdowns.Test\Synergy.Markdowns.Test.csproj", "{2464CDA4-AA2E-4932-A17A-7283647689B6}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Documentation", "Contracts\Synergy.Documentation\Synergy.Documentation.csproj", "{C2D8A794-86EC-48F5-A7ED-B7B6746757DA}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -169,6 +171,10 @@ Global
{2464CDA4-AA2E-4932-A17A-7283647689B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2464CDA4-AA2E-4932-A17A-7283647689B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2464CDA4-AA2E-4932-A17A-7283647689B6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -198,6 +204,7 @@ Global
{50DBF0BA-6592-4876-81DE-99D9684625E4} = {146E5D84-D923-4731-BAB4-8D46E30A1433}
{CDA7013B-5E75-4A1F-8549-F8B9057118B3} = {A72ACF23-1F2D-425F-A349-A39DA75C373D}
{2464CDA4-AA2E-4932-A17A-7283647689B6} = {A72ACF23-1F2D-425F-A349-A39DA75C373D}
+ {C2D8A794-86EC-48F5-A7ED-B7B6746757DA} = {146E5D84-D923-4731-BAB4-8D46E30A1433}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2DD5F49D-3F67-4D88-A29C-EFDBE7B76098}