Skip to content

Commit e90543f

Browse files
authored
Fix type references processing (#43)
1 parent b89a85e commit e90543f

File tree

5 files changed

+10
-68
lines changed

5 files changed

+10
-68
lines changed

source/MetadataProcessor.Console/Program.cs

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -69,36 +69,12 @@ public void Compile(
6969
_assemblyBuilder.Write(GetBinaryWriter(writer));
7070
}
7171

72-
using (var writer = XmlWriter.Create(Path.ChangeExtension(fileName, "pdbx")))
73-
{
74-
_assemblyBuilder.Write(writer);
75-
}
76-
77-
if(DumpMetadata)
78-
{
79-
nanoDumperGenerator dumper = new nanoDumperGenerator(
80-
_assemblyBuilder.TablesContext,
81-
Path.ChangeExtension(fileName, "dump.txt"));
82-
dumper.DumpAll();
83-
}
84-
}
85-
catch (Exception)
86-
{
87-
System.Console.Error.WriteLine(
88-
"Unable to compile output assembly file '{0}' - check parse command results.", fileName);
89-
throw;
90-
}
91-
}
92-
93-
public void Minimize(
94-
string fileName)
95-
{
96-
try
97-
{
9872
if (Verbose) System.Console.WriteLine("Minimizing assembly...");
9973

10074
_assemblyBuilder.Minimize();
10175

76+
if (Verbose) System.Console.WriteLine("Recompiling assembly...");
77+
10278
using (var stream = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite))
10379
using (var writer = new BinaryWriter(stream))
10480
{
@@ -110,18 +86,18 @@ public void Minimize(
11086
_assemblyBuilder.Write(writer);
11187
}
11288

113-
if (DumpMetadata)
89+
if(DumpMetadata)
11490
{
11591
nanoDumperGenerator dumper = new nanoDumperGenerator(
11692
_assemblyBuilder.TablesContext,
11793
Path.ChangeExtension(fileName, "dump.txt"));
11894
dumper.DumpAll();
11995
}
12096
}
121-
catch (Exception ex)
97+
catch (Exception)
12298
{
12399
System.Console.Error.WriteLine(
124-
"Unable to minimize assembly file '{0}'.", fileName);
100+
"Unable to compile output assembly file '{0}' - check parse command results.", fileName);
125101
throw;
126102
}
127103
}
@@ -232,7 +208,6 @@ public static void Main(string[] args)
232208
System.Console.WriteLine("-excludeClassByName <class-name> Removes the class from an assembly.");
233209
System.Console.WriteLine("-generateskeleton Generate skeleton files with stubs to add native code for an assembly.");
234210
System.Console.WriteLine("-generateDependency Generates an XML file with the relationship between assemblies.");
235-
System.Console.WriteLine("-minimize Minimizes the assembly, removing unwanted elements.");
236211
System.Console.WriteLine("-verbose Outputs each command before executing it.");
237212
System.Console.WriteLine("-verboseMinimize Turns on verbose level for the minimization phase.");
238213
System.Console.WriteLine("-dump_all Generates a report of an assembly's metadata.");
@@ -263,10 +238,6 @@ public static void Main(string[] args)
263238
{
264239
md.AddClassToExclude(args[++i]);
265240
}
266-
else if (arg == "-minimize")
267-
{
268-
md.Minimize(md.PeFileName);
269-
}
270241
else if (arg == "-verbose")
271242
{
272243
md.Verbose = true;

source/MetadataProcessor.Core/Tables/nanoTablesContext.cs

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@ public sealed class nanoTablesContext
1919
// Assembly-level attributes
2020
"System.Runtime.InteropServices.ComVisibleAttribute",
2121
"System.Runtime.InteropServices.GuidAttribute",
22-
"System.Reflection.AssemblyTitleAttribute",
23-
"System.Reflection.AssemblyDescriptionAttribute",
24-
"System.Reflection.AssemblyConfigurationAttribute",
25-
"System.Reflection.AssemblyCompanyAttribute",
26-
"System.Reflection.AssemblyProductAttribute",
27-
"System.Reflection.AssemblyCopyrightAttribute",
28-
"System.Reflection.AssemblyTrademarkAttribute",
29-
"System.Reflection.AssemblyFileVersionAttribute",
3022

3123
// Compiler-specific attributes
3224
//"System.ParamArrayAttribute",
@@ -108,17 +100,7 @@ public nanoTablesContext(
108100
AssemblyReferenceTable = new nanoAssemblyReferenceTable(
109101
mainModule.AssemblyReferences, this);
110102

111-
var typeReferences = mainModule.GetTypeReferences().ToList();
112-
113-
// remove types in ignore list
114-
foreach (var a in _ignoringAttributes)
115-
{
116-
var typeToExclude = typeReferences.FirstOrDefault(t => t.FullName == a);
117-
if (typeToExclude != null)
118-
{
119-
typeReferences.Remove(typeToExclude);
120-
}
121-
}
103+
var typeReferences = mainModule.GetTypeReferences();
122104

123105
TypeReferencesTable = new nanoTypeReferenceTable(
124106
typeReferences, this);
@@ -140,16 +122,6 @@ public nanoTablesContext(
140122

141123
var types = GetOrderedTypes(mainModule, explicitTypesOrder);
142124

143-
// remove types in ignore list
144-
foreach (var a in _ignoringAttributes)
145-
{
146-
var typeToExclude = types.FirstOrDefault(t => t.FullName == a);
147-
if(typeToExclude != null)
148-
{
149-
types.Remove(typeToExclude);
150-
}
151-
}
152-
153125
TypeDefinitionTable = new nanoTypeDefinitionTable(types, this);
154126

155127
var fields = types

source/MetadataProcessor.Core/Tables/nanoTypeReferenceTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ protected override void AllocateSingleItemStrings(
9292
GetOrCreateStringId(item.Name);
9393
}
9494

95-
private ushort GetScope(
95+
internal ushort GetScope(
9696
TypeReference typeReference)
9797
{
9898
if (typeReference.DeclaringType == null)

source/MetadataProcessor.Core/nanoAssemblyBuilder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ public void Minimize()
156156
// need to reset several tables so they are recreated only with the used items
157157
_tablesContext.ResetStringsTable();
158158
_tablesContext.AssemblyReferenceTable.RemoveUnusedItems(set);
159+
_tablesContext.TypeReferencesTable.RemoveUnusedItems(set);
159160
_tablesContext.FieldsTable.RemoveUnusedItems(set);
160161
_tablesContext.FieldReferencesTable.RemoveUnusedItems(set);
161162
_tablesContext.MethodDefinitionTable.RemoveUnusedItems(set);

source/MetadataProcessor.Core/nanoDumperGenerator.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,18 +235,16 @@ private void DumpTypeReferences(DumpAllTable dumpTable)
235235
{
236236
ushort refId;
237237

238-
var metadataScopeType = _tablesContext.AssemblyReferenceTable.Items.FirstOrDefault(a => a == t.Scope);
239-
240238
var typeRef = new TypeRef()
241239
{
242240
Name = t.Name,
243-
Scope = _tablesContext.AssemblyReferenceTable.GetReferenceId(metadataScopeType).ToString("x8")
241+
Scope = _tablesContext.TypeReferencesTable.GetScope(t).ToString("x8")
244242
};
245243

246244
if (_tablesContext.TypeReferencesTable.TryGetTypeReferenceId(t, out refId))
247245
{
248246
typeRef.ReferenceId = "0x" + refId.ToString("x8");
249-
typeRef.Name = t.Name;
247+
typeRef.Name = t.FullName;
250248
}
251249

252250
// TODO

0 commit comments

Comments
 (0)