Skip to content

Commit

Permalink
[ComInterfaceGenerator] Recommend [In] and [Out] attributes on array …
Browse files Browse the repository at this point in the history
…parameters (#91094) (#91231)

Recommend that methods with array parameters use [In] or [Out] attributes if there are none already, and the parameter is not in, ref, or out.
  • Loading branch information
jtschuster authored Aug 28, 2023
1 parent 259a8a4 commit 22a50ac
Show file tree
Hide file tree
Showing 36 changed files with 1,160 additions and 516 deletions.
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="translated">Tento typ bude v nativním podpisu považován za strukturu, nikoli za nativní 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="translated">Atribut „[Out]“ se podporuje pouze u parametrů pole. Zvažte použití klíčových slov „out“ nebo „ref“, aby se parametr dalo měnit.</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 Expand Up @@ -1276,4 +1311,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>
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="translated">Dieser Typ wird als Struktur in der nativen Signatur und nicht als natives HRESULT behandelt</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="translated">Das [Out]-Attribut wird nur für Arrayparameter gemarshallt werden. Erwägen Sie die Verwendung der Schlüsselwörter "out" oder "ref", um den Parameter änderbar zu machen.</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 Expand Up @@ -1276,4 +1311,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>
Loading

0 comments on commit 22a50ac

Please sign in to comment.