Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions ICSharpCode.Decompiler/Metadata/MetadataFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -239,23 +239,32 @@ internal PropertyAndEventBackingFieldLookup PropertyAndEventBackingFieldLookup {
}
}

public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false)
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false, MetadataStringDecoder? utf8Decoder = null)
{
this.Kind = kind;
this.FileName = fileName;
this.Metadata = metadata.GetMetadataReader(metadataOptions);
this.Metadata = metadata.GetMetadataReader(metadataOptions, utf8Decoder);
this.MetadataOffset = metadataOffset;
this.IsEmbedded = isEmbedded;
}

private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
public MetadataFile(MetadataFileKind kind, string fileName, MetadataReader metadataReader, int metadataOffset = 0, bool isEmbedded = false)
{
this.Kind = kind;
this.FileName = fileName;
this.Metadata = metadataReader;
this.MetadataOffset = metadataOffset;
this.IsEmbedded = isEmbedded;
}

private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
{
this.Kind = kind;
this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName));
_ = reader ?? throw new ArgumentNullException(nameof(reader));
if (!reader.HasMetadata)
throw new MetadataFileNotSupportedException("PE file does not contain any managed metadata.");
this.Metadata = reader.GetMetadataReader(metadataOptions);
this.Metadata = reader.GetMetadataReader(metadataOptions, utf8Decoder);
}

public virtual MethodBodyBlock GetMethodBody(int rva)
Expand Down
12 changes: 6 additions & 6 deletions ICSharpCode.Decompiler/Metadata/PEFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,18 @@ public class PEFile : MetadataFile, IDisposable, IModuleReference
{
public PEReader Reader { get; }

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

public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
: this(fileName, new PEReader(stream, streamOptions), metadataOptions)
public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: this(fileName, new PEReader(stream, streamOptions), metadataOptions, utf8Decoder)
{
}

public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default)
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions)
public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null)
: base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions, utf8Decoder)
{
this.Reader = reader;
}
Expand Down
Loading