Skip to content
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

Recommend [In] and [Out] attributes on array parameters #91094

Merged
merged 5 commits into from
Aug 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/project/list-of-diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ The diagnostic id values reserved for .NET Libraries analyzer warnings are `SYSL
| __`SYSLIB1089`__ | _`SYSLIB1070`-`SYSLIB1089` reserved for System.Runtime.InteropServices.JavaScript.JSImportGenerator._ |
| __`SYSLIB1090`__ | Invalid 'GeneratedComInterfaceAttribute' usage |
| __`SYSLIB1091`__ | Method is declared in different partial declaration than the 'GeneratedComInterface' attribute. |
| __`SYSLIB1092`__ | 'GenerateComInterfaceAttribute' usage not recommended. See aka.ms/GeneratedComInterfaceUsage for recommended usage. |
| __`SYSLIB1092`__ | Usage of '[LibraryImport|GeneratedComInterface]' does not follow recommendation. See aka.ms/[LibraryImport|GeneratedComInterface]Usage for best practices. |
| __`SYSLIB1093`__ | Analysis for COM interface generation has failed |
| __`SYSLIB1094`__ | The base COM interface failed to generate source. Code will not be generated for this interface. |
| __`SYSLIB1095`__ | Invalid 'GeneratedComClassAttribute' usage |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ internal sealed class DiagnosticDescriptorProvider : IDiagnosticDescriptorProvid
GeneratorDiagnostic.NotSupported { NotSupportedDetails: not null, TypePositionInfo.IsManagedReturnPosition: false } => GeneratorDiagnostics.ParameterTypeNotSupportedWithDetails,
GeneratorDiagnostic.UnnecessaryData { TypePositionInfo.IsManagedReturnPosition: false } => GeneratorDiagnostics.UnnecessaryParameterMarshallingInfo,
GeneratorDiagnostic.UnnecessaryData { TypePositionInfo.IsManagedReturnPosition: true } => GeneratorDiagnostics.UnnecessaryReturnMarshallingInfo,
GeneratorDiagnostic.NotRecommended => GeneratorDiagnostics.GeneratedComInterfaceUsageDoesNotFollowBestPractices,
{ IsFatal: false } => null,
{ TypePositionInfo.IsManagedReturnPosition: true } => GeneratorDiagnostics.ReturnTypeNotSupported,
{ TypePositionInfo.IsManagedReturnPosition: false } => GeneratorDiagnostics.ParameterTypeNotSupported,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,17 @@ public class Ids
DiagnosticSeverity.Info,
isEnabledByDefault: true);

/// <inheritdoc cref="SR.ComInterfaceUsageDoesNotFollowBestPracticesMessageWithDetails"/>
public static readonly DiagnosticDescriptor GeneratedComInterfaceUsageDoesNotFollowBestPractices =
new DiagnosticDescriptor(
Ids.NotRecommendedGeneratedComInterfaceUsage,
GetResourceString(nameof(SR.ComInterfaceUsageDoesNotFollowBestPracticesTitle)),
GetResourceString(nameof(SR.ComInterfaceUsageDoesNotFollowBestPracticesMessageWithDetails)),
Category,
DiagnosticSeverity.Info,
isEnabledByDefault: true,
helpLinkUri: "aka.ms/GeneratedComInterfaceUsage");

/// <summary>
/// Report diagnostic for invalid configuration for string marshalling.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,13 @@
<value>[In] and [Out] attributes</value>
</data>
<data name="OutAttributeNotSupportedOnByValueParameters" xml:space="preserve">
<value>The `[Out]` attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</value>
<value>The '[Out]' attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</value>
</data>
<data name="InAttributeNotSupportedOnByValueParameters" xml:space="preserve">
<value>The '[In]' attribute is only supported on array parameters. By-value parameters are considered read-only by default.</value>
</data>
<data name="InOutAttributeNotSupportedOnByValueParameters" xml:space="preserve">
<value>The '[In]' and '[Out]' attributes are only supported on array parameters. Consider using the 'ref' keyword to make the parameter mutable.</value>
</data>
<data name="ComMethodReturningIntWillBeOutParameterMessage" xml:space="preserve">
<value>The return value in the managed definition will be converted to an 'out' parameter when calling the unmanaged COM method. If the return value is intended to be the HRESULT code returned by the unmanaged COM method, use '[PreserveSig]' on the method.</value>
Expand All @@ -889,4 +895,19 @@
<data name="HResultTypeWillBeTreatedAsStructTitle" xml:space="preserve">
<value>This type will be treated as a struct in the native signature, not as a native HRESULT</value>
</data>
</root>
<data name="PreferExplicitInOutAttributesOnArrays" xml:space="preserve">
<value>It is recommended to use explicit '[In]' and '[Out]' attributes on array parameters.</value>
</data>
<data name="ComInterfaceUsageDoesNotFollowBestPracticesTitle" xml:space="preserve">
<value>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations.</value>
</data>
<data name="ComInterfaceUsageDoesNotFollowBestPracticesMessageWithDetails" xml:space="preserve">
<value>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations. {0}</value>
</data>
<data name="LibraryImportUsageDoesNotFollowBestPracticesTitle" xml:space="preserve">
<value>The usage of 'LibraryImportAttribute' does not follow recommendations.</value>
</data>
<data name="LibraryImportUsageDoesNotFollowBestPracticesMessageWithDetails" xml:space="preserve">
<value>The usage of 'LibraryImportAttribute' does not follow recommendations. {0}</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,16 @@
<target state="translated">Hostování .NET COM s EnableComHosting nepodporuje rozhraní s generatedComInterfaceAttribute</target>
<note />
</trans-unit>
<trans-unit id="ComInterfaceUsageDoesNotFollowBestPracticesMessageWithDetails">
<source>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations. {0}</source>
<target state="new">The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations. {0}</target>
<note />
</trans-unit>
<trans-unit id="ComInterfaceUsageDoesNotFollowBestPracticesTitle">
<source>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations.</source>
<target state="new">The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations.</target>
<note />
</trans-unit>
<trans-unit id="ComMethodReturningIntWillBeOutParameterMessage">
<source>The return value in the managed definition will be converted to an 'out' parameter when calling the unmanaged COM method. If the return value is intended to be the HRESULT code returned by the unmanaged COM method, use '[PreserveSig]' on the method.</source>
<target state="translated">Vrácená hodnota ve spravované definici se při volání nespravované metody COM převede na parametr out. Pokud má být návratovou hodnotou kód HRESULT vrácený nespravovanou metodou COM, použijte u metody [PreserveSig].</target>
Expand Down Expand Up @@ -447,6 +457,11 @@
<target state="new">This type will be treated as a struct in the native signature, not as a native HRESULT</target>
<note />
</trans-unit>
<trans-unit id="InAttributeNotSupportedOnByValueParameters">
<source>The '[In]' attribute is only supported on array parameters. By-value parameters are considered read-only by default.</source>
<target state="new">The '[In]' attribute is only supported on array parameters. By-value parameters are considered read-only by default.</target>
<note />
</trans-unit>
<trans-unit id="InAttributeNotSupportedWithoutOutBlittableArray">
<source>The '[In]' attribute is not supported unless the '[Out]' attribute is also used. Blittable arrays cannot be marshalled as '[In]' only.</source>
<target state="translated">Atribut [In] není podporován, pokud není použit také atribut [Out]. Blittable arrays nelze zařadit pouze jako [In].</target>
Expand All @@ -467,6 +482,11 @@
<target state="translated">Poskytnuté atributy „[In]“ a „[Out]“ u tohoto parametru se na tomto parametru nepodporují.</target>
<note />
</trans-unit>
<trans-unit id="InOutAttributeNotSupportedOnByValueParameters">
<source>The '[In]' and '[Out]' attributes are only supported on array parameters. Consider using the 'ref' keyword to make the parameter mutable.</source>
<target state="new">The '[In]' and '[Out]' attributes are only supported on array parameters. Consider using the 'ref' keyword to make the parameter mutable.</target>
<note />
</trans-unit>
<trans-unit id="InOutAttributes">
<source>[In] and [Out] attributes</source>
<target state="translated">atributy [In] a [Out]</target>
Expand Down Expand Up @@ -702,6 +722,16 @@
<target state="translated">Neplatné použití atributu VirtualMethodIndexAttribute</target>
<note />
</trans-unit>
<trans-unit id="LibraryImportUsageDoesNotFollowBestPracticesMessageWithDetails">
<source>The usage of 'LibraryImportAttribute' does not follow recommendations. {0}</source>
<target state="new">The usage of 'LibraryImportAttribute' does not follow recommendations. {0}</target>
<note />
</trans-unit>
<trans-unit id="LibraryImportUsageDoesNotFollowBestPracticesTitle">
<source>The usage of 'LibraryImportAttribute' does not follow recommendations.</source>
<target state="new">The usage of 'LibraryImportAttribute' does not follow recommendations.</target>
<note />
</trans-unit>
<trans-unit id="LinearCollectionElementTypesMustMatchDescription">
<source>The element type of the 'ReadOnlySpan' returned by 'GetManagedValuesSource' must be the same as the element type returned by 'GetManagedValuesDestination'.</source>
<target state="translated">Typ prvku ReadOnlySpan vrácený GetManagedValuesSource musí být stejný, jako typ prvku vrácený GetManagedValuesDestination.</target>
Expand Down Expand Up @@ -903,8 +933,8 @@
<note />
</trans-unit>
<trans-unit id="OutAttributeNotSupportedOnByValueParameters">
<source>The `[Out]` attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</source>
<target state="new">The `[Out]` attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</target>
<source>The '[Out]' attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</source>
<target state="new">The '[Out]' attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</target>
<note />
</trans-unit>
<trans-unit id="OutRequiresToManagedDescription">
Expand All @@ -917,6 +947,11 @@
<target state="translated">Typ {0}určuje, že podporuje zařazování ve směru „Out“, ale neposkytuje metodu ToManaged, která vrací spravovaný typ</target>
<note />
</trans-unit>
<trans-unit id="PreferExplicitInOutAttributesOnArrays">
<source>It is recommended to use explicit '[In]' and '[Out]' attributes on array parameters.</source>
<target state="new">It is recommended to use explicit '[In]' and '[Out]' attributes on array parameters.</target>
<note />
</trans-unit>
<trans-unit id="RequiresAllowUnsafeBlocksDescriptionCom">
<source>'GeneratedComInterfaceAttribute' and 'GeneratedComClassAttribute' require unsafe code. Project must be updated with '&lt;AllowUnsafeBlocks&gt;true&lt;/AllowUnsafeBlocks&gt;'.</source>
<target state="translated">GeneratedComInterfaceAttribute a GeneratedComClassAttribute vyžadují nebezpečný kód. Projekt se musí aktualizovat na &lt;AllowUnsafeBlocks&gt;true&lt;/AllowUnsafeBlocks&gt;.</target>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,16 @@
<target state="translated">Das .NET COM-Hosting mit "EnableComHosting" unterstützt keine Schnittstellen mit "GeneratedComInterfaceAttribute".</target>
<note />
</trans-unit>
<trans-unit id="ComInterfaceUsageDoesNotFollowBestPracticesMessageWithDetails">
<source>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations. {0}</source>
<target state="new">The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations. {0}</target>
<note />
</trans-unit>
<trans-unit id="ComInterfaceUsageDoesNotFollowBestPracticesTitle">
<source>The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations.</source>
<target state="new">The usage of 'GeneratedComInterfaceAttribute' does not follow recommendations.</target>
<note />
</trans-unit>
<trans-unit id="ComMethodReturningIntWillBeOutParameterMessage">
<source>The return value in the managed definition will be converted to an 'out' parameter when calling the unmanaged COM method. If the return value is intended to be the HRESULT code returned by the unmanaged COM method, use '[PreserveSig]' on the method.</source>
<target state="translated">Der Rückgabewert in der verwalteten Definition wird beim Aufrufen der nicht verwalteten COM-Methode in einen out-Parameter konvertiert. Wenn als Rückgabewert der von der nicht verwalteten COM-Methode zurückgegebene HRESULT-Code eingesetzt werden soll, verwenden Sie "[PreserveSig]" für die Methode.</target>
Expand Down Expand Up @@ -447,6 +457,11 @@
<target state="new">This type will be treated as a struct in the native signature, not as a native HRESULT</target>
<note />
</trans-unit>
<trans-unit id="InAttributeNotSupportedOnByValueParameters">
<source>The '[In]' attribute is only supported on array parameters. By-value parameters are considered read-only by default.</source>
<target state="new">The '[In]' attribute is only supported on array parameters. By-value parameters are considered read-only by default.</target>
<note />
</trans-unit>
<trans-unit id="InAttributeNotSupportedWithoutOutBlittableArray">
<source>The '[In]' attribute is not supported unless the '[Out]' attribute is also used. Blittable arrays cannot be marshalled as '[In]' only.</source>
<target state="translated">Das [In]-Attribut wird nur unterstützt, wenn auch das [Out]-Attribut verwendet wird. Blittable-Arrays können nicht nur als "[In]" gemarshallt werden.</target>
Expand All @@ -467,6 +482,11 @@
<target state="translated">Die angegebenen Attribute \"[In]\" und \"[Out]\" für diesen Parameter werden für diesen Parameter nicht unterstützt.</target>
<note />
</trans-unit>
<trans-unit id="InOutAttributeNotSupportedOnByValueParameters">
<source>The '[In]' and '[Out]' attributes are only supported on array parameters. Consider using the 'ref' keyword to make the parameter mutable.</source>
<target state="new">The '[In]' and '[Out]' attributes are only supported on array parameters. Consider using the 'ref' keyword to make the parameter mutable.</target>
<note />
</trans-unit>
<trans-unit id="InOutAttributes">
<source>[In] and [Out] attributes</source>
<target state="translated">[In]- und [Out]-Attribute</target>
Expand Down Expand Up @@ -702,6 +722,16 @@
<target state="translated">Ungültige Verwendung von "VirtualMethodIndexAttribute"</target>
<note />
</trans-unit>
<trans-unit id="LibraryImportUsageDoesNotFollowBestPracticesMessageWithDetails">
<source>The usage of 'LibraryImportAttribute' does not follow recommendations. {0}</source>
<target state="new">The usage of 'LibraryImportAttribute' does not follow recommendations. {0}</target>
<note />
</trans-unit>
<trans-unit id="LibraryImportUsageDoesNotFollowBestPracticesTitle">
<source>The usage of 'LibraryImportAttribute' does not follow recommendations.</source>
<target state="new">The usage of 'LibraryImportAttribute' does not follow recommendations.</target>
<note />
</trans-unit>
<trans-unit id="LinearCollectionElementTypesMustMatchDescription">
<source>The element type of the 'ReadOnlySpan' returned by 'GetManagedValuesSource' must be the same as the element type returned by 'GetManagedValuesDestination'.</source>
<target state="translated">Der von \"GetManagedValuesSource\" zurückgegebene Elementtyp \"ReadOnlySpan\" muss mit dem Elementtyp identisch sein, der von \"GetManagedValuesDestination\" zurückgegeben wird.</target>
Expand Down Expand Up @@ -903,8 +933,8 @@
<note />
</trans-unit>
<trans-unit id="OutAttributeNotSupportedOnByValueParameters">
<source>The `[Out]` attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</source>
<target state="new">The `[Out]` attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</target>
<source>The '[Out]' attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</source>
<target state="new">The '[Out]' attribute is only supported on array parameters. Consider using 'out' or 'ref' keywords to make the parameter mutable.</target>
<note />
</trans-unit>
<trans-unit id="OutRequiresToManagedDescription">
Expand All @@ -917,6 +947,11 @@
<target state="translated">Der Typ \"{0}\" gibt an, dass das Marshalling in der Out-Richtung unterstützt wird. Er stellt jedoch keine ToManaged-Methode bereit, die den verwalteten Typ zurückgibt.</target>
<note />
</trans-unit>
<trans-unit id="PreferExplicitInOutAttributesOnArrays">
<source>It is recommended to use explicit '[In]' and '[Out]' attributes on array parameters.</source>
<target state="new">It is recommended to use explicit '[In]' and '[Out]' attributes on array parameters.</target>
<note />
</trans-unit>
<trans-unit id="RequiresAllowUnsafeBlocksDescriptionCom">
<source>'GeneratedComInterfaceAttribute' and 'GeneratedComClassAttribute' require unsafe code. Project must be updated with '&lt;AllowUnsafeBlocks&gt;true&lt;/AllowUnsafeBlocks&gt;'.</source>
<target state="translated">'GeneratedComInterfaceAttribute' und 'GeneratedComClassAttribute' erfordern unsicheren Code. Das Projekt muss mit '&lt;AllowUnsafeBlocks&gt;wahr&lt;/AllowUnsafeBlocks&gt;' aktualisiert werden.</target>
Expand Down
Loading