-
Notifications
You must be signed in to change notification settings - Fork 1.4k
CA1810 Initialize reference type static fields inline #7179
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
ee41eb2
CA1810 Initialize reference type static fields inline
elachlan 25a0ad0
Update src/Build/Evaluation/ProjectRootElementCache.cs
elachlan bb99121
unindent region
elachlan ebabaaa
Revert CodeAnalysis.ruleset
elachlan f4123a5
merge master
elachlan 97bab17
enable warning on CA1810
elachlan 60126c5
Fix remaining occurrences of CA1810 violations
elachlan c9c7e8a
handle null value after cast
elachlan 7ad2b51
Merge branch 'main' into CA1810
elachlan 4140c8f
Remove static constructors
elachlan 0c0dfd4
Apply suggestions from code review
elachlan 4bdda5b
refactor from code review
elachlan eb3ca9f
Change from review
elachlan 158e429
Lazy initialization of Spec Dictionaries
elachlan 19b78ae
Merge branch 'main' into CA1810
elachlan 6342047
Merge branch 'main' into CA1810
elachlan a36f084
Changes from review plus a few other fixes
elachlan File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -127,7 +127,9 @@ public enum ExitType | |
| /// <summary> | ||
| /// Static constructor | ||
| /// </summary> | ||
| #pragma warning disable CA1810 // Initialize reference type static fields inline | ||
elachlan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| static MSBuildApp() | ||
| #pragma warning restore CA1810 // Initialize reference type static fields inline | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: I think I'd slightly prefer putting the restore below the end of this function, but I don't care too much. |
||
| { | ||
| try | ||
| { | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -33,7 +33,7 @@ internal enum DotNetFrameworkArchitecture | |
| /// <summary> | ||
| /// Indicates the 64-bit .NET Framework | ||
| /// </summary> | ||
| Bitness64 = 2 | ||
| Bitness64 = 2, | ||
| } | ||
|
|
||
| /// <summary> | ||
|
|
@@ -72,7 +72,7 @@ internal static class FrameworkLocationHelper | |
| internal static readonly Version visualStudioVersion170 = new Version(17, 0); | ||
|
|
||
| // keep this up-to-date; always point to the latest visual studio version. | ||
| internal static readonly Version visualStudioVersionLatest = visualStudioVersion160; | ||
| internal static readonly Version visualStudioVersionLatest = visualStudioVersion170; | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice catch! |
||
|
|
||
| private const string dotNetFrameworkRegistryPath = "SOFTWARE\\Microsoft\\.NETFramework"; | ||
| private const string dotNetFrameworkSetupRegistryPath = "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP"; | ||
|
|
@@ -145,7 +145,7 @@ internal static class FrameworkLocationHelper | |
| /// <summary> | ||
| /// List the supported .net versions. | ||
| /// </summary> | ||
| private static readonly DotNetFrameworkSpec[] s_dotNetFrameworkSpecs = | ||
| private static DotNetFrameworkSpec[] DotNetFrameworkSpecs() => new DotNetFrameworkSpec[] | ||
| { | ||
| // v1.1 | ||
| new DotNetFrameworkSpecLegacy( | ||
|
|
@@ -225,7 +225,7 @@ internal static class FrameworkLocationHelper | |
| /// <remarks> | ||
| /// The items must be ordered by the version, because some methods depend on that fact to find the previous visual studio version. | ||
| /// </remarks> | ||
| private static readonly VisualStudioSpec[] s_visualStudioSpecs = | ||
| private static readonly Lazy<VisualStudioSpec[]> VisualStudioSpecs = new(() => new VisualStudioSpec[] | ||
| { | ||
| // VS10 | ||
| new VisualStudioSpec(visualStudioVersion100, "Windows\\v7.0A", null, null, new [] | ||
|
|
@@ -255,7 +255,7 @@ internal static class FrameworkLocationHelper | |
| dotNetFrameworkVersion40, | ||
| dotNetFrameworkVersion45, | ||
| dotNetFrameworkVersion451, | ||
| dotNetFrameworkVersion452 | ||
| dotNetFrameworkVersion452, | ||
| }), | ||
|
|
||
| // VS14 | ||
|
|
@@ -269,7 +269,7 @@ internal static class FrameworkLocationHelper | |
| dotNetFrameworkVersion451, | ||
| dotNetFrameworkVersion452, | ||
| dotNetFrameworkVersion46, | ||
| dotNetFrameworkVersion461 | ||
| dotNetFrameworkVersion461, | ||
| }), | ||
|
|
||
| // VS15 | ||
|
|
@@ -328,7 +328,7 @@ internal static class FrameworkLocationHelper | |
| dotNetFrameworkVersion472, | ||
| dotNetFrameworkVersion48, | ||
| }), | ||
| }; | ||
| }); | ||
|
|
||
| #if FEATURE_WIN32_REGISTRY | ||
| /// <summary> | ||
|
|
@@ -373,20 +373,14 @@ private static readonly (Version, Version)[,] s_explicitFallbackRulesForPathToDo | |
| { (dotNetFrameworkVersion471, visualStudioVersion160), (dotNetFrameworkVersion47, visualStudioVersion160) }, | ||
| { (dotNetFrameworkVersion472, visualStudioVersion160), (dotNetFrameworkVersion471, visualStudioVersion160) }, | ||
| { (dotNetFrameworkVersion48, visualStudioVersion160), (dotNetFrameworkVersion472, visualStudioVersion160) }, | ||
| }; | ||
| }; | ||
| #endif // FEATURE_WIN32_REGISTRY | ||
|
|
||
| private static readonly IReadOnlyDictionary<Version, DotNetFrameworkSpec> s_dotNetFrameworkSpecDict; | ||
| private static readonly IReadOnlyDictionary<Version, VisualStudioSpec> s_visualStudioSpecDict; | ||
| private static readonly Lazy<IReadOnlyDictionary<Version, DotNetFrameworkSpec>> DotNetFrameworkSpecDict = new(() => DotNetFrameworkSpecs().ToDictionary(spec => spec.Version)); | ||
| private static readonly Lazy<IReadOnlyDictionary<Version, VisualStudioSpec>> VisualStudioSpecDict = new(() => VisualStudioSpecs.Value.ToDictionary(spec => spec.Version)); | ||
|
|
||
| #endregion // Static member variables | ||
|
|
||
| static FrameworkLocationHelper() | ||
| { | ||
| s_dotNetFrameworkSpecDict = s_dotNetFrameworkSpecs.ToDictionary(spec => spec.Version); | ||
| s_visualStudioSpecDict = s_visualStudioSpecs.ToDictionary(spec => spec.Version); | ||
| } | ||
|
|
||
| #region Static properties | ||
|
|
||
| internal static string PathToDotNetFrameworkV11 | ||
|
|
@@ -1118,13 +1112,13 @@ private static string FindRegistryValueUnderKey | |
|
|
||
| private static VisualStudioSpec GetVisualStudioSpec(Version version) | ||
| { | ||
| ErrorUtilities.VerifyThrowArgument(s_visualStudioSpecDict.TryGetValue(version, out VisualStudioSpec spec), "FrameworkLocationHelper.UnsupportedVisualStudioVersion", version); | ||
| ErrorUtilities.VerifyThrowArgument(VisualStudioSpecDict.Value.TryGetValue(version, out VisualStudioSpec spec), "FrameworkLocationHelper.UnsupportedVisualStudioVersion", version); | ||
| return spec; | ||
| } | ||
|
|
||
| private static DotNetFrameworkSpec GetDotNetFrameworkSpec(Version version) | ||
| { | ||
| ErrorUtilities.VerifyThrowArgument(s_dotNetFrameworkSpecDict.TryGetValue(version, out DotNetFrameworkSpec spec), "FrameworkLocationHelper.UnsupportedFrameworkVersion", version); | ||
| ErrorUtilities.VerifyThrowArgument(DotNetFrameworkSpecDict.Value.TryGetValue(version, out DotNetFrameworkSpec spec), "FrameworkLocationHelper.UnsupportedFrameworkVersion", version); | ||
| return spec; | ||
| } | ||
|
|
||
|
|
@@ -1473,11 +1467,11 @@ public virtual string GetPathToDotNetFrameworkSdkTools(VisualStudioSpec visualSt | |
| // i.e. fallback to v110 if the current visual studio version is v120. | ||
| if (!foundExplicitRule) | ||
| { | ||
| int index = Array.IndexOf(s_visualStudioSpecs, visualStudioSpec); | ||
| int index = Array.IndexOf(VisualStudioSpecs.Value, visualStudioSpec); | ||
| if (index > 0) | ||
| { | ||
| // The items in the array "visualStudioSpecs" must be ordered by version. That would allow us to fallback to the previous visual studio version easily. | ||
| VisualStudioSpec fallbackVisualStudioSpec = s_visualStudioSpecs[index - 1]; | ||
| VisualStudioSpec fallbackVisualStudioSpec = VisualStudioSpecs.Value[index - 1]; | ||
| generatedPathToDotNetFrameworkSdkTools = FallbackToPathToDotNetFrameworkSdkToolsInPreviousVersion( | ||
| this.Version, | ||
| fallbackVisualStudioSpec.Version); | ||
|
|
@@ -1570,10 +1564,8 @@ public virtual string GetPathToWindowsSdk() | |
| #if FEATURE_WIN32_REGISTRY | ||
| private static string FallbackToPathToDotNetFrameworkSdkToolsInPreviousVersion(Version dotNetFrameworkVersion, Version visualStudioVersion) | ||
| { | ||
| VisualStudioSpec visualStudioSpec; | ||
| DotNetFrameworkSpec dotNetFrameworkSpec; | ||
| if (s_visualStudioSpecDict.TryGetValue(visualStudioVersion, out visualStudioSpec) | ||
| && s_dotNetFrameworkSpecDict.TryGetValue(dotNetFrameworkVersion, out dotNetFrameworkSpec) | ||
| if (VisualStudioSpecDict.Value.TryGetValue(visualStudioVersion, out VisualStudioSpec visualStudioSpec) | ||
| && DotNetFrameworkSpecDict.Value.TryGetValue(dotNetFrameworkVersion, out DotNetFrameworkSpec dotNetFrameworkSpec) | ||
| && visualStudioSpec.SupportedDotNetFrameworkVersions.Contains(dotNetFrameworkVersion)) | ||
| { | ||
| return dotNetFrameworkSpec.GetPathToDotNetFrameworkSdkTools(visualStudioSpec); | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.