-
Notifications
You must be signed in to change notification settings - Fork 385
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
Remove dependencies #2127
Remove dependencies #2127
Changes from all commits
c2dfcef
79d49e5
90651da
a5a4870
d04234e
b4cb8a0
799a5e2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
// Copyright (c) .NET Foundation and contributors. All rights reserved. | ||
// Licensed under the MIT license. See LICENSE file in the project root for full license information. | ||
|
||
using System.Collections.Generic; | ||
using System.CommandLine.Parsing; | ||
using System.Diagnostics.CodeAnalysis; | ||
using System.IO; | ||
|
||
namespace System.CommandLine | ||
|
@@ -160,5 +162,36 @@ public void AcceptLegalFileNamesOnly() | |
} | ||
}); | ||
} | ||
|
||
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL3050", Justification = "https://github.com/dotnet/command-line-api/issues/1638")] | ||
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2091", Justification = "https://github.com/dotnet/command-line-api/issues/1638")] | ||
internal static T? CreateDefaultValue() | ||
{ | ||
if (default(T) is null && typeof(T) != typeof(string)) | ||
{ | ||
if (typeof(T).IsArray) | ||
{ | ||
return (T?)(object)Array.CreateInstance(typeof(T).GetElementType()!, 0); | ||
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. We should be able to use dotnet/runtime#76478 once it is implemented in .NET 8. That will allow us to do this without a warning. |
||
} | ||
adamsitnik marked this conversation as resolved.
Show resolved
Hide resolved
|
||
else if (typeof(T).IsGenericType) | ||
adamsitnik marked this conversation as resolved.
Show resolved
Hide resolved
|
||
{ | ||
var genericTypeDefinition = typeof(T).GetGenericTypeDefinition(); | ||
|
||
if (genericTypeDefinition == typeof(IEnumerable<>) || | ||
genericTypeDefinition == typeof(IList<>) || | ||
genericTypeDefinition == typeof(ICollection<>)) | ||
{ | ||
return (T?)(object)Array.CreateInstance(typeof(T).GenericTypeArguments[0], 0); | ||
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. This isn't guaranteed to work in a NativeAOT app. Just because the app uses a |
||
} | ||
|
||
if (genericTypeDefinition == typeof(List<>)) | ||
{ | ||
return Activator.CreateInstance<T>(); | ||
} | ||
} | ||
} | ||
|
||
return default; | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand why the referenced issue is justification for suppressing these warnings. It might be better if we wrote it out here.
I believe you could fix
IL2091
by annotating theT
with[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
. See https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/fixing-warnings#dynamicallyaccessedmembers