Skip to content

Commit

Permalink
Use new language features.
Browse files Browse the repository at this point in the history
  • Loading branch information
sjp committed Nov 18, 2023
1 parent ba516ed commit e2ed823
Show file tree
Hide file tree
Showing 49 changed files with 60 additions and 64 deletions.
2 changes: 1 addition & 1 deletion src/SJP.Schematic.Core/ConnectionRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace SJP.Schematic.Core;
public static class ConnectionRegistry
{
private static readonly ConcurrentDictionary<Guid, WeakReference<IDbConnectionFactory>> ConnectionFactoryLookup = new();
private static readonly ConditionalWeakTable<IDbConnectionFactory, string> ConnectionIdLookup = new();
private static readonly ConditionalWeakTable<IDbConnectionFactory, string> ConnectionIdLookup = [];

/// <summary>
/// Registers a database connection factory by its identifier.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ private IEnumerable<AttributeListSyntax> BuildClassAttributes(IRelationalDatabas
var uniqueTrueArgument = AttributeArgument(
LiteralExpression(SyntaxKind.TrueLiteralExpression)
);
attrParams = new[] { uniqueTrueArgument }.Concat(attrParams).ToList();
attrParams = [uniqueTrueArgument, ..attrParams];
}

var compositeIndexAttribute = AttributeList(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ protected IEnumerable<IRuleMessage> AnalyseTable(IRelationalDatabaseTable table)
&& table.Indexes.Count == 0;

return noIndexesPresent
? new[] { BuildMessage(table.Name) }
? [BuildMessage(table.Name)]
: Array.Empty<IRuleMessage>();
}

