Skip to content

Commit e15174b

Browse files
authored
fix: add missing OS platform attributes (#679)
1 parent 566afec commit e15174b

19 files changed

Lines changed: 92 additions & 28 deletions

File tree

Directory.Build.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1414
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0' OR '$(TargetFramework)' == 'netcoreapp3.1' OR '$(TargetFramework)' == 'netstandard2.1'">$(DefineConstants);FEATURE_ASYNC_FILE;FEATURE_ENUMERATION_OPTIONS;FEATURE_ADVANCED_PATH_OPERATIONSFEATURE_PATH_JOIN_WITH_SPAN</DefineConstants>
1515
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0'">$(DefineConstants);FEATURE_FILE_MOVE_WITH_OVERWRITE</DefineConstants>
16+
<DefineConstants Condition="'$(TargetFramework)' == 'net5.0'">$(DefineConstants);FEATURE_SUPPORTED_OS_ATTRIBUTE</DefineConstants>
1617
</PropertyGroup>
1718
<ItemGroup>
1819
<PackageReference Include="Nerdbank.GitVersioning" Version="3.3.37">

benchmarks/System.IO.Abstractions.Benchmarks/Support/DirectorySupport.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,8 @@ private string GetRandomTempDirectory()
3636
public string CreateRandomDirectory()
3737
{
3838
var randomPath = this.GetRandomTempDirectory();
39-
try
40-
{
41-
_fileSystem.Directory.CreateDirectory(randomPath);
42-
return randomPath;
43-
}
44-
catch (Exception ex)
45-
{
46-
throw (ex);
47-
}
39+
_fileSystem.Directory.CreateDirectory(randomPath);
40+
return randomPath;
4841
}
4942

5043
private void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)

benchmarks/System.IO.Abstractions.Benchmarks/Support/DirectorySupportStatic.cs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,8 @@ private static string GetRandomTempDirectory()
1616
public static string CreateDirectory()
1717
{
1818
var randomPath = GetRandomTempDirectory();
19-
try
20-
{
21-
Directory.CreateDirectory(randomPath);
22-
return randomPath;
23-
}
24-
catch (Exception ex)
25-
{
26-
throw (ex);
27-
}
19+
Directory.CreateDirectory(randomPath);
20+
return randomPath;
2821
}
2922

3023
private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs = true, bool overwrite = true)

src/System.IO.Abstractions.TestingHelpers/MockDirectory.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Globalization;
33
using System.Linq;
4+
using System.Runtime.Versioning;
45
using System.Security.AccessControl;
56
using System.Text.RegularExpressions;
67

@@ -125,6 +126,7 @@ public override bool Exists(string path)
125126
}
126127
}
127128

129+
[SupportedOSPlatform("windows")]
128130
public override DirectorySecurity GetAccessControl(string path)
129131
{
130132
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
@@ -139,6 +141,7 @@ public override DirectorySecurity GetAccessControl(string path)
139141
return directoryData.AccessControl;
140142
}
141143

144+
[SupportedOSPlatform("windows")]
142145
public override DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections)
143146
{
144147
return GetAccessControl(path);
@@ -442,6 +445,7 @@ public override void Move(string sourceDirName, string destDirName)
442445
mockFileDataAccessor.MoveDirectory(fullSourcePath, fullDestPath);
443446
}
444447

