Skip to content

Commit afe6fbd

Browse files
authored
Use SRM's TypeName parser in ILLink (#103740)
This replaces the type name parser we copied from corert with the one in System.Reflection.Metadata. Adds a test for resolving escaped type names, shared by ILLink and Native AOT. To support this testcase, the test infra also uses TypeNameResolver. The ILLink tests use it via IVT, and the Native AOT tests use it by including source files. The sources have been factored a little to make it possible to use just the TypeNameResolver from NativeAot without pulling in other components of ILLink.
1 parent edf4ad4 commit afe6fbd

File tree

30 files changed

+315
-1581
lines changed

30 files changed

+315
-1581
lines changed

src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/Logging/DocumentationSignatureGenerator.PartVisitor.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
namespace ILCompiler.Logging
1010
{
11-
12-
public sealed partial class DocumentationSignatureGenerator
11+
internal sealed partial class DocumentationSignatureGenerator
1312
{
1413
/// <summary>
1514
/// A visitor that generates the part of the documentation comment after the initial type

src/coreclr/tools/aot/ILCompiler.Trimming.Tests/ILCompiler.Trimming.Tests.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@
2424
<ProjectReference Include="../ILCompiler.RyuJit/ILCompiler.RyuJit.csproj" />
2525
</ItemGroup>
2626

27+
<ItemGroup>
28+
<Compile Include="$(ToolsProjectRoot)illink/src/linker/Linker/TypeNameResolver.cs" />
29+
<Compile Include="$(ToolsProjectRoot)illink/src/linker/Linker/ITryResolve.cs" />
30+
<Compile Include="$(ToolsProjectRoot)illink/src/linker/Linker/ModuleDefinitionExtensions.cs" />
31+
<Compile Include="$(LibrariesProjectRoot)/Common/src/System/Reflection/Metadata/TypeNameHelpers.cs" />
32+
<Compile Include="$(LibrariesProjectRoot)/Common/src/System/Text/ValueStringBuilder.cs" />
33+
</ItemGroup>
34+
2735
<ItemGroup>
2836
<RuntimeHostConfigurationOption Include="Mono.Linker.Tests.RuntimeBinDirectory">
2937
<Value>$(RuntimeBinDir)</Value>

src/coreclr/tools/aot/ILCompiler.Trimming.Tests/TestCasesRunner/AssemblyChecker.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class LinkedMethodEntity : LinkedEntity
3737
}
3838

3939
private readonly BaseAssemblyResolver originalsResolver;
40+
private readonly TypeNameResolver originalsTypeNameResolver;
4041
private readonly ReaderParameters originalReaderParameters;
4142
private readonly AssemblyDefinition originalAssembly;
4243
private readonly TrimmedTestCaseResult testResult;
@@ -69,6 +70,7 @@ public AssemblyChecker (
6970
TrimmedTestCaseResult testResult)
7071
{
7172
this.originalsResolver = originalsResolver;
73+
this.originalsTypeNameResolver = new TypeNameResolver (new TestResolver (), new TestAssemblyNameResolver (originalsResolver));
7274
this.originalReaderParameters = originalReaderParameters;
7375
this.originalAssembly = original;
7476
this.testResult = testResult;
@@ -1468,7 +1470,9 @@ internal IEnumerable<string> VerifyLinkingOfOtherAssemblies (AssemblyDefinition
14681470
}
14691471

14701472
var expectedTypeName = checkAttrInAssembly.ConstructorArguments[1].Value.ToString ()!;
1471-
var expectedType = originalTargetAssembly.MainModule.GetType(expectedTypeName);
1473+
if (!originalsTypeNameResolver.TryResolveTypeName (originalTargetAssembly, expectedTypeName, out TypeReference? expectedTypeRef, out _))
1474+
Assert.Fail($"Could not resolve original type `{expectedTypeName}' in assembly {assemblyName}");
1475+
TypeDefinition expectedType = expectedTypeRef.Resolve ();
14721476
linkedMembersInAssembly.TryGetValue(new AssemblyQualifiedToken(expectedType), out LinkedEntity? linkedTypeEntity);
14731477
MetadataType? linkedType = linkedTypeEntity?.Entity as MetadataType;
14741478

src/tools/illink/external/corert/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/tools/illink/external/corert/src/System.Private.CoreLib/shared/System/Reflection/AssemblyNameFormatter.cs

Lines changed: 0 additions & 156 deletions
This file was deleted.

src/tools/illink/external/corert/src/System.Private.CoreLib/shared/System/Reflection/AssemblyNameHelpers.cs

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/tools/illink/external/corert/src/System.Private.CoreLib/shared/System/Reflection/AssemblyNameLexer.cs

Lines changed: 0 additions & 123 deletions
This file was deleted.

0 commit comments

Comments
 (0)