TypeDefinition.IsNested Property (dotnet/corefx#25963)
authorKassem Sandarusi <kassemsandarusi@gmail.com>
Sun, 4 Feb 2018 21:26:16 +0000 (15:26 -0600)
committerTomáš Matoušek <tmat@users.noreply.github.com>
Sun, 4 Feb 2018 21:26:16 +0000 (13:26 -0800)
* 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

src/libraries/System.Reflection.Metadata/ref/System.Reflection.Metadata.cs
src/libraries/System.Reflection.Metadata/src/System/Reflection/Metadata/TypeSystem/TypeDefinition.cs
src/libraries/System.Reflection.Metadata/tests/Metadata/TypeSystem/TypeDefinitionTests.cs [new file with mode: 0644]
src/libraries/System.Reflection.Metadata/tests/System.Reflection.Metadata.Tests.csproj

index 93e9e80..7d09b37 100644 (file)
@@ -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; } }
index 7d8d7f6..fe778b7 100644 (file)
@@ -53,6 +53,11 @@ namespace System.Reflection.Metadata
         }
 
         /// <summary>
+        /// Indicates whether this is a nested type.
+        /// </summary>
+        public bool IsNested => Attributes.IsNested();
+
+        /// <summary>
         /// Name of the type.
         /// </summary>
         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 (file)
index 0000000..3eb1b5f
--- /dev/null
@@ -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);
+            }
+        }
+    }
+}
index d3cceec..b73e348 100644 (file)
@@ -60,6 +60,7 @@
     <Compile Include="Metadata\PortablePdb\StandalonePortablePdbStreamTests.cs" />
     <Compile Include="Metadata\TagToTokenTests.cs" />
     <Compile Include="Metadata\PortablePdb\DocumentNameTests.cs" />
+    <Compile Include="Metadata\TypeSystem\TypeDefinitionTests.cs" />
     <Compile Include="PortableExecutable\DebugDirectoryBuilderTests.cs" />
     <Compile Include="PortableExecutable\PEHeaderBuilderTests.cs" />
     <Compile Include="PortableExecutable\PEMemoryBlockTests.cs" />