mirror of
https://github.com/github/codeql.git
synced 2026-05-03 12:45:27 +02:00
C#: Enable nullability checks on Semmle.Extraction.CIL
This commit is contained in:
@@ -25,7 +25,7 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
public string Path { get; private set; }
|
||||
|
||||
public string Contents => File.Exists(Path) ? File.ReadAllText(Path, System.Text.Encoding.Default) : null;
|
||||
public string? Contents => File.Exists(Path) ? File.ReadAllText(Path, System.Text.Encoding.Default) : null;
|
||||
}
|
||||
|
||||
// Turns out to be very important to keep the MetadataReaderProvider live
|
||||
@@ -41,7 +41,7 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
public IEnumerable<ISourceFile> SourceFiles => reader.Documents.Select(handle => new SourceFile(reader, handle));
|
||||
|
||||
public IMethod GetMethod(MethodDebugInformationHandle handle)
|
||||
public IMethod? GetMethod(MethodDebugInformationHandle handle)
|
||||
{
|
||||
var debugInfo = reader.GetMethodDebugInformation(handle);
|
||||
|
||||
@@ -51,10 +51,10 @@ namespace Semmle.Extraction.PDB
|
||||
Where(p => p.Location.File.Path != null).
|
||||
ToArray();
|
||||
|
||||
return sequencePoints.Any() ? new Method() { SequencePoints = sequencePoints } : null;
|
||||
return sequencePoints.Any() ? new Method(sequencePoints) : null;
|
||||
}
|
||||
|
||||
public static MetadataPdbReader CreateFromAssembly(string assemblyPath, PEReader peReader)
|
||||
public static MetadataPdbReader? CreateFromAssembly(string assemblyPath, PEReader peReader)
|
||||
{
|
||||
foreach (var provider in peReader.
|
||||
ReadDebugDirectory().
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Semmle.Extraction.PDB
|
||||
public Document(ISymUnmanagedDocument doc)
|
||||
{
|
||||
document = doc;
|
||||
contents = new Lazy<string>(() =>
|
||||
contents = new Lazy<string?>(() =>
|
||||
{
|
||||
bool isEmbedded;
|
||||
if (document.HasEmbeddedSource(out isEmbedded) == 0 && isEmbedded)
|
||||
@@ -38,7 +38,7 @@ namespace Semmle.Extraction.PDB
|
||||
});
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
var otherDoc = obj as Document;
|
||||
return otherDoc != null && Path.Equals(otherDoc.Path);
|
||||
@@ -50,14 +50,14 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
public override string ToString() => Path;
|
||||
|
||||
readonly Lazy<string> contents;
|
||||
readonly Lazy<string?> contents;
|
||||
|
||||
public string Contents => contents.Value;
|
||||
public string? Contents => contents.Value;
|
||||
}
|
||||
|
||||
public IEnumerable<ISourceFile> SourceFiles => reader.GetDocuments().Select(d => new Document(d));
|
||||
|
||||
public IMethod GetMethod(MethodDebugInformationHandle h)
|
||||
public IMethod? GetMethod(MethodDebugInformationHandle h)
|
||||
{
|
||||
int methodToken = MetadataTokens.GetToken(h.ToDefinitionHandle());
|
||||
var method = reader.GetMethod(methodToken);
|
||||
@@ -72,7 +72,7 @@ namespace Semmle.Extraction.PDB
|
||||
Select(sp => new SequencePoint(sp.Offset, new Location(new Document(sp.Document), sp.StartLine, sp.StartColumn, sp.EndLine, sp.EndColumn))).
|
||||
ToArray();
|
||||
|
||||
return s.Any() ? new Method { SequencePoints = s } : null;
|
||||
return s.Any() ? new Method(s) : null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -87,7 +87,7 @@ namespace Semmle.Extraction.PDB
|
||||
readonly ISymUnmanagedReader5 reader;
|
||||
readonly FileStream pdbStream;
|
||||
|
||||
public static NativePdbReader CreateFromAssembly(string assemblyPath, PEReader peReader)
|
||||
public static NativePdbReader? CreateFromAssembly(string assemblyPath, PEReader peReader)
|
||||
{
|
||||
// The Native PDB reader uses an unmanaged Windows DLL
|
||||
// so only works on Windows.
|
||||
@@ -123,7 +123,7 @@ namespace Semmle.Extraction.PDB
|
||||
{
|
||||
}
|
||||
|
||||
public object GetMetadataImport() => null;
|
||||
public object? GetMetadataImport() => null;
|
||||
|
||||
public unsafe bool TryGetStandaloneSignature(int standaloneSignatureToken, out byte* signature, out int length) =>
|
||||
throw new NotImplementedException();
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace Semmle.Extraction.PDB
|
||||
return string.Format("({0},{1})-({2},{3})", StartLine, StartColumn, EndLine, EndColumn);
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
var otherLocation = obj as Location;
|
||||
|
||||
@@ -91,7 +91,12 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
class Method : IMethod
|
||||
{
|
||||
public IEnumerable<SequencePoint> SequencePoints { get; set; }
|
||||
public IEnumerable<SequencePoint> SequencePoints { get; }
|
||||
|
||||
public Method(IEnumerable<SequencePoint> sequencePoints)
|
||||
{
|
||||
SequencePoints = sequencePoints;
|
||||
}
|
||||
|
||||
public Location Location => SequencePoints.First().Location;
|
||||
}
|
||||
@@ -111,7 +116,7 @@ namespace Semmle.Extraction.PDB
|
||||
/// null if the contents are unavailable.
|
||||
/// E.g. if the PDB file exists but the corresponding source files are missing.
|
||||
/// </summary>
|
||||
string Contents { get; }
|
||||
string? Contents { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -131,7 +136,7 @@ namespace Semmle.Extraction.PDB
|
||||
/// </summary>
|
||||
/// <param name="methodHandle">The handle to query.</param>
|
||||
/// <returns>The method information, or null if the method does not have debug information.</returns>
|
||||
IMethod GetMethod(MethodDebugInformationHandle methodHandle);
|
||||
IMethod? GetMethod(MethodDebugInformationHandle methodHandle);
|
||||
}
|
||||
|
||||
class PdbReader
|
||||
@@ -140,11 +145,11 @@ namespace Semmle.Extraction.PDB
|
||||
/// Returns the PDB information associated with an assembly.
|
||||
/// </summary>
|
||||
/// <param name="assemblyPath">The path to the assembly.</param>
|
||||
/// <param name="peReader">The PE reader for the assembky.</param>
|
||||
/// <param name="peReader">The PE reader for the assembly.</param>
|
||||
/// <returns>A PdbReader, or null if no PDB information is available.</returns>
|
||||
public static IPdb Create(string assemblyPath, PEReader peReader)
|
||||
public static IPdb? Create(string assemblyPath, PEReader peReader)
|
||||
{
|
||||
return (IPdb)MetadataPdbReader.CreateFromAssembly(assemblyPath, peReader) ??
|
||||
return (IPdb?)MetadataPdbReader.CreateFromAssembly(assemblyPath, peReader) ??
|
||||
NativePdbReader.CreateFromAssembly(assemblyPath, peReader);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user