diff options
author | madelson <1269046+madelson@users.noreply.github.com> | 2022-03-15 01:08:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-15 01:08:17 +0300 |
commit | 917a0b1bfce3d664fe46587faceb056bca8936f6 (patch) | |
tree | e83ccb4fceb23c3651779620dda7455ecd96b25f /src/tests/reflection | |
parent | 4b93e5252e8df38145bc8d2129805d4d1e74f74a (diff) |
Avoid Attribute.GetCustomAttributes() returning null for open generic type
* Revert "Revert "Avoid Attribute.GetCustomAttributes() returning null for open generic type (#65237)" (#66508)"
This reverts commit f99ba2e2b8fbf03be5058ad23e8cdce9c4a09da6.
* Make DynamicMethod.GetCustomAttributes() return well-typed arrays.
This change makes DynamicMethod.GetCustomAttributes() compatible with
Attribute.GetCustomAttributes().
Diffstat (limited to 'src/tests/reflection')
-rw-r--r-- | src/tests/reflection/GenericAttribute/GenericAttributeMetadata.cs | 2 | ||||
-rw-r--r-- | src/tests/reflection/GenericAttribute/GenericAttributeTests.cs | 15 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/tests/reflection/GenericAttribute/GenericAttributeMetadata.cs b/src/tests/reflection/GenericAttribute/GenericAttributeMetadata.cs index d0ef6353f4a..3bea1e62194 100644 --- a/src/tests/reflection/GenericAttribute/GenericAttributeMetadata.cs +++ b/src/tests/reflection/GenericAttribute/GenericAttributeMetadata.cs @@ -17,6 +17,8 @@ using System.Runtime.CompilerServices; [assembly: MultiAttribute<bool>()] [assembly: MultiAttribute<bool>(true)] +[module: SingleAttribute<long>()] + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false)] public class SingleAttribute<T> : Attribute { diff --git a/src/tests/reflection/GenericAttribute/GenericAttributeTests.cs b/src/tests/reflection/GenericAttribute/GenericAttributeTests.cs index e7661d2d5ae..3462830f1ed 100644 --- a/src/tests/reflection/GenericAttribute/GenericAttributeTests.cs +++ b/src/tests/reflection/GenericAttribute/GenericAttributeTests.cs @@ -18,9 +18,18 @@ class Program Assert(((ICustomAttributeProvider)assembly).IsDefined(typeof(SingleAttribute<int>), true)); Assert(CustomAttributeExtensions.IsDefined(assembly, typeof(SingleAttribute<bool>))); Assert(((ICustomAttributeProvider)assembly).IsDefined(typeof(SingleAttribute<bool>), true)); - + Assert(!CustomAttributeExtensions.GetCustomAttributes(assembly, typeof(SingleAttribute<>)).GetEnumerator().MoveNext()); + Assert(!CustomAttributeExtensions.GetCustomAttributes(assembly, typeof(SingleAttribute<>)).GetEnumerator().MoveNext()); */ + // Uncomment when https://github.com/dotnet/runtime/issues/66168 is resolved + // Module module = programTypeInfo.Module; + // AssertAny(CustomAttributeExtensions.GetCustomAttributes(module), a => a is SingleAttribute<long>); + // Assert(CustomAttributeExtensions.GetCustomAttributes(module, typeof(SingleAttribute<long>)).GetEnumerator().MoveNext()); + // Assert(CustomAttributeExtensions.GetCustomAttributes(module, typeof(SingleAttribute<long>)).GetEnumerator().MoveNext()); + // Assert(!CustomAttributeExtensions.GetCustomAttributes(module, typeof(SingleAttribute<>)).GetEnumerator().MoveNext()); + // Assert(!CustomAttributeExtensions.GetCustomAttributes(module, typeof(SingleAttribute<>)).GetEnumerator().MoveNext()); + TypeInfo programTypeInfo = typeof(Class).GetTypeInfo(); Assert(CustomAttributeExtensions.GetCustomAttribute<SingleAttribute<int>>(programTypeInfo) != null); Assert(((ICustomAttributeProvider)programTypeInfo).GetCustomAttributes(typeof(SingleAttribute<int>), true) != null); @@ -152,8 +161,8 @@ class Program AssertAny(b10, a => (a as MultiAttribute<Type>)?.Value == typeof(Class)); AssertAny(b10, a => (a as MultiAttribute<Type>)?.Value == typeof(Class.Derive)); - Assert(CustomAttributeExtensions.GetCustomAttributes(programTypeInfo, typeof(MultiAttribute<>), false) == null); - Assert(CustomAttributeExtensions.GetCustomAttributes(programTypeInfo, typeof(MultiAttribute<>), true) == null); + Assert(!CustomAttributeExtensions.GetCustomAttributes(programTypeInfo, typeof(MultiAttribute<>), false).GetEnumerator().MoveNext()); + Assert(!CustomAttributeExtensions.GetCustomAttributes(programTypeInfo, typeof(MultiAttribute<>), true).GetEnumerator().MoveNext()); Assert(!((ICustomAttributeProvider)programTypeInfo).GetCustomAttributes(typeof(MultiAttribute<>), true).GetEnumerator().MoveNext()); // Test coverage for CustomAttributeData api surface |