From c935fac77338ebbf1cf62f081d0992d02ae868a2 Mon Sep 17 00:00:00 2001 From: Kassem Sandarusi Date: Sun, 4 Feb 2018 15:26:16 -0600 Subject: [PATCH] TypeDefinition.IsNested Property (dotnet/corefx#25963) * Adding API TypeDefinition.IsNested. Closes dotnet/corefx#5377 * Adding related tests. * fixing backward asserts. * Switching to expression-bodied syntax. * Adding doc comment. Switching to an assembly that actually has nested types. * Fixing xml doc comment to align with msdn comment style. * Update TypeDefinition.cs Fixing bad grammar in comments. Commit migrated from https://github.com/dotnet/corefx/commit/af18a5fe0d4aab25d8fcb6900fcffa8c99befb60 --- .../ref/System.Reflection.Metadata.cs | 1 + .../Metadata/TypeSystem/TypeDefinition.cs | 5 +++ .../Metadata/TypeSystem/TypeDefinitionTests.cs | 37 ++++++++++++++++++++++ .../tests/System.Reflection.Metadata.Tests.csproj | 1 + 4 files changed, 44 insertions(+) create mode 100644 src/libraries/System.Reflection.Metadata/tests/Metadata/TypeSystem/TypeDefinitionTests.cs diff --git a/src/libraries/System.Reflection.Metadata/ref/System.Reflection.Metadata.cs b/src/libraries/System.Reflection.Metadata/ref/System.Reflection.Metadata.cs index 93e9e80..7d09b37 100644 --- a/src/libraries/System.Reflection.Metadata/ref/System.Reflection.Metadata.cs +++ b/src/libraries/System.Reflection.Metadata/ref/System.Reflection.Metadata.cs @@ -2274,6 +2274,7 @@ namespace System.Reflection.Metadata public readonly partial struct TypeDefinition { private readonly object _dummy; + public bool IsNested { get { throw null; } } public System.Reflection.TypeAttributes Attributes { get { throw null; } } public System.Reflection.Metadata.EntityHandle BaseType { get { throw null; } } public System.Reflection.Metadata.StringHandle Name { get { throw null; } } diff --git a/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/TypeSystem/TypeDefinition.cs b/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/TypeSystem/TypeDefinition.cs index 7d8d7f6..fe778b7 100644 --- a/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/TypeSystem/TypeDefinition.cs +++ b/src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/TypeSystem/TypeDefinition.cs @@ -53,6 +53,11 @@ namespace System.Reflection.Metadata } /// + /// Indicates whether this is a nested type. + /// + public bool IsNested => Attributes.IsNested(); + + /// /// Name of the type. /// public StringHandle Name diff --git a/src/libraries/System.Reflection.Metadata/tests/Metadata/TypeSystem/TypeDefinitionTests.cs b/src/libraries/System.Reflection.Metadata/tests/Metadata/TypeSystem/TypeDefinitionTests.cs new file mode 100644 index 0000000..3eb1b5f --- /dev/null +++ b/src/libraries/System.Reflection.Metadata/tests/Metadata/TypeSystem/TypeDefinitionTests.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Xunit; + +namespace System.Reflection.Metadata.Tests +{ + public class TypeDefinitionTests + { + [Fact] + public void ValidateTypeDefinitionIsNestedNoProjection() + { + var reader = MetadataReaderTests.GetMetadataReader(Namespace.NamespaceTests, options: MetadataReaderOptions.None); + + foreach (var typeDefHandle in reader.TypeDefinitions) + { + var typeDef = reader.GetTypeDefinition(typeDefHandle); + + Assert.Equal(typeDef.Attributes.IsNested(), typeDef.IsNested); + } + } + + [Fact] + public void ValidateTypeDefinitionIsNestedWindowsProjection() + { + var reader = MetadataReaderTests.GetMetadataReader(Namespace.NamespaceTests, options: MetadataReaderOptions.ApplyWindowsRuntimeProjections); + + foreach (var typeDefHandle in reader.TypeDefinitions) + { + var typeDef = reader.GetTypeDefinition(typeDefHandle); + + Assert.Equal(typeDef.Attributes.IsNested(), typeDef.IsNested); + } + } + } +} diff --git a/src/libraries/System.Reflection.Metadata/tests/System.Reflection.Metadata.Tests.csproj b/src/libraries/System.Reflection.Metadata/tests/System.Reflection.Metadata.Tests.csproj index d3cceec..b73e348 100644 --- a/src/libraries/System.Reflection.Metadata/tests/System.Reflection.Metadata.Tests.csproj +++ b/src/libraries/System.Reflection.Metadata/tests/System.Reflection.Metadata.Tests.csproj @@ -60,6 +60,7 @@ + -- 2.7.4