public MetadataSystem(MetadataReader reader) { _reader = reader; _entryPoint = new Lazy <MethodDefinition>(() => GetMethodDefinition(_reader.EntryPoint.RID)); _assembly = new Lazy <AssemblyDefinition>(() => AssemblyDefinitionResolver.Resolve(_reader.AssemblyTable.Row, this)); _module = new Lazy <ModuleDefinition>(() => ModuleDefinitionResolver.Resolve(_reader.ModuleTable.Row, this)); _assemblyRefs = new Lazy <AssemblyReference[]>(() => _reader.AssemblyRefTable .Select((row, id) => AssemblyReferenceResolver.Resolve((uint)(id + 1), row, this)) .ToArray(_reader.AssemblyRefTable.Length)); _types = new Lazy <TypeDefinition[]>(() => _reader.TypeDefTable .Select((row, id) => TypeDefinitionResolver.Resolve((uint)(id + 1), row, this)) .ToArray(_reader.TypeDefTable.Length)); _methods = new Lazy <MethodDefinition[]>(() => _types.Value.SelectMany(type => type.Methods) .ToArray(_reader.MethodTable.Length)); _fields = new Lazy <FieldDefinition[]>(() => _types.Value.SelectMany(type => type.Fields) .ToArray(_reader.FieldTable.Length)); _typeRefLookup = new Lazy <ILookup <MetadataToken, TypeReference> >(() => _reader.TypeRefTable.ToLookup(row => row.ResolutionScope, row => TypeReferenceResolver.Resolve(row, this))); _memberRefLookup = new Lazy <ILookup <MetadataToken, IMemberReference> >(() => _reader.MemberRefTable.ToLookup(row => row.Class, row => MemberReferenceResolver.Resolve(row, this))); _attributeLookup = new Lazy <ILookup <MetadataToken, CustomAttribute> >(() => _reader.CustomAttributeTable.ToLookup(row => row.Parent, row => CustomAttributeResolver.Resolve(row, this))); _typeRefs = new Lazy <TypeReference[]>(() => _typeRefLookup.Value.SelectMany(items => items) .ToArray(_reader.TypeRefTable.Length)); _memberRefs = new Lazy <IMemberReference[]>(() => _memberRefLookup.Value.SelectMany(items => items) .ToArray(_reader.MemberRefTable.Length)); _attributes = new Lazy <CustomAttribute[]>(() => _attributeLookup.Value.SelectMany(items => items) .ToArray(_reader.CustomAttributeTable.Length)); _enclosingTypeMapping = new Lazy <Dictionary <MetadataToken, ITypeInfo> >(() => _reader.NestedClassTable.ToDictionary( row => row.NestedClass, row => GetTypeInfo(row.EnclosingClass))); }
public TypeReference ResolveTypeReference(TypeDefinition newType, string targetTypeName = null) { return(TypeReferenceResolver.Resolve(ref ReservedTypeNames, ref AddedTypeReferences, mainModule, newType, targetTypeName)); }