public MetadataICodeElementAdapter(MetadataReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } this.Reader = reader; }
public EventMetadataICodeElementAdapter(Event @event, TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(typeDefinition, genericTypes, reader) { if (@event == null) { throw new ArgumentNullException("event"); } this.Event = @event; }
public PropertyMetadataICodeElementAdapter(Property property, TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(typeDefinition, genericTypes, reader) { if (property == null) { throw new ArgumentNullException("property"); } this.Property = property; }
public MethodMetadataICodeElementAdapter(Method method, TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(typeDefinition, genericTypes, reader) { if (method == null) { throw new ArgumentNullException("method"); } this.Method = method; }
public FieldMetadataICodeElementAdapter(Field field, TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(typeDefinition, genericTypes, reader) { if (field == null) { throw new ArgumentNullException("field"); } this.Field = field; }
public TypeDefinitionMetadataICodeElementAdapterBase(TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(reader) { if (typeDefinition == null) { throw new ArgumentNullException("typeDefinition"); } this.TypeDefinition = typeDefinition; this.GenericTypes = genericTypes; }
public static TypeDescriptor ReadSignatureBlobType(this byte[] signatureBlob, MetadataReader reader, ref int position) { var type = (CorElementType)signatureBlob.ReadCompressedUsigned(ref position); if (type == CorElementType.ELEMENT_TYPE_CMOD_OPT || type == CorElementType.ELEMENT_TYPE_CMOD_REQD) { // does not support throw new NotImplementedException(); } return signatureBlob.DecodeTypeAndTypeDefOrRefOrSpecEncoded(type, ref position, reader); }
// todo: finish reading parameters types from Signature public void ReadSignature(MetadataReader reader) { if (this.SignatureBlob == null || this.SignatureBlob.Length == 0) { throw new ArgumentException("SignatureBlob is empty"); } this.CallingConvention = (CorCallingConvention)(this.SignatureBlob[0] & 0x0f); int position = 1; this.ParamCount = (int)this.SignatureBlob.ReadCompressedUsigned(ref position); this.ReturnTypeDescriptor = this.SignatureBlob.ReadSignatureBlobType(reader, ref position); }
public void Load_Platform_Winmd_Test() { var metadataReader = new MetadataReader(@"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ExtensionSDKs\Microsoft.VCLibs\11.0\References\CommonConfiguration\neutral\Platform.winmd"); foreach (var typeDef in metadataReader.EnumerateTypeDefinitions()) { Assert.IsNotNull(typeDef); } foreach (var typeRef in metadataReader.EnumerateTypeReferences()) { Assert.IsNotNull(typeRef); } foreach (var moduleRef in metadataReader.EnumerateModuleReferences()) { Assert.IsNotNull(moduleRef); } }
public void Load_Windows_Winmd_Test() { var metadataReader = new MetadataReader(@"C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral\Windows.winmd"); foreach (var typeDef in metadataReader.EnumerateTypeDefinitions()) { Assert.IsNotNull(typeDef); } foreach (var typeRef in metadataReader.EnumerateTypeReferences()) { Assert.IsNotNull(typeRef); } foreach (var moduleRef in metadataReader.EnumerateModuleReferences()) { Assert.IsNotNull(moduleRef); } Assert.IsTrue( metadataReader.EnumerateTypeDefinitions().Any(x => x.FullName.Equals("Windows.Foundation.Collections.IMap`2"))); Assert.IsTrue( metadataReader.EnumerateTypeDefinitions().Any(x => x.FullName.Equals("Windows.Foundation.Collections.IObservableMap`2"))); }
public void LoadNamesFrom(string winmdFilePath) { var metadataReader = new MetadataReader(winmdFilePath); foreach (var typeDefinition in metadataReader.EnumerateTypeDefinitions()) { this.Add(new TypeDefinitionMetadataICodeElementAdapter(typeDefinition, null, metadataReader)); } }
public TypeDefinitionMetadataICodeElementAdapter(TypeDefinition typeDefinition, IList<TypeDescriptor> genericTypes, MetadataReader reader) : base(typeDefinition, genericTypes, reader) { }
public TypeDefinitionMetadataICodeElementAdapter(TypeDescriptor typeDescriptor, MetadataReader reader) : base(typeDescriptor.TypeDefinition, typeDescriptor.GenericTypes, reader) { this.TypeDescriptor = typeDescriptor; }
public void ReadSignature(MetadataReader reader) { var position = 0; this.TypeDescriptor = this.SignatureBlob.ReadSignatureBlobType(reader, ref position); }
private static TypeDescriptor DecodeTypeAndTypeDefOrRefOrSpecEncoded(this byte[] signatureBlob, CorElementType type, ref int position, MetadataReader reader) { var typeDescriptor = new Dtos.TypeDescriptor { ElementType = type, GenericParamNumber = 0, GenericParametersCount = 0 }; if (type == CorElementType.ELEMENT_TYPE_CLASS) { // read Token ReturnElementType Def / ReturnElementType Ref / ReturnElementType Spec typeDescriptor.TypeDefinition = ReadDecodeTypeDefOrRefOrSpecEncoded(signatureBlob, reader, ref position); } else if (type == CorElementType.ELEMENT_TYPE_VALUETYPE) { // read Token ReturnElementType Def / ReturnElementType Ref / ReturnElementType Spec typeDescriptor.TypeDefinition = ReadDecodeTypeDefOrRefOrSpecEncoded(signatureBlob, reader, ref position); } else if (type == CorElementType.ELEMENT_TYPE_GENERICINST) { var baseGeneticType = (CorElementType)signatureBlob.ReadCompressedUsigned(ref position); typeDescriptor = signatureBlob.DecodeTypeAndTypeDefOrRefOrSpecEncoded(baseGeneticType, ref position, reader); typeDescriptor.GenericParametersCount = signatureBlob.ReadCompressedUsigned(ref position); var genericTypes = new List<TypeDescriptor>(); for (var i = 0; i < (int) typeDescriptor.GenericParametersCount; i++) { var elementType = (CorElementType)signatureBlob.ReadCompressedUsigned(ref position); var genericTypeDescriptor = signatureBlob.DecodeTypeAndTypeDefOrRefOrSpecEncoded(elementType, ref position, reader); genericTypes.Add(genericTypeDescriptor); } typeDescriptor.GenericTypes = genericTypes; } else if (type == CorElementType.ELEMENT_TYPE_I || type == CorElementType.ELEMENT_TYPE_I1 || type == CorElementType.ELEMENT_TYPE_I2 || type == CorElementType.ELEMENT_TYPE_I4 || type == CorElementType.ELEMENT_TYPE_I8 || type == CorElementType.ELEMENT_TYPE_U || type == CorElementType.ELEMENT_TYPE_U1 || type == CorElementType.ELEMENT_TYPE_U2 || type == CorElementType.ELEMENT_TYPE_U4 || type == CorElementType.ELEMENT_TYPE_U8 || type == CorElementType.ELEMENT_TYPE_R4 || type == CorElementType.ELEMENT_TYPE_R8 || type == CorElementType.ELEMENT_TYPE_BOOLEAN || type == CorElementType.ELEMENT_TYPE_OBJECT || type == CorElementType.ELEMENT_TYPE_STRING || type == CorElementType.ELEMENT_TYPE_VOID) { // ignore it is value type // todo: do I need to read it from Plaform.winmd? // todo: what is ELEMENT_TYPE_VAR <number>? } else if (type == CorElementType.ELEMENT_TYPE_VAR || type == CorElementType.ELEMENT_TYPE_MVAR) { typeDescriptor.GenericParamNumber = signatureBlob.ReadCompressedUsigned(ref position); } else { throw new NotImplementedException(); } return typeDescriptor; }
private static TypeDefinition ReadDecodeTypeDefOrRefOrSpecEncoded( this byte[] signatureBlob, MetadataReader reader, ref int position) { var encoded = (int)signatureBlob.ReadCompressedUsigned(ref position); var tokenTable = encoded.TypeDefOrRefOrSpec(); var classTokenType = encoded.DecodeTypeDefOrRefOrSpecLowTokenOnly(); switch (tokenTable) { case 0: return reader.GetTypeDefinitionProperties(classTokenType | (int)CorTokenType.TypeDef); case 1: return reader.GetTypeDefByTypeRef(reader.GetTypeReferenceProperties(classTokenType | (int)CorTokenType.TypeRef)); case 2: throw new NotImplementedException(); } throw new IndexOutOfRangeException("tokenTable"); }