Skip to content

Commit

Permalink
[release/7.0] Fix bugs found in MAUI repo (#6405)
Browse files Browse the repository at this point in the history
* Update md files
  • Loading branch information
buyaa-n committed Jan 11, 2023
1 parent 5766f0b commit 897aa84
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 12 deletions.
Expand Up @@ -563,10 +563,13 @@ private static bool ComputeNeedsValueContentAnalysis(IOperation operationBlock,
}
}

if (attribute.SupportedFirst != null &&
info.Version.IsGreaterThanOrEqualTo(attribute.SupportedFirst))
var checkVersion = attribute.SupportedSecond ?? attribute.SupportedFirst;

if (checkVersion != null &&
info.Version.IsGreaterThanOrEqualTo(checkVersion))
{
attribute.SupportedFirst = null;
attribute.SupportedSecond = null;
RemoveUnsupportedWithLessVersion(info.Version, attribute);
RemoveOtherSupportsOnDifferentPlatforms(attributes, info.PlatformName);
}
Expand Down Expand Up @@ -816,8 +819,11 @@ static void RemoveOtherSupportsOnDifferentPlatforms(SmallDictionary<string, Vers
csPlatformNames = string.Join(CommaSeparator, csPlatformNames, PlatformCompatibilityAllPlatforms);
}

var rule = supportedRule ? SwitchSupportedRule(callsite) : SwitchRule(callsite, true);
context.ReportDiagnostic(operation.CreateDiagnostic(rule, operationName, JoinNames(platformNames), csPlatformNames));
if (!platformNames.IsEmpty)
{
var rule = supportedRule ? SwitchSupportedRule(callsite) : SwitchRule(callsite, true);
context.ReportDiagnostic(operation.CreateDiagnostic(rule, operationName, JoinNames(platformNames), csPlatformNames));
}

if (!obsoletedPlatforms.IsEmpty)
{
Expand Down
6 changes: 3 additions & 3 deletions src/NetAnalyzers/Microsoft.CodeAnalysis.NetAnalyzers.sarif
Expand Up @@ -5,7 +5,7 @@
{
"tool": {
"name": "Microsoft.CodeAnalysis.CSharp.NetAnalyzers",
"version": "7.0.0",
"version": "7.0.1",
"language": "en-US"
},
"rules": {
Expand Down Expand Up @@ -538,7 +538,7 @@
{
"tool": {
"name": "Microsoft.CodeAnalysis.NetAnalyzers",
"version": "7.0.0",
"version": "7.0.1",
"language": "en-US"
},
"rules": {
Expand Down Expand Up @@ -5815,7 +5815,7 @@
{
"tool": {
"name": "Microsoft.CodeAnalysis.VisualBasic.NetAnalyzers",
"version": "7.0.0",
"version": "7.0.1",
"language": "en-US"
},
"rules": {
Expand Down
5 changes: 0 additions & 5 deletions src/NetAnalyzers/RulesMissingDocumentation.md
Expand Up @@ -2,8 +2,3 @@

Rule ID | Missing Help Link | Title |
--------|-------------------|-------|
CA1311 | <https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1311> | Specify a culture or use an invariant version |
CA1421 | <https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1421> | This method uses runtime marshalling even when the 'DisableRuntimeMarshallingAttribute' is applied |
CA1852 | <https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1852> | Seal internal types |
CA1853 | <https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1853> | Unnecessary call to 'Dictionary.ContainsKey(key)' |
CA1855 | <https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1855> | Prefer 'Clear' over 'Fill' |
Expand Up @@ -454,6 +454,37 @@ public void CrossPlatform()
await VerifyAnalyzerCSAsync(csSource, s_msBuildPlatforms);
}

[Fact]
public async Task CalledApiHasSupportedAndObsoletedAttributes_CallsiteSupressesSupportedAttributeWarnsForObsoletedOnly()
{
var source = @"
using System;
using System.Runtime.Versioning;
class Program
{
[Mock.ObsoletedOSPlatform(""ios7.0"", ""Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead."")]
[Mock.ObsoletedOSPlatform(""maccatalyst7.0"", ""Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead."")]
[SupportedOSPlatform(""ios"")]
[SupportedOSPlatform(""maccatalyst"")]
public static void M3() { }
[SupportedOSPlatform(""ios"")]
public static void M1()
{
{|CA1422:M3()|}; // This call site is reachable on: 'ios', 'maccatalyst'. 'Program.M3()' is obsoleted on: 'ios' 7.0 and later (Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead.), 'maccatalyst' 7.0 and later (Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead.).
}
[SupportedOSPlatform(""ios10.0"")]
public static void M2()
{
{|CA1422:M3()|}; // This call site is reachable on: 'ios' 10.0 and later, 'maccatalyst' 10.0 and later. 'Program.M3()' is obsoleted on: 'ios' 7.0 and later (Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead.), 'maccatalyst' 7.0 and later (Use 'NSString.GetBoundingRect (CGSize, NSStringDrawingOptions, UIStringAttributes, NSStringDrawingContext)' instead.).
}
}" + MockObsoletedAttributeCS;

await VerifyAnalyzerCSAsync(source);
}

private readonly string MockObsoletedAttributeCS = @"
namespace Mock
{
Expand Down
Expand Up @@ -4968,6 +4968,39 @@ void M1()
await VerifyAnalyzerCSAsync(source);
}

[Fact, WorkItem(4372, "https://github.com/dotnet/roslyn-analyzers/issues/6158")]
public async Task ChildApiNarrowedParentSupport_GuardingVersionShouldBeComparedWithChildVersion()
{
var source = @"
using System;
using System.Runtime.Versioning;
[SupportedOSPlatform(""ios"")]
[SupportedOSPlatform(""tvos"")]
[SupportedOSPlatform(""maccatalyst"")]
class Program
{
[SupportedOSPlatform(""tvos10.2"")]
[SupportedOSPlatform(""ios10.3"")]
[SupportedOSPlatform(""maccatalyst10.3"")]
public static int P1 => 1;
}
class Test
{
[SupportedOSPlatform(""ios10.0"")]
public void M1()
{
var rate = (OperatingSystem.IsIOSVersionAtLeast(10, 3) || OperatingSystem.IsMacCatalystVersionAtLeast(10, 3) || OperatingSystem.IsTvOSVersionAtLeast(10, 3))
? Program.P1 : 0; // guarded
if (OperatingSystem.IsIOSVersionAtLeast(10, 3) || OperatingSystem.IsMacCatalystVersionAtLeast(10, 3) || OperatingSystem.IsTvOSVersionAtLeast(10))
rate = [|Program.P1|]; // version of TvOS is not guarded
}
}";

await VerifyAnalyzerCSAsync(source);
}

[Fact]
public async Task ApiAndGuardAttributeBothHasVersions_AttributeVersionWins()
{
Expand Down

0 comments on commit 897aa84

Please sign in to comment.