Skip to content

Commit f9c5bf8

Browse files
authored
chore: Reduce suggestion analyzer message (#10578)
* chore: suppress CA1512 messages * chore: suppress CA1514 messages * chore: suppress CA1816 messages * chore: suppress CA1822 messages * chore: suppress CA1827 messages * chore: suppress CA1845 messages * chore: suppress CA1860 messages * chore: suppress CA1861 messages * chore: suppress CA1866 messages * chore: suppress CA1869 messages * chore: suppress CA2016 messages * chore: suppress CA2211 messages * chore: suppress CA2263 messages * chore: suppress IDE0004 messages * chore: suppress IDE0019 messages * chore: suppress IDE0044 messages * chore: suppress IDE0051 messages * chore: suppress IDE0052 messages * chore: suppress IDE0058 messages * chore: suppress IDE0130 messages * chore: suppress IDE0530 messages * chore: suppress SYSLIB1045 messages * chore: suppress xUnit2022 messages * chore: suppress xUnit2024 messages * chore: suppress IDE0303 messages * chore: suppress IDE0036 messages * chore: suppress xUnit1033 messages
1 parent 7cd9f7d commit f9c5bf8

File tree

49 files changed

+97
-124
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+97
-124
lines changed

.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,11 @@ dotnet_diagnostic.IDE0005.severity = warning # IDE0005: Remove unnecessary im
158158
dotnet_diagnostic.IDE0035.severity = suggestion # IDE0035: Remove unreachable code
159159
dotnet_diagnostic.IDE0051.severity = suggestion # IDE0051: Remove unused private member
160160
dotnet_diagnostic.IDE0052.severity = suggestion # IDE0052: Remove unread private member
161+
dotnet_diagnostic.IDE0058.severity = silent # IDE0058: Remove unnecessary expression value
161162
dotnet_diagnostic.IDE0080.severity = suggestion # IDE0080: Remove unnecessary suppression operator
162163
dotnet_diagnostic.IDE0100.severity = suggestion # IDE0100: Remove unnecessary equality operator
163164
dotnet_diagnostic.IDE0110.severity = suggestion # IDE0110: Remove unnecessary discard
165+
dotnet_diagnostic.IDE0130.severity = silent # IDE0130: Namespace does not match folder structure
164166
dotnet_diagnostic.IDE0240.severity = suggestion # IDE0240: Nullable directive is redundant
165167
dotnet_diagnostic.IDE0241.severity = suggestion # IDE0241: Nullable directive is unnecessary
166168

src/Docfx.App/PdfBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ Task<byte[]> PrintHeaderFooter(Outline toc, int pageNumber, int totalPages, Page
221221

222222
async Task<byte[]> PrintHeaderFooterCore()
223223
{
224-
await pageLimiter.WaitAsync();
224+
await pageLimiter.WaitAsync(cancellationToken);
225225
var page = pagePool.TryTake(out var pooled) ? pooled : await context.NewPageAsync();
226226

227227
try

src/Docfx.Build.Common/DisposableDocumentProcessor.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ public abstract class DisposableDocumentProcessor : IDocumentProcessor, IDisposa
2222

2323
public void Dispose()
2424
{
25+
Dispose(true);
26+
GC.SuppressFinalize(this);
27+
}
28+
29+
protected virtual void Dispose(bool disposing)
30+
{
31+
if (!disposing)
32+
return;
33+
2534
if (BuildSteps != null)
2635
{
2736
foreach (var buildStep in BuildSteps)

src/Docfx.Build.RestApi/RestApiDocumentProcessor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@ private static void CheckOperationId(SwaggerModel swagger, string fileName)
248248

249249
private static string ChangeFileExtension(string file)
250250
{
251-
return file.Substring(0, file.Length - SupportedFileEndings.First(s => IsSupportedFileEnding(file, s)).Length) + ".json";
251+
var suffix = SupportedFileEndings.First(s => IsSupportedFileEnding(file, s));
252+
return $"{file.AsSpan(0, file.Length - suffix.Length)}.json";
252253
}
253254

254255
private static Dictionary<string, object> MergeMetadata(IDictionary<string, object> item, IDictionary<string, object> overwriteItems)

src/Docfx.Build.SchemaDriven/Processors/MarkdownInterpreter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private static string MarkupCore(string content, IProcessContext context, string
3737
context.Dependency.UnionWith(mr.Dependency);
3838

3939
if (mr.Html.StartsWith("<p"))
40-
mr.Html = mr.Html.Insert(mr.Html.IndexOf(">"), " jsonPath=\"" + path + "\"");
40+
mr.Html = mr.Html.Insert(mr.Html.IndexOf('>'), " jsonPath=\"" + path + "\"");
4141
return mr.Html;
4242
}
4343
}

src/Docfx.Build.SchemaDriven/Processors/MergeTypeInterpreter.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,4 @@ public object Interpret(BaseSchema schema, object value, IProcessContext context
1717
// TODO implement
1818
return value;
1919
}
20-
21-
private static object MergeCore(object value, IProcessContext context)
22-
{
23-
return value;
24-
}
2520
}

src/Docfx.Build.SchemaDriven/SchemaDrivenDocumentProcessor.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,7 @@ public override SaveResult Save(FileModel model)
185185

186186
if (((IDictionary<string, object>)model.Properties).TryGetValue("XrefSpec", out var value))
187187
{
188-
var xrefSpec = value as XRefSpec;
189-
if (xrefSpec != null)
188+
if (value is XRefSpec xrefSpec)
190189
{
191190
result.XRefSpecs = [xrefSpec];
192191
}

src/Docfx.Build/Conceptual/ConceptualDocumentProcessor.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,7 @@ public override SaveResult Save(FileModel model)
107107

108108
if (((IDictionary<string, object>)model.Properties).TryGetValue("XrefSpec", out var value))
109109
{
110-
var xrefSpec = value as XRefSpec;
111-
if (xrefSpec != null)
110+
if (value is XRefSpec xrefSpec)
112111
{
113112
result.XRefSpecs = [xrefSpec];
114113
}

src/Docfx.Build/DocumentBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
namespace Docfx.Build.Engine;
1414

15-
public class DocumentBuilder : IDisposable
15+
public sealed class DocumentBuilder : IDisposable
1616
{
1717
[ImportMany]
1818
internal IEnumerable<IDocumentProcessor> Processors { get; set; }
@@ -146,7 +146,7 @@ public void Build(IList<DocumentBuildParameters> parameters, string outputDirect
146146
.WriteToManifest(generatedManifest, parameters[0].OutputBaseDir)
147147
.Create();
148148

149-
_postProcessorsManager.Process(generatedManifest, outputDirectory);
149+
_postProcessorsManager.Process(generatedManifest, outputDirectory, cancellationToken);
150150

151151
generatedManifest.Dereference(parameters[0].OutputBaseDir, parameters[0].MaxParallelism);
152152

src/Docfx.Build/PostProcessors/ExtractSearchIndex.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ partial class ExtractSearchIndex : IPostProcessor
1818
[GeneratedRegex(@"\s+")]
1919
private static partial Regex s_regexWhiteSpace();
2020

21-
private static readonly Regex s_regexCase = new(@"[a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[0-9]+", RegexOptions.Compiled);
21+
22+
[GeneratedRegex(@"[a-z0-9]+|[A-Z0-9]+[a-z0-9]*|[0-9]+")]
23+
private static partial Regex s_regexCase();
2224

2325
private static readonly HashSet<string> s_htmlInlineTags = new(StringComparer.OrdinalIgnoreCase)
2426
{
@@ -185,7 +187,7 @@ private static string[] GetStems(string str)
185187
return [string.Empty];
186188
}
187189
str = WebUtility.HtmlDecode(str);
188-
return s_regexCase.Matches(str).Select(m => m.Value).ToArray();
190+
return s_regexCase().Matches(str).Select(m => m.Value).ToArray();
189191
}
190192

191193
private static List<string> GetStemAggregations(string str)

src/Docfx.Build/TableOfContents/TocDocumentProcessor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public override void UpdateHref(FileModel model, IDocumentBuildContext context)
7272
model.Content = toc;
7373
}
7474

75-
private void UpdateTocItemHref(TocItemViewModel toc, FileModel model, IDocumentBuildContext context, string includedFrom = null)
75+
private static void UpdateTocItemHref(TocItemViewModel toc, FileModel model, IDocumentBuildContext context, string includedFrom = null)
7676
{
7777
if (toc.IsHrefUpdated) return;
7878

@@ -170,7 +170,7 @@ private static string ResolveHref(string pathToFile, string originalPathToFile,
170170
return fli.Href + segments;
171171
}
172172

173-
private void RegisterTocToContext(TocItemViewModel toc, FileModel model, IDocumentBuildContext context)
173+
private static void RegisterTocToContext(TocItemViewModel toc, FileModel model, IDocumentBuildContext context)
174174
{
175175
var key = model.Key;
176176

@@ -180,7 +180,7 @@ private void RegisterTocToContext(TocItemViewModel toc, FileModel model, IDocume
180180
context.RegisterTocInfo(new() { TocFileKey = key, Order = toc.Order ?? 0 });
181181
}
182182

183-
private void RegisterTocMapToContext(TocItemViewModel item, FileModel model, IDocumentBuildContext context)
183+
private static void RegisterTocMapToContext(TocItemViewModel item, FileModel model, IDocumentBuildContext context)
184184
{
185185
var key = model.Key;
186186
// If tocHref is set, href is originally RelativeFolder type, and href is set to the homepage of TocHref,

src/Docfx.Build/TemplateProcessors/TemplateManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ private bool TryExportResourceFiles(List<string> resourceNames, string outputDir
8989
{
9090
ArgumentException.ThrowIfNullOrEmpty(outputDirectory);
9191

92-
if (!resourceNames.Any())
92+
if (resourceNames.Count == 0)
9393
return false;
9494

9595
bool isEmpty = true;

src/Docfx.Build/XRefMaps/XRefArchive.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public sealed class XRefArchive : IXRefContainer, IDisposable
1313
#region Consts / Fields
1414
public const string MajorFileName = "xrefmap.yml";
1515

16-
private readonly object _syncRoot = new();
1716
private readonly XRefArchiveMode _mode;
1817
private readonly ZipArchive _archive;
1918
private readonly List<string> _entries;

src/Docfx.Build/XRefMaps/XRefArchiveReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Docfx.Build.Engine;
77

8-
public class XRefArchiveReader : XRefRedirectionReader, IDisposable
8+
public sealed class XRefArchiveReader : XRefRedirectionReader, IDisposable
99
{
1010
#region Fields
1111
private readonly LruList<Tuple<string, XRefMap>> _lru;

src/Docfx.Build/XRefMaps/XRefCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public async Task<IXRefContainerReader> CreateAsync(CancellationToken cancellati
4444
AddToDownloadList(_uris, cancellationToken);
4545
var dict = new Dictionary<string, IXRefContainer>();
4646

47-
while (_processing.Any())
47+
while (_processing.Count != 0)
4848
{
4949
Task<IXRefContainer> task = await Task.WhenAny(_processing.Keys)
5050
.WaitAsync(cancellationToken);

src/Docfx.Build/XRefMaps/XRefMapDownloader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private ValueTask<IXRefContainer> ReadLocalFileWithFallback(Uri uri, Cancellatio
8080
/// <remarks>
8181
/// Support scheme: http, https, file.
8282
/// </remarks>
83-
private async ValueTask<IXRefContainer> DownloadBySchemeAsync(Uri uri, CancellationToken token = default)
83+
private static async ValueTask<IXRefContainer> DownloadBySchemeAsync(Uri uri, CancellationToken token = default)
8484
{
8585
IXRefContainer result;
8686
if (uri.IsFile)

src/Docfx.Common/Git/GitUtility.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static string GitUrlToHttps(string url)
168168
foreach (var text in File.ReadAllLines(configPath))
169169
{
170170
var line = text.Trim();
171-
if (line.StartsWith("["))
171+
if (line.StartsWith('['))
172172
{
173173
var remote = RemoteRegex().Replace(line, "$1");
174174
key = remote != line ? remote : "";

src/Docfx.Common/Loggers/CompositeLogListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace Docfx.Common;
55

6-
public class CompositeLogListener : ILoggerListener
6+
public sealed class CompositeLogListener : ILoggerListener
77
{
88
private readonly object _sync = new();
99
private readonly List<ILoggerListener> _listeners = [];

src/Docfx.Common/Path/RelativePath.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -447,10 +447,8 @@ private static RelativePath Create(bool isFromWorkingFolder, int parentDirectory
447447

448448
private IEnumerable<string> GetSubdirectories(int skip)
449449
{
450-
if (_parts.Length <= skip)
451-
{
452-
throw new ArgumentOutOfRangeException(nameof(skip));
453-
}
450+
ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(skip, _parts.Length);
451+
454452
return _parts.Take(_parts.Length - skip - 1);
455453
}
456454

src/Docfx.Common/YamlDeserializerWithFallback.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ private YamlDeserializerWithFallback(
1919
}
2020

2121
public static YamlDeserializerWithFallback Create<T>() =>
22-
new(
23-
(Func<TextReader> tr) => YamlUtility.Deserialize<T>(tr()),
24-
(string path) => YamlUtility.Deserialize<T>(path));
22+
new(tr => YamlUtility.Deserialize<T>(tr()),
23+
path => YamlUtility.Deserialize<T>(path));
2524

2625
public YamlDeserializerWithFallback WithFallback<T>() =>
2726
new(

src/Docfx.DataContracts.Common/ExternalReferences/ExternalReferencePackageWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Docfx.DataContracts.Common;
99

10-
public class ExternalReferencePackageWriter : IDisposable
10+
public sealed class ExternalReferencePackageWriter : IDisposable
1111
{
1212
private readonly ZipArchive _zip;
1313

src/Docfx.MarkdigEngine.Extensions/CodeSnippet/CodeSnippet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public string ToAttributeString()
111111

112112
public string GetHighlightLinesString()
113113
{
114-
if (HighlightRanges != null && HighlightRanges.Any())
114+
if (HighlightRanges != null && HighlightRanges.Count != 0)
115115
{
116116
return string.Join(',', HighlightRanges.Select(highlight =>
117117
{

src/Docfx.MarkdigEngine.Extensions/CodeSnippet/HtmlCodeSnippetRenderer.cs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,14 @@ static void BuildFileExtensionLanguageMap()
155155
{
156156
foreach (var (language, aliases) in s_languageAlias.Select(i => (i.Key, i.Value)))
157157
{
158-
Debug.Assert(!language.StartsWith("."));
158+
Debug.Assert(!language.StartsWith('.'));
159159

160160
s_languageByFileExtension.Add(language, language);
161161
s_languageByFileExtension.Add($".{language}", language);
162162

163163
foreach (var alias in aliases)
164164
{
165-
Debug.Assert(!alias.StartsWith("."));
165+
Debug.Assert(!alias.StartsWith('.'));
166166

167167
s_languageByFileExtension.Add(alias, language);
168168
s_languageByFileExtension.Add($".{alias}", language);
@@ -418,20 +418,6 @@ private static string CountAndReplaceIndentSpaces(string line, out int count)
418418
return sb.ToString();
419419
}
420420

421-
private static bool IsLineInRange(int lineNumber, List<CodeRange> allCodeRanges)
422-
{
423-
if (allCodeRanges.Count == 0) return true;
424-
425-
for (int rangeNumber = 0; rangeNumber < allCodeRanges.Count; rangeNumber++)
426-
{
427-
var range = allCodeRanges[rangeNumber];
428-
if (lineNumber >= range.Start && lineNumber <= range.End)
429-
return true;
430-
}
431-
432-
return false;
433-
}
434-
435421
private string GetWarning()
436422
{
437423
var warningTitle = _context.GetToken(WarningTitleId) ?? DefaultWarningTitle;

src/Docfx.MarkdigEngine.Extensions/ExtensionsHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ private static bool MatchPath(ref StringSlice slice, ref string path)
253253

254254
if (includedFilePath.Length >= 1 && includedFilePath.First() == '<' && slice.CurrentChar == '>')
255255
{
256-
includedFilePath = includedFilePath.Substring(1, includedFilePath.Length - 1).Trim();
256+
includedFilePath = includedFilePath.Substring(1).Trim();
257257
}
258258

259259
if (slice.CurrentChar == ')')

src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.NewtonsoftJson.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
4141
var name = prop.Name;
4242

4343
var options = prop.Value;
44-
if (options.Count() == 0)
44+
if (!options.Any())
4545
{
4646
return new MarkdigExtensionSetting(name);
4747
}

src/Docfx.MarkdigEngine.Extensions/MarkdigExtensionSettingConverter.SystemTextJson.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public override void Write(Utf8JsonWriter writer, MarkdigExtensionSetting value,
5353
if (value == null)
5454
return;
5555

56-
var model = (MarkdigExtensionSetting)value;
56+
var model = value;
5757

5858
if (model.Options == null || !model.Options.HasValue)
5959
{

src/Docfx.MarkdigEngine.Extensions/MarkdownExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public static MarkdownPipelineBuilder UseOptionalExtensions(
5959
this MarkdownPipelineBuilder pipeline,
6060
MarkdigExtensionSetting[] optionalExtensions)
6161
{
62-
if (!optionalExtensions.Any())
62+
if (optionalExtensions.Length == 0)
6363
{
6464
return pipeline;
6565
}

src/Docfx.MarkdigEngine.Extensions/MonikerRange/MonikerRangeParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace Docfx.MarkdigEngine.Extensions;
1010

1111
public class MonikerRangeParser : BlockParser
1212
{
13-
private const string StartString = "moniker";
13+
// private const string StartString = "moniker";
1414
private const string EndString = "moniker-end";
1515
private const char Colon = ':';
1616

src/Docfx.MarkdigEngine.Extensions/QuoteSectionNote/QuoteSectionNoteRender.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public static string FixUpLink(string link)
104104
{
105105
if (link.StartsWith("http:"))
106106
{
107-
link = "https:" + link.Substring("http:".Length);
107+
link = $"https:{link.AsSpan("http:".Length)}";
108108
}
109109
if (Uri.TryCreate(link, UriKind.Absolute, out Uri videoLink))
110110
{

src/Docfx.Plugins/DefaultFileAbstractLayer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace Docfx.Plugins;
77

8-
public class DefaultFileAbstractLayer : IFileAbstractLayer
8+
public sealed class DefaultFileAbstractLayer : IFileAbstractLayer
99
{
1010
public IEnumerable<string> GetAllInputFiles()
1111
{

src/Docfx.Plugins/DocumentExceptionExtensions.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ public static void RunAll<TElement>(this IEnumerable<TElement> elements, Action<
7272
{
7373
ArgumentNullException.ThrowIfNull(elements);
7474
ArgumentNullException.ThrowIfNull(action);
75-
76-
if (parallelism <= 0)
77-
{
78-
throw new ArgumentOutOfRangeException(nameof(parallelism));
79-
}
75+
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(parallelism);
8076

8177
try
8278
{

src/Docfx.YamlSerialization/YamlDeserializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public void RegisterTypeConverter(IYamlTypeConverter typeConverter)
146146

147147
public object? Deserialize(TextReader input, IValueDeserializer? deserializer = null)
148148
{
149-
return Deserialize(input, typeof(object), deserializer);
149+
return Deserialize<object>(input, deserializer);
150150
}
151151

152152
public object? Deserialize(TextReader input, Type type, IValueDeserializer? deserializer = null)
@@ -161,7 +161,7 @@ public void RegisterTypeConverter(IYamlTypeConverter typeConverter)
161161

162162
public object? Deserialize(IParser reader, IValueDeserializer? deserializer = null)
163163
{
164-
return Deserialize(reader, typeof(object), deserializer);
164+
return Deserialize<object>(reader, deserializer);
165165
}
166166

167167
/// <summary>

src/docfx/Models/MetadataCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private static Dictionary<string, string> ResolveMSBuildProperties(MetadataComma
6969
if (index > -1)
7070
{
7171
// Latter one overwrites former one
72-
properties[pair.Substring(0, index)] = pair.Substring(index + 1, pair.Length - index - 1);
72+
properties[pair.Substring(0, index)] = pair.Substring(index + 1);
7373
}
7474
}
7575
}

0 commit comments

Comments
 (0)