Skip to content

Commit 0bfe222

Browse files
authored
Allow creating a MetadataFile with a MetadataReader / MetadataStringDecoder (#3487)
1 parent 83c34d4 commit 0bfe222

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

ICSharpCode.Decompiler/Metadata/MetadataFile.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,23 +239,32 @@ internal PropertyAndEventBackingFieldLookup PropertyAndEventBackingFieldLookup {
239239
}
240240
}
241241

242-
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false)
242+
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false, MetadataStringDecoder? utf8Decoder = null)
243243
{
244244
this.Kind = kind;
245245
this.FileName = fileName;
246-
this.Metadata = metadata.GetMetadataReader(metadataOptions);
246+
this.Metadata = metadata.GetMetadataReader(metadataOptions, utf8Decoder);
247247
this.MetadataOffset = metadataOffset;
248248
this.IsEmbedded = isEmbedded;
249249
}
250250

251-
private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
251+
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReader metadataReader, int metadataOffset = 0, bool isEmbedded = false)
252+
{
253+
this.Kind = kind;
254+
this.FileName = fileName;
255+
this.Metadata = metadataReader;
256+
this.MetadataOffset = metadataOffset;
257+
this.IsEmbedded = isEmbedded;
258+
}
259+
260+
private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
252261
{
253262
this.Kind = kind;
254263
this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
255264
_ = reader ?? throw new ArgumentNullException(nameof(reader));
256265
if (!reader.HasMetadata)
257266
throw new MetadataFileNotSupportedException("PE file does not contain any managed metadata.");
258-
this.Metadata = reader.GetMetadataReader(metadataOptions);
267+
this.Metadata = reader.GetMetadataReader(metadataOptions, utf8Decoder);
259268
}
260269

261270
public virtual MethodBodyBlock GetMethodBody(int rva)

ICSharpCode.Decompiler/Metadata/PEFile.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ public class PEFile : MetadataFile, IDisposable, IModuleReference
3535
{
3636
public PEReader Reader { get; }
3737

38-
public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
39-
: this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions)
38+
public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
39+
: this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions, utf8Decoder)
4040
{
4141
}
4242

43-
public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
44-
: this(fileName, new PEReader(stream, streamOptions), metadataOptions)
43+
public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
44+
: this(fileName, new PEReader(stream, streamOptions), metadataOptions, utf8Decoder)
4545
{
4646
}
4747

48-
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
49-
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions)
48+
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
49+
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions, utf8Decoder)
5050
{
5151
this.Reader = reader;
5252
}

0 commit comments

Comments
 (0)