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

[ComInterfaceGenerator] Recommend [In] and [Out] attributes on array parameters #91231

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="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