448+
[SupportedOSPlatform("windows")]
445449
public override void SetAccessControl(string path, DirectorySecurity directorySecurity)
446450
{
447451
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

src/System.IO.Abstractions.TestingHelpers/MockDirectoryData.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Security.AccessControl;
1+
using System.Runtime.Versioning;
2+
using System.Security.AccessControl;
23

34
namespace System.IO.Abstractions.TestingHelpers
45
{
@@ -16,6 +17,7 @@ public MockDirectoryData() : base(string.Empty)
1617
Attributes = FileAttributes.Directory;
1718
}
1819

20+
[SupportedOSPlatform("windows")]
1921
public new DirectorySecurity AccessControl
2022
{
2123
get

src/System.IO.Abstractions.TestingHelpers/MockFile.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Generic;
22
using System.Globalization;
33
using System.Linq;
4+
using System.Runtime.Versioning;
45
using System.Security.AccessControl;
56
using System.Text;
67
using System.Threading;
@@ -125,9 +126,9 @@ public override Stream Create(string path, int bufferSize) =>
125126
Create(path, bufferSize, FileOptions.None);
126127

127128
public override Stream Create(string path, int bufferSize, FileOptions options) =>
128-
CreateInternal(path, options, null);
129+
CreateInternal(path, options);
129130

130-
private Stream CreateInternal(string path, FileOptions options, FileSecurity fileSecurity)
131+
private Stream CreateInternal(string path, FileOptions options)
131132
{
132133
if (path == null)
133134
{
@@ -137,10 +138,7 @@ private Stream CreateInternal(string path, FileOptions options, FileSecurity fil
137138
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, nameof(path));
138139
VerifyDirectoryExists(path);
139140

140-
var mockFileData = new MockFileData(new byte[0])
141-
{
142-
AccessControl = fileSecurity
143-
};
141+
var mockFileData = new MockFileData(new byte[0]);
144142
mockFileDataAccessor.AddFile(path, mockFileData);
145143
return OpenWriteInternal(path, options);
146144
}
@@ -192,6 +190,7 @@ public override bool Exists(string path)
192190
return file != null && !file.IsDirectory;
193191
}
194192

193+
[SupportedOSPlatform("windows")]
195194
public override FileSecurity GetAccessControl(string path)
196195
{
197196
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");
@@ -205,6 +204,7 @@ public override FileSecurity GetAccessControl(string path)
205204
return fileData.AccessControl;
206205
}
207206

207+
[SupportedOSPlatform("windows")]
208208
public override FileSecurity GetAccessControl(string path, AccessControlSections includeSections)
209209
{
210210
return GetAccessControl(path);
@@ -603,6 +603,7 @@ public override void Replace(string sourceFileName, string destinationFileName,
603603
Move(sourceFileName, destinationFileName);
604604
}
605605

606+
[SupportedOSPlatform("windows")]
606607
public override void SetAccessControl(string path, FileSecurity fileSecurity)
607608
{
608609
mockFileDataAccessor.PathVerifier.IsLegalAbsoluteOrRelative(path, "path");

src/System.IO.Abstractions.TestingHelpers/MockFileData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Linq;
2+
using System.Runtime.Versioning;
23
using System.Security.AccessControl;
34
using System.Text;
45

@@ -151,6 +152,7 @@ public static implicit operator MockFileData(string s)
151152
/// <summary>
152153
/// Gets or sets <see cref="FileSecurity"/> of the <see cref="MockFileData"/>. This is the object that is returned for this <see cref="MockFileData"/> when calling <see cref="FileBase.GetAccessControl(string)"/>.
153154
/// </summary>
155+
[SupportedOSPlatform("windows")]
154156
public FileSecurity AccessControl
155157
{
156158
get

src/System.IO.Abstractions.TestingHelpers/MockFileInfo.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Security.AccessControl;
1+
using System.Runtime.Versioning;
2+
using System.Security.AccessControl;
23

34
namespace System.IO.Abstractions.TestingHelpers
45
{
@@ -215,11 +216,13 @@ public override void Encrypt()
215216
MockFileData.Attributes |= FileAttributes.Encrypted;
216217
}
217218

219+
[SupportedOSPlatform("windows")]
218220
public override FileSecurity GetAccessControl()
219221
{
220222
return mockFileSystem.File.GetAccessControl(this.path);
221223
}
222224

225+
[SupportedOSPlatform("windows")]
223226
public override FileSecurity GetAccessControl(AccessControlSections includeSections)
224227
{
225228
return mockFileSystem.File.GetAccessControl(this.path, includeSections);
@@ -281,6 +284,7 @@ public override IFileInfo Replace(string destinationFileName, string destination
281284
return mockFileSystem.FileInfo.FromFileName(destinationFileName);
282285
}
283286

287+
[SupportedOSPlatform("windows")]
284288
public override void SetAccessControl(FileSecurity fileSecurity)
285289
{
286290
mockFileSystem.File.SetAccessControl(this.path, fileSecurity);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#if !FEATURE_SUPPORTED_OS_ATTRIBUTE
2+
namespace System.Runtime.Versioning
3+
{
4+
[AttributeUsage(AttributeTargets.All)]
5+
internal class SupportedOSPlatformAttribute : Attribute
6+
{
7+
public SupportedOSPlatformAttribute(string _)
8+
{
9+
}
10+
}
11+
}
12+
#endif

src/System.IO.Abstractions/DirectoryBase.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Runtime.Versioning;
23
using System.Security.AccessControl;
34

45
namespace System.IO.Abstractions
@@ -24,6 +25,7 @@ internal DirectoryBase() { }
2425
public abstract IDirectoryInfo CreateDirectory(string path);
2526

2627
/// <inheritdoc cref="Directory.CreateDirectory(string,DirectorySecurity)"/>
28+
[SupportedOSPlatform("windows")]
2729
public abstract IDirectoryInfo CreateDirectory(string path, DirectorySecurity directorySecurity);
2830

2931
/// <inheritdoc cref="Directory.Delete(string)"/>
@@ -36,9 +38,11 @@ internal DirectoryBase() { }
3638
public abstract bool Exists(string path);
3739

3840
/// <inheritdoc cref="Directory.GetAccessControl(string)"/>
41+
[SupportedOSPlatform("windows")]
3942
public abstract DirectorySecurity GetAccessControl(string path);
4043

4144
/// <inheritdoc cref="Directory.GetAccessControl(string,AccessControlSections)"/>
45+
[SupportedOSPlatform("windows")]
4246
public abstract DirectorySecurity GetAccessControl(string path, AccessControlSections includeSections);
4347

4448
/// <inheritdoc cref="Directory.GetCreationTime"/>

0 commit comments

Comments
 (0)