Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2017-08-26 07:55:43 +0300
committerGitHub <noreply@github.com>2017-08-26 07:55:43 +0300
commit872ddb1753224a102380296f5e9219f5e0ce864e (patch)
tree90a52895fce25de3878faecc477e7f40db11e517 /src/ILCompiler.TypeSystem
parentf954fb1e95c00d3bbd51822c53a2bbab7cca34d1 (diff)
Add custom attribute type name formatter (#4367)
Diffstat (limited to 'src/ILCompiler.TypeSystem')
-rw-r--r--src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj3
-rw-r--r--src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs55
2 files changed, 58 insertions, 0 deletions
diff --git a/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj b/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj
index 67bbb498f..d68cff2c9 100644
--- a/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj
+++ b/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj
@@ -112,6 +112,9 @@
<Compile Include="..\..\Common\src\TypeSystem\Common\ThrowHelper.Common.cs">
<Link>TypeSystem\Common\ThrowHelper.Common.cs</Link>
</Compile>
+ <Compile Include="..\..\Common\src\TypeSystem\Common\Utilities\CustomAttributeTypeNameFormatter.cs">
+ <Link>Utilities\CustomAttributeTypeNameFormatter.cs</Link>
+ </Compile>
<Compile Include="..\..\Common\src\TypeSystem\Common\Utilities\CustomAttributeTypeNameParser.cs">
<Link>Utilities\CustomAttributeTypeNameParser.cs</Link>
</Compile>
diff --git a/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs b/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs
index b6cd357b4..e366f0744 100644
--- a/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs
+++ b/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.Collections.Generic;
using Internal.TypeSystem;
@@ -240,5 +241,59 @@ namespace TypeSystemTests
Assert.Null(_testModule.GetTypeByCustomAttributeTypeName("TypeNameParsing.Simple+Nested+NonNamespaceQualifiedType", throwIfNotFound: false));
Assert.Null(_testModule.GetTypeByCustomAttributeTypeName("TypeNameParsing.Generic`1[TypeNameParsing.SimpleButNotThere]", throwIfNotFound: false));
}
+
+ public IEnumerable<TypeDesc> GetTypesForRoundtripTest()
+ {
+ yield return _simpleType;
+ yield return _nestedType;
+ yield return _nestedTwiceType;
+ yield return _context.GetWellKnownType(WellKnownType.Int32);
+ yield return _veryGenericType;
+ yield return _simpleType.MakeArrayType();
+ yield return _simpleType.MakeArrayType().MakeArrayType();
+ yield return _simpleType.MakeArrayType(2).MakeArrayType(3);
+ yield return _context.GetWellKnownType(WellKnownType.Int32).MakeArrayType();
+ yield return _structType.MakePointerType();
+ yield return _context.GetWellKnownType(WellKnownType.Int32).MakePointerType().MakePointerType();
+ yield return _genericType.MakeInstantiatedType(_simpleType);
+ yield return _veryGenericType.MakeInstantiatedType(
+ _simpleType,
+ _genericType.MakeInstantiatedType(_simpleType),
+ _structType
+ );
+ yield return _genericType.MakeInstantiatedType(_context.GetWellKnownType(WellKnownType.Object));
+ yield return _veryGenericType.MakeInstantiatedType(
+ _context.GetWellKnownType(WellKnownType.Object),
+ _simpleType,
+ _context.GetWellKnownType(WellKnownType.Int32)
+ );
+ yield return ((MetadataType)_context.GetWellKnownType(WellKnownType.Nullable)).MakeInstantiatedType(_structType);
+ yield return _genericType.MakeInstantiatedType(_structType.MakePointerType().MakeArrayType());
+ yield return _nestedGenericType.MakeInstantiatedType(
+ ((MetadataType)_context.GetWellKnownType(WellKnownType.Nullable)).MakeInstantiatedType(_context.GetWellKnownType(WellKnownType.Int32)),
+ _nestedType.MakeArrayType()
+ );
+ }
+
+ [Fact]
+ public void TestRoundtripping()
+ {
+ foreach (TypeDesc type in GetTypesForRoundtripTest())
+ {
+ {
+ var fmt = new CustomAttributeTypeNameFormatter((IAssemblyDesc)_testModule);
+ string formatted = fmt.FormatName(type);
+ TypeDesc roundTripped = _testModule.GetTypeByCustomAttributeTypeName(formatted);
+ Assert.Equal(type, roundTripped);
+ }
+
+ {
+ var fmt = new CustomAttributeTypeNameFormatter();
+ string formatted = fmt.FormatName(type);
+ TypeDesc roundTripped = _testModule.GetTypeByCustomAttributeTypeName(formatted);
+ Assert.Equal(type, roundTripped);
+ }
+ }
+ }
}
}