Expand Down
2 changes: 1 addition & 1 deletion src/SJP.Schematic.Lint/Rules/NoSurrogatePrimaryKeyRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ protected IEnumerable<IRuleMessage> AnalyseTable(IRelationalDatabaseTable table)
var areAllColumnsFks = pk.Columns.All(c => fkColumns.Contains(c.Name.LocalName));
return areAllColumnsFks
? Array.Empty<IRuleMessage>()
: new[] { BuildMessage(table.Name) };
: [BuildMessage(table.Name)];
},
None: Array.Empty<IRuleMessage>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private async Task<IDatabaseRoutineComments> GetRoutineCommentsAsyncCore(Identif
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutineComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutineComments>> _commentsCache = [];

[Test]
public async Task GetRoutineComments_WhenRoutinePresent_ReturnsRoutineComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ private async Task<IRelationalDatabaseTableComments> GetTableCommentsAsyncCore(I
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = [];

[Test]
public async Task GetTableComments_WhenTablePresent_ReturnsTableComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ private async Task<IDatabaseRoutine> GetRoutineAsyncCore(Identifier routineName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = [];

[Test]
public async Task GetRoutine_WhenRoutinePresent_ReturnsRoutine()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ private async Task<IRelationalDatabaseTable> GetTableAsyncCore(Identifier tableN
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = [];

[Test]
public async Task GetTable_WhenTablePresent_ReturnsTable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ private async Task<IRelationalDatabaseTableComments> GetTableCommentsAsyncCore(I
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = [];

[Test]
public async Task GetTableComments_WhenTablePresent_ReturnsTableComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ private async Task<IOracleDatabasePackage> GetPackageAsyncCore(Identifier packag
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IOracleDatabasePackage>> _packagesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IOracleDatabasePackage>> _packagesCache = [];

[Test]
public async Task GetPackage_WhenPackagePresent_ReturnsPackage()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private async Task<IDatabaseSequence> GetSequenceAsyncCore(Identifier sequenceNa
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequence>> _sequencesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequence>> _sequencesCache = [];

private const int SequenceDefaultCache = 20;
private const int SequenceDefaultMinValue = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ private async Task<IDatabaseRoutine> GetRoutineAsyncCore(Identifier routineName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = [];

[Test]
public async Task GetRoutine_WhenRoutinePresent_ReturnsRoutine()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ private async Task<IRelationalDatabaseTable> GetTableAsyncCore(Identifier tableN
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = [];

[Test]
public async Task GetTable_WhenTablePresent_ReturnsTable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ private async Task<IReadOnlyCollection<IDatabaseIndex>> LoadIndexesAsyncCore(Ide
{
var order = string.Equals(row.IsDescending, Constants.Y, StringComparison.Ordinal) ? IndexColumnOrder.Descending : IndexColumnOrder.Ascending;
var indexColumns = columnLookup.ContainsKey(row.Column)
? new[] { columnLookup[row.Column] }
? [columnLookup[row.Column]]
: Array.Empty<IDatabaseColumn>();
var expression = Dialect.QuoteName(row.Column);
return new DatabaseIndexColumn(expression, indexColumns, order);
Expand Down
10 changes: 5 additions & 5 deletions src/SJP.Schematic.Oracle/OracleUnwrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,8 @@ private static Span<byte> ZlibToDeflate(Span<byte> bytes)
return bytes[zlibHeaderSize..endPosition];
}

private static readonly byte[] CharMap = new byte[]
{
private static readonly byte[] CharMap =
[
0x3D, 0x65, 0x85, 0xB3, 0x18, 0xDB, 0xE2, 0x87, 0xF1, 0x52, 0xAB, 0x63, 0x4B, 0xB5, 0xA0, 0x5F,
0x7D, 0x68, 0x7B, 0x9B, 0x24, 0xC2, 0x28, 0x67, 0x8A, 0xDE, 0xA4, 0x26, 0x1E, 0x03, 0xEB, 0x17,
0x6F, 0x34, 0x3E, 0x7A, 0x3F, 0xD2, 0xA9, 0x6A, 0x0F, 0xE9, 0x35, 0x56, 0x1F, 0xB1, 0x4D, 0x10,
Expand All @@ -331,10 +331,10 @@ private static Span<byte> ZlibToDeflate(Span<byte> bytes)
0x8F, 0x2E, 0xF4, 0x12, 0xC6, 0x2B, 0x83, 0xCD, 0xAC, 0xCB, 0x3B, 0xC4, 0x4E, 0xC0, 0x69, 0x36,
0x62, 0x02, 0xAE, 0x88, 0xFC, 0xAA, 0x42, 0x08, 0xA6, 0x45, 0x57, 0xD3, 0x9A, 0xBD, 0xE1, 0x23,
0x8D, 0x92, 0x4A, 0x11, 0x89, 0x74, 0x6B, 0x91, 0xFB, 0xFE, 0xC9, 0x01, 0xEA, 0x1B, 0xF7, 0xCE
};
];

private const char CarriageReturn = '\r';
private static readonly char[] SpaceChar = new[] { ' ' };
private static readonly char[] NewlineChars = new[] { '\r', '\n' };
private static readonly char[] SpaceChar = [' '];
private static readonly char[] NewlineChars = ['\r', '\n'];
private static readonly OracleTokenizer Tokenizer = new();
}
6 changes: 3 additions & 3 deletions src/SJP.Schematic.Oracle/Parsing/OracleTokenizer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,12 @@ private static bool TryGetKeyword(TextSpan span, out OracleToken keyword)
return false;
}

private static readonly char[] AdditionalIdentifierChars = new[] { '$', '#', '_' };
private static readonly char[] AdditionalIdentifierChars = ['$', '#', '_'];

private static readonly OracleToken[] SimpleOps = new OracleToken[128];

private static readonly OracleKeyword[] SqlKeywords =
{
[
new OracleKeyword("add", OracleToken.Add),
new OracleKeyword("all", OracleToken.All),
new OracleKeyword("alter", OracleToken.Alter),
Expand Down Expand Up @@ -382,5 +382,5 @@ private static bool TryGetKeyword(TextSpan span, out OracleToken keyword)
new OracleKeyword("with", OracleToken.With),
new OracleKeyword("within", OracleToken.Within),
new OracleKeyword("writetext", OracleToken.WriteText)
};
];
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ private async Task<IDatabaseSequenceComments> GetSequenceCommentsAsyncCore(Ident
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequenceComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequenceComments>> _commentsCache = [];

[Test]
public async Task GetSequenceComments_WhenSequencePresent_ReturnsSequenceComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private async Task<IRelationalDatabaseTableComments> GetTableCommentsAsyncCore(I
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = [];

[Test]
public async Task GetTableComments_WhenTablePresent_ReturnsTableComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private async Task<IDatabaseViewComments> GetViewCommentsAsyncCore(Identifier vi
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseViewComments>> _commentsCache = [];

[Test]
public async Task GetViewComments_WhenViewPresent_ReturnsViewComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private Task<IDatabaseView> GetViewAsync(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private async Task<IDatabaseRoutine> GetRoutineAsyncCore(Identifier routineName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutine>> _routinesCache = [];

[Test]
public async Task GetRoutine_WhenRoutinePresent_ReturnsRoutine()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ private async Task<IDatabaseView> GetViewAsyncCore(Identifier viewName)
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseView>> _viewsCache = [];

[Test]
public async Task GetView_WhenViewPresent_ReturnsView()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ private async Task<IRelationalDatabaseTable> GetTableAsyncCore(Identifier tableN
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTable>> _tablesCache = [];

[Test]
public async Task GetTable_WhenTablePresent_ReturnsTable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -773,8 +773,7 @@ protected static int CreatePrecisionFromBase(int precision, int radix)
{
if (precision <= 0)
return 0;
if (radix < 0)
throw new ArgumentOutOfRangeException(nameof(radix));
ArgumentOutOfRangeException.ThrowIfNegative(radix);

var newPrecision = Convert.ToInt64(Math.Pow(precision, radix));
var newPrecisionStr = newPrecision.ToString(CultureInfo.InvariantCulture);
Expand All @@ -792,12 +791,9 @@ protected static int CreatePrecisionFromBase(int precision, int radix)
/// <exception cref="ArgumentOutOfRangeException"><paramref name="precision"/> or <paramref name="scale"/> or <paramref name="radix"/> are less than zero.</exception>
protected static INumericPrecision CreatePrecisionWithScaleFromBase(int precision, int scale, int radix)
{
if (precision < 0)
throw new ArgumentOutOfRangeException(nameof(precision));
if (scale < 0)
throw new ArgumentOutOfRangeException(nameof(scale));
if (radix < 0)
throw new ArgumentOutOfRangeException(nameof(radix));
ArgumentOutOfRangeException.ThrowIfNegative(precision);
ArgumentOutOfRangeException.ThrowIfNegative(scale);
ArgumentOutOfRangeException.ThrowIfNegative(radix);

var newPrecision = Convert.ToInt64(Math.Pow(precision, radix));
var newPrecisionStr = newPrecision.ToString(CultureInfo.InvariantCulture);
Expand Down
2 changes: 1 addition & 1 deletion src/SJP.Schematic.Serialization/MapperRegistry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal static class MapperRegistry
{
private sealed record TypePair(Type SourceType, Type TargetType);

private static readonly Dictionary<TypePair, object> _cache = new();
private static readonly Dictionary<TypePair, object> _cache = [];

static MapperRegistry()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ private async Task<IDatabaseRoutineComments> GetRoutineCommentsAsyncCore(Identif
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutineComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseRoutineComments>> _commentsCache = [];

[Test]
public async Task GetRoutineComments_WhenRoutinePresent_ReturnsRoutineComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ private async Task<IDatabaseSequenceComments> GetSequenceCommentsAsyncCore(Ident
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequenceComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSequenceComments>> _commentsCache = [];

[Test]
public async Task GetSequenceComments_WhenSequencePresent_ReturnsSequenceComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private async Task<IDatabaseSynonymComments> GetSynonymCommentsAsyncCore(Identif
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSynonymComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IDatabaseSynonymComments>> _commentsCache = [];

[Test]
public async Task GetSynonymComments_WhenSynonymPresent_ReturnsSynonymComment()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ private async Task<IRelationalDatabaseTableComments> GetTableCommentsAsyncCore(I
}

private readonly AsyncLock _lock = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = new();
private readonly Dictionary<Identifier, AsyncLazy<IRelationalDatabaseTableComments>> _commentsCache = [];

[Test]
public async Task GetTableComments_WhenTablePresent_ReturnsTableComment()
Expand Down
Loading

0 comments on commit e2ed823

Please sign in to comment.