diff --git a/.editorconfig b/.editorconfig
index 660c2996b..7f28f9908 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -154,6 +154,7 @@ dotnet_diagnostic.IDE2003.severity = silent
#cleared null error types
dotnet_diagnostic.CS8612.severity = error
dotnet_diagnostic.CS8714.severity = error
+dotnet_diagnostic.CS8762.severity = error
dotnet_diagnostic.CS8765.severity = error
dotnet_diagnostic.CS8766.severity = error
dotnet_diagnostic.CS8767.severity = error
diff --git a/ICSharpCode.Decompiler/CSharp/Annotations.cs b/ICSharpCode.Decompiler/CSharp/Annotations.cs
index 30f221db1..935963454 100644
--- a/ICSharpCode.Decompiler/CSharp/Annotations.cs
+++ b/ICSharpCode.Decompiler/CSharp/Annotations.cs
@@ -134,7 +134,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// Retrieves the associated with this AstNode, or null if no symbol
/// is associated with the node.
///
- public static ISymbol GetSymbol(this AstNode node)
+ public static ISymbol? GetSymbol(this AstNode node)
{
var rr = node.Annotation();
if (rr is MethodGroupResolveResult)
@@ -175,7 +175,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// Retrieves the associated with this ,
/// or null if no variable is associated with this identifier.
///
- public static ILVariable GetILVariable(this IdentifierExpression expr)
+ public static ILVariable? GetILVariable(this IdentifierExpression expr)
{
if (expr.Annotation() is ILVariableResolveResult rr)
return rr.Variable;
@@ -187,7 +187,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// Retrieves the associated with this ,
/// or null if no variable is associated with this initializer.
///
- public static ILVariable GetILVariable(this VariableInitializer vi)
+ public static ILVariable? GetILVariable(this VariableInitializer vi)
{
if (vi.Annotation() is ILVariableResolveResult rr)
return rr.Variable;
@@ -199,7 +199,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// Retrieves the associated with this ,
/// or null if no variable is associated with this foreach statement.
///
- public static ILVariable GetILVariable(this ForeachStatement loop)
+ public static ILVariable? GetILVariable(this ForeachStatement loop)
{
if (loop.Annotation() is ILVariableResolveResult rr)
return rr.Variable;
diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
index 9939ce887..d2be2971e 100644
--- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
+++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
@@ -1213,7 +1213,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// The node of the member which new modifier state should be determined.
void SetNewModifier(EntityDeclaration member)
{
- var entity = (IEntity)member.GetSymbol();
+ var entity = member.GetSymbol() as IEntity;
var lookup = new MemberLookup(entity.DeclaringTypeDefinition, entity.ParentModule);
var baseTypes = entity.DeclaringType.GetNonInterfaceBaseTypes().Where(t => entity.DeclaringType != t).ToList();
@@ -1325,7 +1325,7 @@ namespace ICSharpCode.Decompiler.CSharp
foreach (var p in recordDecompiler.PrimaryConstructor.Parameters)
{
ParameterDeclaration pd = typeSystemAstBuilder.ConvertParameter(p);
- (IProperty prop, IField field) = recordDecompiler.GetPropertyInfoByPrimaryConstructorParameter(p);
+ (IProperty? prop, IField field) = recordDecompiler.GetPropertyInfoByPrimaryConstructorParameter(p);
if (prop != null)
{
@@ -1567,7 +1567,7 @@ namespace ICSharpCode.Decompiler.CSharp
{
if (MemberIsHidden(module, field.MetadataToken, settings))
continue;
- object constantValue = field.GetConstantValue();
+ object? constantValue = field.GetConstantValue();
if (constantValue == null)
continue;
long currentValue = (long)CSharpPrimitiveCast.Cast(TypeCode.Int64, constantValue, false);
@@ -1958,7 +1958,7 @@ namespace ICSharpCode.Decompiler.CSharp
if (decompilationContext.CurrentTypeDefinition.Kind == TypeKind.Enum && field.IsConst)
{
var enumDec = new EnumMemberDeclaration { Name = field.Name };
- object constantValue = field.GetConstantValue();
+ object? constantValue = field.GetConstantValue();
if (constantValue != null)
{
enumDec.Initializer = typeSystemAstBuilder.ConvertConstantValue(decompilationContext.CurrentTypeDefinition.EnumUnderlyingType, constantValue);
@@ -2022,7 +2022,7 @@ namespace ICSharpCode.Decompiler.CSharp
{
type = null;
elementCount = 0;
- IAttribute attr = field.GetAttribute(KnownAttribute.FixedBuffer);
+ IAttribute? attr = field.GetAttribute(KnownAttribute.FixedBuffer);
if (attr != null && attr.FixedArguments.Length == 2)
{
if (attr.FixedArguments[0].Value is IType trr && attr.FixedArguments[1].Value is int length)
diff --git a/ICSharpCode.Decompiler/CSharp/CallBuilder.cs b/ICSharpCode.Decompiler/CSharp/CallBuilder.cs
index 6a7cf06bc..5e2d7c6ee 100644
--- a/ICSharpCode.Decompiler/CSharp/CallBuilder.cs
+++ b/ICSharpCode.Decompiler/CSharp/CallBuilder.cs
@@ -1574,7 +1574,7 @@ namespace ICSharpCode.Decompiler.CSharp
arguments.Remove(value);
}
- IMember foundMember;
+ IMember? foundMember;
while (!IsUnambiguousAccess(expectedTargetDetails, targetResolveResult, method, arguments, argumentNames, out foundMember))
{
if (!argumentsCasted)
diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
index e302399ae..b85f053d8 100644
--- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
+++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
@@ -2535,7 +2535,7 @@ namespace ICSharpCode.Decompiler.CSharp
if (resultType.Kind == TypeKind.Void)
return compilation.FindType(KnownTypeCode.Task);
- ITypeDefinition def = compilation.FindType(KnownTypeCode.TaskOfT).GetDefinition();
+ ITypeDefinition? def = compilation.FindType(KnownTypeCode.TaskOfT).GetDefinition();
if (def != null)
return new ParameterizedType(def, new[] { resultType });
else
@@ -2988,7 +2988,7 @@ namespace ICSharpCode.Decompiler.CSharp
memberName = "LongLength";
code = KnownTypeCode.Int64;
}
- IProperty member = arrayType.GetProperties(p => p.Name == memberName).FirstOrDefault();
+ IProperty? member = arrayType.GetProperties(p => p.Name == memberName).FirstOrDefault();
ResolveResult rr = member == null
? new ResolveResult(compilation.FindType(code))
: new MemberResolveResult(arrayExpr.ResolveResult, member);
@@ -3917,7 +3917,8 @@ namespace ICSharpCode.Decompiler.CSharp
{
TranslatedExpression value;
IType type;
- if (inst.Value is StringToInt strToInt)
+ var strToInt = inst.Value as StringToInt;
+ if (strToInt != null)
{
value = Translate(strToInt.Argument)
.ConvertTo(
@@ -4534,7 +4535,7 @@ namespace ICSharpCode.Decompiler.CSharp
{
if (subPattern.HasDesignator)
{
- if (!conversionMapping.TryGetValue(subPattern.Variable, out ILVariable value))
+ if (!conversionMapping.TryGetValue(subPattern.Variable, out ILVariable? value))
{
value = subPattern.Variable;
}
@@ -4639,7 +4640,7 @@ namespace ICSharpCode.Decompiler.CSharp
Debug.Fail("Invalid sub pattern");
continue;
}
- IMember member;
+ IMember? member;
if (testedOperand is CallInstruction call)
{
member = call.Method.AccessorOwner;
diff --git a/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs b/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
index 2ed3cec00..be451afa2 100644
--- a/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
+++ b/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
@@ -92,7 +92,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
///
/// The next node after the comma.
/// When set prevents printing a space after comma.
- protected virtual void Comma(AstNode nextNode, bool noSpaceAfterComma = false)
+ protected virtual void Comma(AstNode? nextNode, bool noSpaceAfterComma = false)
{
Space(policy.SpaceBeforeBracketComma);
// TODO: Comma policy has changed.
@@ -105,7 +105,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
///
/// Writes an optional comma, e.g. at the end of an enum declaration or in an array initializer
///
- protected virtual void OptionalComma(AstNode pos)
+ protected virtual void OptionalComma(AstNode? pos)
{
// Look if there's a comma after the current node, and insert it if it exists.
while (pos != null && pos.NodeType == NodeType.Whitespace)
@@ -121,7 +121,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
///
/// Writes an optional semicolon, e.g. at the end of a type or namespace declaration.
///
- protected virtual void OptionalSemicolon(AstNode pos)
+ protected virtual void OptionalSemicolon(AstNode? pos)
{
// Look if there's a semicolon after the current node, and insert it if it exists.
while (pos != null && pos.NodeType == NodeType.Whitespace)
@@ -1947,7 +1947,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
WriteIdentifier(labelStatement.GetChildByRole(Roles.Identifier));
WriteToken(Roles.Colon);
bool foundLabelledStatement = false;
- for (AstNode tmp = labelStatement.NextSibling; tmp != null; tmp = tmp.NextSibling)
+ for (AstNode? tmp = labelStatement.NextSibling; tmp != null; tmp = tmp.NextSibling)
{
if (tmp.Role == labelStatement.Role)
{
diff --git a/ICSharpCode.Decompiler/CSharp/OutputVisitor/GenericGrammarAmbiguityVisitor.cs b/ICSharpCode.Decompiler/CSharp/OutputVisitor/GenericGrammarAmbiguityVisitor.cs
index e7f372f96..b56c4f6de 100644
--- a/ICSharpCode.Decompiler/CSharp/OutputVisitor/GenericGrammarAmbiguityVisitor.cs
+++ b/ICSharpCode.Decompiler/CSharp/OutputVisitor/GenericGrammarAmbiguityVisitor.cs
@@ -53,7 +53,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
var v = new GenericGrammarAmbiguityVisitor();
v.genericNestingLevel = 1;
- for (AstNode node = binaryOperatorExpression.Right; node != null; node = node.GetNextNode())
+ for (AstNode? node = binaryOperatorExpression.Right; node != null; node = node.GetNextNode())
{
if (node.AcceptVisitor(v))
return v.ambiguityFound;
diff --git a/ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertSpecialsDecorator.cs b/ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertSpecialsDecorator.cs
index 61901cc9c..b4d005143 100644
--- a/ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertSpecialsDecorator.cs
+++ b/ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertSpecialsDecorator.cs
@@ -84,7 +84,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
///
void WriteSpecials(AstNode start, AstNode end)
{
- for (AstNode pos = start; pos != end; pos = pos.NextSibling)
+ for (AstNode? pos = start; pos != end; pos = pos.NextSibling)
{
if (pos.Role == Roles.Comment)
{
@@ -125,7 +125,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
return;
}
// Look for the role between the current position and the nextNode.
- for (AstNode pos = positionStack.Peek(); pos != null && pos != nextNode; pos = pos.NextSibling)
+ for (AstNode? pos = positionStack.Peek(); pos != null && pos != nextNode; pos = pos.NextSibling)
{
if (pos.Role == role)
{
@@ -149,7 +149,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
{
return;
}
- for (AstNode pos = positionStack.Peek(); pos != null; pos = pos.NextSibling)
+ for (AstNode? pos = positionStack.Peek(); pos != null; pos = pos.NextSibling)
{
if (pos == node)
{
diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs
index ee0029dc9..fc169285e 100644
--- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs
+++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/ProjectFileWriterSdkStyle.cs
@@ -272,7 +272,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
foreach (var reference in module.AssemblyReferences.Where(r => !ImplicitReferences.Contains(r.Name)))
{
- if (isNetCoreApp && project.AssemblyReferenceClassifier.IsSharedAssembly(reference, out string runtimePack) && targetPacks.Contains(runtimePack))
+ if (isNetCoreApp && project.AssemblyReferenceClassifier.IsSharedAssembly(reference, out string? runtimePack) && targetPacks.Contains(runtimePack))
{
continue;
}
diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetFramework.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetFramework.cs
index 66279bbd3..793b70e7a 100644
--- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetFramework.cs
+++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetFramework.cs
@@ -52,7 +52,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
///
/// Gets the target framework identifier. Can be null if not defined.
///
- public string Identifier { get; }
+ public string? Identifier { get; }
///
/// Gets the target framework moniker. Can be null if not supported.
diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetServices.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetServices.cs
index e2458b802..b36a043ad 100644
--- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetServices.cs
+++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/TargetServices.cs
@@ -74,7 +74,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
{
string[] frameworkParts = targetFramework.Split(',');
targetFrameworkIdentifier = frameworkParts.FirstOrDefault(a => !a.StartsWith(VersionToken, StringComparison.OrdinalIgnoreCase) && !a.StartsWith(ProfileToken, StringComparison.OrdinalIgnoreCase));
- string frameworkVersion = frameworkParts.FirstOrDefault(a => a.StartsWith(VersionToken, StringComparison.OrdinalIgnoreCase));
+ string? frameworkVersion = frameworkParts.FirstOrDefault(a => a.StartsWith(VersionToken, StringComparison.OrdinalIgnoreCase));
if (frameworkVersion != null)
{
@@ -83,7 +83,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
versionNumber *= 10;
}
- string frameworkProfile = frameworkParts.FirstOrDefault(a => a.StartsWith(ProfileToken, StringComparison.OrdinalIgnoreCase));
+ string? frameworkProfile = frameworkParts.FirstOrDefault(a => a.StartsWith(ProfileToken, StringComparison.OrdinalIgnoreCase));
if (frameworkProfile != null)
targetFrameworkProfile = frameworkProfile.Substring(ProfileToken.Length);
}
diff --git a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs
index a61a71459..a55980cf5 100644
--- a/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs
+++ b/ICSharpCode.Decompiler/CSharp/ProjectDecompiler/WholeProjectDecompiler.cs
@@ -325,7 +325,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
{
foreach (var r in module.Resources.Where(r => r.ResourceType == ResourceType.Embedded))
{
- Stream stream = r.TryOpenStream();
+ Stream? stream = r.TryOpenStream();
stream.Position = 0;
if (r.Name.EndsWith(".resources", StringComparison.OrdinalIgnoreCase))
@@ -341,7 +341,7 @@ namespace ICSharpCode.Decompiler.CSharp.ProjectDecompiler
{
string fileName = SanitizeFileName(name)
.Replace('/', Path.DirectorySeparatorChar);
- string dirName = Path.GetDirectoryName(fileName);
+ string? dirName = Path.GetDirectoryName(fileName);
if (!string.IsNullOrEmpty(dirName) && directories.Add(dirName))
{
Directory.CreateDirectory(Path.Combine(TargetDirectory, dirName));
diff --git a/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs b/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs
index d964179ba..e181d9805 100644
--- a/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs
+++ b/ICSharpCode.Decompiler/CSharp/RequiredNamespaceCollector.cs
@@ -37,7 +37,7 @@ namespace ICSharpCode.Decompiler.CSharp
var collector = new RequiredNamespaceCollector(namespaces);
foreach (var type in module.TypeDefinitions)
{
- collector.CollectNamespaces(type, module, (CodeMappingInfo)null);
+ collector.CollectNamespaces(type, module, (CodeMappingInfo?)null);
}
collector.HandleAttributes(module.GetAssemblyAttributes());
collector.HandleAttributes(module.GetModuleAttributes());
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs
index 1d96a9bab..f3a37e841 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpConversions.cs
@@ -56,7 +56,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
if (compilation == null)
throw new ArgumentNullException(nameof(compilation));
CacheManager cache = compilation.CacheManager;
- CSharpConversions operators = (CSharpConversions)cache.GetShared(typeof(CSharpConversions));
+ CSharpConversions? operators = (CSharpConversions)cache.GetShared(typeof(CSharpConversions));
if (operators == null)
{
operators = (CSharpConversions)cache.GetOrAddShared(typeof(CSharpConversions), new CSharpConversions(compilation));
@@ -182,7 +182,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
throw new ArgumentNullException(nameof(toType));
TypePair pair = new TypePair(fromType, toType);
- if (implicitConversionCache.TryGetValue(pair, out Conversion c))
+ if (implicitConversionCache.TryGetValue(pair, out Conversion? c))
return c;
c = ImplicitConversion(fromType, toType, allowUserDefined: true, allowTuple: true);
@@ -600,7 +600,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
bool IdentityOrVarianceConversion(IType s, IType t, int subtypeCheckNestingDepth)
{
- ITypeDefinition def = s.GetDefinition();
+ ITypeDefinition? def = s.GetDefinition();
if (def != null)
{
if (!def.Equals(t.GetDefinition()))
@@ -697,7 +697,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
else if (fromType.Kind == TypeKind.Delegate && toType.Kind == TypeKind.Delegate)
{
- ITypeDefinition def = fromType.GetDefinition();
+ ITypeDefinition? def = fromType.GetDefinition();
if (def == null || !def.Equals(toType.GetDefinition()))
return false;
ParameterizedType? ps = fromType as ParameterizedType;
@@ -811,7 +811,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
else if (fromTypeCode == TypeCode.Int32)
{
- object cv = rr.ConstantValue;
+ object? cv = rr.ConstantValue;
if (cv == null)
return false;
int val = (int)cv;
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
index f78997d14..b4ed267ba 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/CSharpResolver.cs
@@ -506,7 +506,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
else if (expression.IsCompileTimeConstant && m.CanEvaluateAtCompileTime)
{
- object val;
+ object? val;
try
{
val = m.Invoke(this, expression.ConstantValue);
@@ -923,7 +923,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
else if (lhs.IsCompileTimeConstant && rhs.IsCompileTimeConstant && m.CanEvaluateAtCompileTime)
{
- object val;
+ object? val;
try
{
val = m.Invoke(this, lhs.ConstantValue, rhs.ConstantValue);
@@ -982,7 +982,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
#region Enum helper methods
IType GetEnumUnderlyingType(IType enumType)
{
- ITypeDefinition def = enumType.GetDefinition();
+ ITypeDefinition? def = enumType.GetDefinition();
return def != null ? def.EnumUnderlyingType : SpecialType.UnknownType;
}
@@ -1609,12 +1609,12 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
return trr != null && trr.Type.Equals(rr.Type);
}
- ResolveResult LookInCurrentType(string identifier, IReadOnlyList typeArguments, NameLookupMode lookupMode, bool parameterizeResultType)
+ ResolveResult? LookInCurrentType(string identifier, IReadOnlyList typeArguments, NameLookupMode lookupMode, bool parameterizeResultType)
{
int k = typeArguments.Count;
MemberLookup lookup = CreateMemberLookup(lookupMode);
// look in current type definitions
- for (ITypeDefinition t = this.CurrentTypeDefinition; t != null; t = t.DeclaringTypeDefinition)
+ for (ITypeDefinition? t = this.CurrentTypeDefinition; t != null; t = t.DeclaringTypeDefinition)
{
if (k == 0)
{
@@ -1651,7 +1651,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
return null;
}
- ResolveResult LookInCurrentUsingScope(string identifier, IReadOnlyList typeArguments, bool isInUsingDeclaration, bool parameterizeResultType)
+ ResolveResult? LookInCurrentUsingScope(string identifier, IReadOnlyList typeArguments, bool isInUsingDeclaration, bool parameterizeResultType)
{
// look in current namespace definitions
ResolvedUsingScope currentUsingScope = this.CurrentUsingScope;
@@ -1684,7 +1684,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
IType? firstResult = null;
foreach (var importedNamespace in u.Usings)
{
- ITypeDefinition def = importedNamespace.GetTypeDefinition(identifier, typeArguments.Count);
+ ITypeDefinition? def = importedNamespace.GetTypeDefinition(identifier, typeArguments.Count);
if (def != null)
{
IType resultType;
@@ -1712,7 +1712,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
return null;
}
- ResolveResult LookInUsingScopeNamespace(ResolvedUsingScope usingScope, INamespace n, string identifier, IReadOnlyList typeArguments, bool parameterizeResultType)
+ ResolveResult? LookInUsingScopeNamespace(ResolvedUsingScope usingScope, INamespace n, string identifier, IReadOnlyList typeArguments, bool parameterizeResultType)
{
if (n == null)
return null;
@@ -1720,7 +1720,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
int k = typeArguments.Count;
if (k == 0)
{
- INamespace childNamespace = n.GetChildNamespace(identifier);
+ INamespace? childNamespace = n.GetChildNamespace(identifier);
if (childNamespace != null)
{
if (usingScope != null && usingScope.HasAlias(identifier))
@@ -1729,7 +1729,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
}
// then look for a type
- ITypeDefinition def = n.GetTypeDefinition(identifier, k);
+ ITypeDefinition? def = n.GetTypeDefinition(identifier, k);
if (def != null && TopLevelTypeDefinitionIsAccessible(def))
{
IType result = def;
@@ -1781,7 +1781,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
ResolveResult ResolveExternAlias(string alias)
{
- INamespace ns = compilation.GetNamespaceForExternAlias(alias);
+ INamespace? ns = compilation.GetNamespaceForExternAlias(alias);
if (ns != null)
return new NamespaceResolveResult(ns);
else
@@ -1854,11 +1854,11 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
{
if (typeArguments.Count == 0)
{
- INamespace childNamespace = nrr.Namespace.GetChildNamespace(identifier);
+ INamespace? childNamespace = nrr.Namespace.GetChildNamespace(identifier);
if (childNamespace != null)
return new NamespaceResolveResult(childNamespace);
}
- ITypeDefinition def = nrr.Namespace.GetTypeDefinition(identifier, typeArguments.Count);
+ ITypeDefinition? def = nrr.Namespace.GetTypeDefinition(identifier, typeArguments.Count);
if (def != null)
{
if (parameterizeResultType && typeArguments.Count > 0)
@@ -1985,13 +1985,13 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
elementType = expression.Type.GetElementTypeFromIEnumerable(compilation, false, out bool? isGeneric);
if (isGeneric == true)
{
- ITypeDefinition enumerableOfT = compilation.FindType(KnownTypeCode.IEnumerableOfT).GetDefinition();
+ ITypeDefinition? enumerableOfT = compilation.FindType(KnownTypeCode.IEnumerableOfT).GetDefinition();
if (enumerableOfT != null)
collectionType = new ParameterizedType(enumerableOfT, new[] { elementType });
else
collectionType = SpecialType.UnknownType;
- ITypeDefinition enumeratorOfT = compilation.FindType(KnownTypeCode.IEnumeratorOfT).GetDefinition();
+ ITypeDefinition? enumeratorOfT = compilation.FindType(KnownTypeCode.IEnumeratorOfT).GetDefinition();
if (enumeratorOfT != null)
enumeratorType = new ParameterizedType(enumeratorOfT, new[] { elementType });
else
@@ -2060,7 +2060,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
/// new List { all extensions from SomeExtensions }
/// }
///
- public List> GetExtensionMethods(IType targetType, string? name = null, IReadOnlyList? typeArguments = null, bool substituteInferredTypes = false)
+ public List> GetExtensionMethods(IType? targetType, string? name = null, IReadOnlyList? typeArguments = null, bool substituteInferredTypes = false)
{
var lookup = CreateMemberLookup();
List> extensionMethodGroups = new List>();
@@ -2073,7 +2073,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
continue;
if (!lookup.IsAccessible(method, false))
continue;
- IType[] inferredTypes;
+ IType[]? inferredTypes;
if (typeArguments != null && typeArguments.Count > 0)
{
if (method.TypeParameters.Count != typeArguments.Count)
@@ -2118,7 +2118,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
/// If an array is returned, any slot with an uninferred type argument will be set to the method's
/// corresponding type parameter.
///
- public static bool IsEligibleExtensionMethod(IType targetType, IMethod method, bool useTypeInference, out IType[] outInferredTypes)
+ public static bool IsEligibleExtensionMethod(IType targetType, IMethod method, bool useTypeInference, out IType[]? outInferredTypes)
{
if (targetType == null)
throw new ArgumentNullException(nameof(targetType));
@@ -2128,7 +2128,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
return IsEligibleExtensionMethod(compilation, CSharpConversions.Get(compilation), targetType, method, useTypeInference, out outInferredTypes);
}
- static bool IsEligibleExtensionMethod(ICompilation compilation, CSharpConversions conversions, IType targetType, IMethod method, bool useTypeInference, out IType[]? outInferredTypes)
+ static bool IsEligibleExtensionMethod(ICompilation compilation, CSharpConversions conversions, IType? targetType, IMethod method, bool useTypeInference, out IType[]? outInferredTypes)
{
outInferredTypes = null;
if (targetType == null)
@@ -2814,9 +2814,9 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
return new ConstantResolveResult(type, GetDefaultValue(type));
}
- public static object GetDefaultValue(IType type)
+ public static object? GetDefaultValue(IType type)
{
- ITypeDefinition typeDef = type.GetDefinition();
+ ITypeDefinition? typeDef = type.GetDefinition();
if (typeDef == null)
return null;
if (typeDef.Kind == TypeKind.Enum)
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs b/ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs
index 994aba2bf..d08f85522 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/MemberLookup.cs
@@ -79,7 +79,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
{
if (targetType.Kind == TypeKind.TypeParameter)
targetType = ((ITypeParameter)targetType).EffectiveBaseClass;
- ITypeDefinition typeDef = targetType.GetDefinition();
+ ITypeDefinition? typeDef = targetType.GetDefinition();
if (typeDef == null)
return false;
for (ITypeDefinition c = currentTypeDefinition; c != null; c = c.DeclaringTypeDefinition)
@@ -195,7 +195,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
foreach (var entityGroup in entities.GroupBy(e => e.Name))
{
- List lookupGroups = new List();
+ List? lookupGroups = new List();
if (!lookupGroupDict.TryGetValue(entityGroup.Key, out lookupGroups))
lookupGroupDict.Add(entityGroup.Key, lookupGroups = new List());
@@ -243,7 +243,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
{
foreach (IType type in lookupGroup.NestedTypes)
{
- ITypeDefinition typeDef = type.GetDefinition();
+ ITypeDefinition? typeDef = type.GetDefinition();
if (typeDef != null)
yield return typeDef;
}
@@ -691,7 +691,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
// return true if type is an interface or System.Object
if (type.Kind == TypeKind.Interface)
return true;
- ITypeDefinition d = type.GetDefinition();
+ ITypeDefinition? d = type.GetDefinition();
return d != null && d.KnownTypeCode == KnownTypeCode.Object;
}
#endregion
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs b/ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs
index 3eaf041be..690033469 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/OverloadResolution.cs
@@ -582,7 +582,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
}
if (typeParameter.HasDefaultConstructorConstraint)
{
- ITypeDefinition def = typeArgument.GetDefinition();
+ ITypeDefinition? def = typeArgument.GetDefinition();
if (def != null && def.IsAbstract)
return false;
var ctors = typeArgument.GetConstructors(
diff --git a/ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs b/ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs
index 846922884..280c968f6 100644
--- a/ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs
+++ b/ICSharpCode.Decompiler/CSharp/Resolver/TypeInference.cs
@@ -1109,7 +1109,7 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
// Now filter out candidates that violate the upper bounds:
foreach (IType ub in upperBounds)
{
- ITypeDefinition ubDef = ub.GetDefinition();
+ ITypeDefinition? ubDef = ub.GetDefinition();
if (ubDef != null)
{
candidateTypeDefinitions.RemoveAll(c => !c.IsDerivedFrom(ubDef));
diff --git a/ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs b/ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs
index 6bf75e350..61186bb49 100644
--- a/ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs
+++ b/ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs
@@ -547,7 +547,7 @@ namespace ICSharpCode.Decompiler.CSharp
}
- List sequencePointCandidates = function.SequencePointCandidates;
+ List? sequencePointCandidates = function.SequencePointCandidates;
int currSPCandidateIndex = 0;
for (int i = 0; i < newList.Count - 1; i++)
diff --git a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs
index e75785415..37db21cda 100644
--- a/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs
+++ b/ICSharpCode.Decompiler/CSharp/StatementBuilder.cs
@@ -213,7 +213,8 @@ namespace ICSharpCode.Decompiler.CSharp
TranslatedExpression value;
IType type;
- if (inst.Value is StringToInt strToInt)
+ var strToInt = inst.Value as StringToInt;
+ if (strToInt != null)
{
value = exprBuilder.Translate(strToInt.Argument)
.ConvertTo(
@@ -328,7 +329,7 @@ namespace ICSharpCode.Decompiler.CSharp
}
Debug.Assert(block.FinalInstruction.OpCode == OpCode.Nop);
}
- if (endContainerLabels.TryGetValue(switchContainer, out string label))
+ if (endContainerLabels.TryGetValue(switchContainer, out string? label))
{
lastSectionStatements.Add(new LabelStatement { Label = label });
lastSectionStatements.Add(new BreakStatement());
@@ -411,7 +412,7 @@ namespace ICSharpCode.Decompiler.CSharp
else
return new ReturnStatement().WithILInstruction(inst);
}
- if (!endContainerLabels.TryGetValue(inst.TargetContainer, out string label))
+ if (!endContainerLabels.TryGetValue(inst.TargetContainer, out string? label))
{
label = "end_" + inst.TargetLabel;
if (!duplicateLabels.TryGetValue(label, out int count))
@@ -1261,8 +1262,8 @@ namespace ICSharpCode.Decompiler.CSharp
Statement ConvertLoop(BlockContainer container)
{
- ILInstruction condition;
- Block loopBody;
+ ILInstruction? condition;
+ Block? loopBody;
BlockStatement blockStatement;
continueCount = 0;
breakTarget = container;
@@ -1480,7 +1481,7 @@ namespace ICSharpCode.Decompiler.CSharp
blockStatement.Add(Convert(block.FinalInstruction));
}
}
- if (endContainerLabels.TryGetValue(container, out string label))
+ if (endContainerLabels.TryGetValue(container, out string? label))
{
if (isLoop && !(blockStatement.LastOrDefault() is ContinueStatement))
{
@@ -1500,7 +1501,7 @@ namespace ICSharpCode.Decompiler.CSharp
string EnsureUniqueLabel(Block block)
{
- if (labels.TryGetValue(block, out string label))
+ if (labels.TryGetValue(block, out string? label))
return label;
if (!duplicateLabels.TryGetValue(block.Label, out int count))
{
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs b/ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs
index 73b76dc1f..02383e97c 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/AstNode.cs
@@ -202,7 +202,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
get { return parent; }
}
- public Role Role {
+ public Role? Role {
get {
return Role.GetByIndex(flags & roleIndexMask);
}
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs b/ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs
index d63e77884..bccffa798 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/AstNodeCollection.cs
@@ -49,7 +49,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
get {
int count = 0;
uint roleIndex = role.Index;
- for (AstNode cur = node.FirstChild; cur != null; cur = cur.NextSibling)
+ for (AstNode? cur = node.FirstChild; cur != null; cur = cur.NextSibling)
{
if (cur.RoleIndex == roleIndex)
count++;
@@ -177,8 +177,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public IEnumerator GetEnumerator()
{
uint roleIndex = role.Index;
- AstNode next;
- for (AstNode cur = node.FirstChild; cur != null; cur = next)
+ AstNode? next;
+ for (AstNode? cur = node.FirstChild; cur != null; cur = next)
{
Debug.Assert(cur.Parent == node);
// Remember next before yielding cur.
@@ -214,7 +214,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
return Pattern.DoMatchCollection(role, node.FirstChild, other.node.FirstChild, match);
}
- public void InsertAfter(T existingItem, T newItem)
+ public void InsertAfter(T? existingItem, T newItem)
{
node.InsertChildAfter(existingItem, newItem, role);
}
@@ -230,8 +230,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public void AcceptVisitor(IAstVisitor visitor)
{
uint roleIndex = role.Index;
- AstNode next;
- for (AstNode cur = node.FirstChild; cur != null; cur = next)
+ AstNode? next;
+ for (AstNode? cur = node.FirstChild; cur != null; cur = next)
{
Debug.Assert(cur.Parent == node);
// Remember next before yielding cur.
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs b/ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs
index 2016b429c..7dc80d576 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs
@@ -34,7 +34,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
protected virtual void VisitChildren(AstNode node)
{
- AstNode next;
+ AstNode? next;
for (var child = node.FirstChild; child != null; child = next)
{
// Store next to allow the loop to continue
@@ -715,7 +715,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
protected virtual T VisitChildren(AstNode node)
{
- AstNode next;
+ AstNode? next;
for (var child = node.FirstChild; child != null; child = next)
{
// Store next to allow the loop to continue
@@ -1396,9 +1396,9 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
public abstract class DepthFirstAstVisitor : IAstVisitor
{
- protected virtual S VisitChildren(AstNode node, T data)
+ protected virtual S? VisitChildren(AstNode node, T data)
{
- AstNode next;
+ AstNode? next;
for (var child = node.FirstChild; child != null; child = next)
{
// Store next to allow the loop to continue
@@ -1409,7 +1409,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
return default(S);
}
- public virtual S VisitNullNode(AstNode nullNode, T data)
+ public virtual S? VisitNullNode(AstNode nullNode, T data)
{
// Should we call VisitChildren here?
// We usually want to ignore null nodes.
@@ -1418,657 +1418,657 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
return default(S);
}
- public virtual S VisitSyntaxTree(SyntaxTree unit, T data)
+ public virtual S? VisitSyntaxTree(SyntaxTree unit, T data)
{
return VisitChildren(unit, data);
}
- public virtual S VisitComment(Comment comment, T data)
+ public virtual S? VisitComment(Comment comment, T data)
{
return VisitChildren(comment, data);
}
- public virtual S VisitDocumentationReference(DocumentationReference documentationReference, T data)
+ public virtual S? VisitDocumentationReference(DocumentationReference documentationReference, T data)
{
return VisitChildren(documentationReference, data);
}
- public virtual S VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective, T data)
+ public virtual S? VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective, T data)
{
return VisitChildren(preProcessorDirective, data);
}
- public virtual S VisitIdentifier(Identifier identifier, T data)
+ public virtual S? VisitIdentifier(Identifier identifier, T data)
{
return VisitChildren(identifier, data);
}
- public virtual S VisitCSharpTokenNode(CSharpTokenNode token, T data)
+ public virtual S? VisitCSharpTokenNode(CSharpTokenNode token, T data)
{
return VisitChildren(token, data);
}
- public virtual S VisitPrimitiveType(PrimitiveType primitiveType, T data)
+ public virtual S? VisitPrimitiveType(PrimitiveType primitiveType, T data)
{
return VisitChildren(primitiveType, data);
}
- public virtual S VisitComposedType(ComposedType composedType, T data)
+ public virtual S? VisitComposedType(ComposedType composedType, T data)
{
return VisitChildren(composedType, data);
}
- public virtual S VisitSimpleType(SimpleType simpleType, T data)
+ public virtual S? VisitSimpleType(SimpleType simpleType, T data)
{
return VisitChildren(simpleType, data);
}
- public virtual S VisitMemberType(MemberType memberType, T data)
+ public virtual S? VisitMemberType(MemberType memberType, T data)
{
return VisitChildren(memberType, data);
}
- public virtual S VisitTupleType(TupleAstType tupleType, T data)
+ public virtual S? VisitTupleType(TupleAstType tupleType, T data)
{
return VisitChildren(tupleType, data);
}
- public virtual S VisitTupleTypeElement(TupleTypeElement tupleTypeElement, T data)
+ public virtual S? VisitTupleTypeElement(TupleTypeElement tupleTypeElement, T data)
{
return VisitChildren(tupleTypeElement, data);
}
- public virtual S VisitFunctionPointerType(FunctionPointerAstType functionPointerType, T data)
+ public virtual S? VisitFunctionPointerType(FunctionPointerAstType functionPointerType, T data)
{
return VisitChildren(functionPointerType, data);
}
- public virtual S VisitInvocationType(InvocationAstType invocationType, T data)
+ public virtual S? VisitInvocationType(InvocationAstType invocationType, T data)
{
return VisitChildren(invocationType, data);
}
- public virtual S VisitAttribute(Attribute attribute, T data)
+ public virtual S? VisitAttribute(Attribute attribute, T data)
{
return VisitChildren(attribute, data);
}
- public virtual S VisitAttributeSection(AttributeSection attributeSection, T data)
+ public virtual S? VisitAttributeSection(AttributeSection attributeSection, T data)
{
return VisitChildren(attributeSection, data);
}
- public virtual S VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, T data)
+ public virtual S? VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, T data)
{
return VisitChildren(delegateDeclaration, data);
}
- public virtual S VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, T data)
+ public virtual S? VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, T data)
{
return VisitChildren(namespaceDeclaration, data);
}
- public virtual S VisitTypeDeclaration(TypeDeclaration typeDeclaration, T data)
+ public virtual S? VisitTypeDeclaration(TypeDeclaration typeDeclaration, T data)
{
return VisitChildren(typeDeclaration, data);
}
- public virtual S VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration, T data)
+ public virtual S? VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration, T data)
{
return VisitChildren(typeParameterDeclaration, data);
}
- public virtual S VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, T data)
+ public virtual S? VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, T data)
{
return VisitChildren(enumMemberDeclaration, data);
}
- public virtual S VisitUsingDeclaration(UsingDeclaration usingDeclaration, T data)
+ public virtual S? VisitUsingDeclaration(UsingDeclaration usingDeclaration, T data)
{
return VisitChildren(usingDeclaration, data);
}
- public virtual S VisitUsingAliasDeclaration(UsingAliasDeclaration usingDeclaration, T data)
+ public virtual S? VisitUsingAliasDeclaration(UsingAliasDeclaration usingDeclaration, T data)
{
return VisitChildren(usingDeclaration, data);
}
- public virtual S VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration, T data)
+ public virtual S? VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration, T data)
{
return VisitChildren(externAliasDeclaration, data);
}
- public virtual S VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, T data)
+ public virtual S? VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, T data)
{
return VisitChildren(constructorDeclaration, data);
}
- public virtual S VisitConstructorInitializer(ConstructorInitializer constructorInitializer, T data)
+ public virtual S? VisitConstructorInitializer(ConstructorInitializer constructorInitializer, T data)
{
return VisitChildren(constructorInitializer, data);
}
- public virtual S VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, T data)
+ public virtual S? VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, T data)
{
return VisitChildren(destructorDeclaration, data);
}
- public virtual S VisitEventDeclaration(EventDeclaration eventDeclaration, T data)
+ public virtual S? VisitEventDeclaration(EventDeclaration eventDeclaration, T data)
{
return VisitChildren(eventDeclaration, data);
}
- public virtual S VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration, T data)
+ public virtual S? VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration, T data)
{
return VisitChildren(eventDeclaration, data);
}
- public virtual S VisitFieldDeclaration(FieldDeclaration fieldDeclaration, T data)
+ public virtual S? VisitFieldDeclaration(FieldDeclaration fieldDeclaration, T data)
{
return VisitChildren(fieldDeclaration, data);
}
- public virtual S VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration, T data)
+ public virtual S? VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration, T data)
{
return VisitChildren(fixedFieldDeclaration, data);
}
- public virtual S VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer, T data)
+ public virtual S? VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer, T data)
{
return VisitChildren(fixedVariableInitializer, data);
}
- public virtual S VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, T data)
+ public virtual S? VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, T data)
{
return VisitChildren(indexerDeclaration, data);
}
- public virtual S VisitMethodDeclaration(MethodDeclaration methodDeclaration, T data)
+ public virtual S? VisitMethodDeclaration(MethodDeclaration methodDeclaration, T data)
{
return VisitChildren(methodDeclaration, data);
}
- public virtual S VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data)
+ public virtual S? VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data)
{
return VisitChildren(operatorDeclaration, data);
}
- public virtual S VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, T data)
+ public virtual S? VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, T data)
{
return VisitChildren(propertyDeclaration, data);
}
- public virtual S VisitAccessor(Accessor accessor, T data)
+ public virtual S? VisitAccessor(Accessor accessor, T data)
{
return VisitChildren(accessor, data);
}
- public virtual S VisitVariableInitializer(VariableInitializer variableInitializer, T data)
+ public virtual S? VisitVariableInitializer(VariableInitializer variableInitializer, T data)
{
return VisitChildren(variableInitializer, data);
}
- public virtual S VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, T data)
+ public virtual S? VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, T data)
{
return VisitChildren(parameterDeclaration, data);
}
- public virtual S VisitConstraint(Constraint constraint, T data)
+ public virtual S? VisitConstraint(Constraint constraint, T data)
{
return VisitChildren(constraint, data);
}
- public virtual S VisitBlockStatement(BlockStatement blockStatement, T data)
+ public virtual S? VisitBlockStatement(BlockStatement blockStatement, T data)
{
return VisitChildren(blockStatement, data);
}
- public virtual S VisitExpressionStatement(ExpressionStatement expressionStatement, T data)
+ public virtual S? VisitExpressionStatement(ExpressionStatement expressionStatement, T data)
{
return VisitChildren(expressionStatement, data);
}
- public virtual S VisitBreakStatement(BreakStatement breakStatement, T data)
+ public virtual S? VisitBreakStatement(BreakStatement breakStatement, T data)
{
return VisitChildren(breakStatement, data);
}
- public virtual S VisitCheckedStatement(CheckedStatement checkedStatement, T data)
+ public virtual S? VisitCheckedStatement(CheckedStatement checkedStatement, T data)
{
return VisitChildren(checkedStatement, data);
}
- public virtual S VisitContinueStatement(ContinueStatement continueStatement, T data)
+ public virtual S? VisitContinueStatement(ContinueStatement continueStatement, T data)
{
return VisitChildren(continueStatement, data);
}
- public virtual S VisitDoWhileStatement(DoWhileStatement doWhileStatement, T data)
+ public virtual S? VisitDoWhileStatement(DoWhileStatement doWhileStatement, T data)
{
return VisitChildren(doWhileStatement, data);
}
- public virtual S VisitEmptyStatement(EmptyStatement emptyStatement, T data)
+ public virtual S? VisitEmptyStatement(EmptyStatement emptyStatement, T data)
{
return VisitChildren(emptyStatement, data);
}
- public virtual S VisitFixedStatement(FixedStatement fixedStatement, T data)
+ public virtual S? VisitFixedStatement(FixedStatement fixedStatement, T data)
{
return VisitChildren(fixedStatement, data);
}
- public virtual S VisitForeachStatement(ForeachStatement foreachStatement, T data)
+ public virtual S? VisitForeachStatement(ForeachStatement foreachStatement, T data)
{
return VisitChildren(foreachStatement, data);
}
- public virtual S VisitForStatement(ForStatement forStatement, T data)
+ public virtual S? VisitForStatement(ForStatement forStatement, T data)
{
return VisitChildren(forStatement, data);
}
- public virtual S VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, T data)
+ public virtual S? VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, T data)
{
return VisitChildren(gotoCaseStatement, data);
}
- public virtual S VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, T data)
+ public virtual S? VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, T data)
{
return VisitChildren(gotoDefaultStatement, data);
}
- public virtual S VisitGotoStatement(GotoStatement gotoStatement, T data)
+ public virtual S? VisitGotoStatement(GotoStatement gotoStatement, T data)
{
return VisitChildren(gotoStatement, data);
}
- public virtual S VisitIfElseStatement(IfElseStatement ifElseStatement, T data)
+ public virtual S? VisitIfElseStatement(IfElseStatement ifElseStatement, T data)
{
return VisitChildren(ifElseStatement, data);
}
- public virtual S VisitLabelStatement(LabelStatement labelStatement, T data)
+ public virtual S? VisitLabelStatement(LabelStatement labelStatement, T data)
{
return VisitChildren(labelStatement, data);
}
- public virtual S VisitLockStatement(LockStatement lockStatement, T data)
+ public virtual S? VisitLockStatement(LockStatement lockStatement, T data)
{
return VisitChildren(lockStatement, data);
}
- public virtual S VisitReturnStatement(ReturnStatement returnStatement, T data)
+ public virtual S? VisitReturnStatement(ReturnStatement returnStatement, T data)
{
return VisitChildren(returnStatement, data);
}
- public virtual S VisitSwitchStatement(SwitchStatement switchStatement, T data)
+ public virtual S? VisitSwitchStatement(SwitchStatement switchStatement, T data)
{
return VisitChildren(switchStatement, data);
}
- public virtual S VisitSwitchSection(SwitchSection switchSection, T data)
+ public virtual S? VisitSwitchSection(SwitchSection switchSection, T data)
{
return VisitChildren(switchSection, data);
}
- public virtual S VisitCaseLabel(CaseLabel caseLabel, T data)
+ public virtual S? VisitCaseLabel(CaseLabel caseLabel, T data)
{
return VisitChildren(caseLabel, data);
}
- public virtual S VisitSwitchExpression(SwitchExpression switchExpression, T data)
+ public virtual S? VisitSwitchExpression(SwitchExpression switchExpression, T data)
{
return VisitChildren(switchExpression, data);
}
- public virtual S VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection, T data)
+ public virtual S? VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection, T data)
{
return VisitChildren(switchExpressionSection, data);
}
- public virtual S VisitThrowStatement(ThrowStatement throwStatement, T data)
+ public virtual S? VisitThrowStatement(ThrowStatement throwStatement, T data)
{
return VisitChildren(throwStatement, data);
}
- public virtual S VisitTryCatchStatement(TryCatchStatement tryCatchStatement, T data)
+ public virtual S? VisitTryCatchStatement(TryCatchStatement tryCatchStatement, T data)
{
return VisitChildren(tryCatchStatement, data);
}
- public virtual S VisitCatchClause(CatchClause catchClause, T data)
+ public virtual S? VisitCatchClause(CatchClause catchClause, T data)
{
return VisitChildren(catchClause, data);
}
- public virtual S VisitUncheckedStatement(UncheckedStatement uncheckedStatement, T data)
+ public virtual S? VisitUncheckedStatement(UncheckedStatement uncheckedStatement, T data)
{
return VisitChildren(uncheckedStatement, data);
}
- public virtual S VisitUnsafeStatement(UnsafeStatement unsafeStatement, T data)
+ public virtual S? VisitUnsafeStatement(UnsafeStatement unsafeStatement, T data)
{
return VisitChildren(unsafeStatement, data);
}
- public virtual S VisitUsingStatement(UsingStatement usingStatement, T data)
+ public virtual S? VisitUsingStatement(UsingStatement usingStatement, T data)
{
return VisitChildren(usingStatement, data);
}
- public virtual S VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement, T data)
+ public virtual S? VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement, T data)
{
return VisitChildren(variableDeclarationStatement, data);
}
- public virtual S VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement, T data)
+ public virtual S? VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement, T data)
{
return VisitChildren(localFunctionDeclarationStatement, data);
}
- public virtual S VisitWhileStatement(WhileStatement whileStatement, T data)
+ public virtual S? VisitWhileStatement(WhileStatement whileStatement, T data)
{
return VisitChildren(whileStatement, data);
}
- public virtual S VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement, T data)
+ public virtual S? VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement, T data)
{
return VisitChildren(yieldBreakStatement, data);
}
- public virtual S VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement, T data)
+ public virtual S? VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement, T data)
{
return VisitChildren(yieldReturnStatement, data);
}
- public virtual S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data)
+ public virtual S? VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data)
{
return VisitChildren(anonymousMethodExpression, data);
}
- public virtual S VisitLambdaExpression(LambdaExpression lambdaExpression, T data)
+ public virtual S? VisitLambdaExpression(LambdaExpression lambdaExpression, T data)
{
return VisitChildren(lambdaExpression, data);
}
- public virtual S VisitAssignmentExpression(AssignmentExpression assignmentExpression, T data)
+ public virtual S? VisitAssignmentExpression(AssignmentExpression assignmentExpression, T data)
{
return VisitChildren(assignmentExpression, data);
}
- public virtual S VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, T data)
+ public virtual S? VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, T data)
{
return VisitChildren(baseReferenceExpression, data);
}
- public virtual S VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, T data)
+ public virtual S? VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, T data)
{
return VisitChildren(binaryOperatorExpression, data);
}
- public virtual S VisitCastExpression(CastExpression castExpression, T data)
+ public virtual S? VisitCastExpression(CastExpression castExpression, T data)
{
return VisitChildren(castExpression, data);
}
- public virtual S VisitCheckedExpression(CheckedExpression checkedExpression, T data)
+ public virtual S? VisitCheckedExpression(CheckedExpression checkedExpression, T data)
{
return VisitChildren(checkedExpression, data);
}
- public virtual S VisitConditionalExpression(ConditionalExpression conditionalExpression, T data)
+ public virtual S? VisitConditionalExpression(ConditionalExpression conditionalExpression, T data)
{
return VisitChildren(conditionalExpression, data);
}
- public virtual S VisitIdentifierExpression(IdentifierExpression identifierExpression, T data)
+ public virtual S? VisitIdentifierExpression(IdentifierExpression identifierExpression, T data)
{
return VisitChildren(identifierExpression, data);
}
- public virtual S VisitIndexerExpression(IndexerExpression indexerExpression, T data)
+ public virtual S? VisitIndexerExpression(IndexerExpression indexerExpression, T data)
{
return VisitChildren(indexerExpression, data);
}
- public virtual S VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression, T data)
+ public virtual S? VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression, T data)
{
return VisitChildren(interpolatedStringExpression, data);
}
- public virtual S VisitInterpolation(Interpolation interpolation, T data)
+ public virtual S? VisitInterpolation(Interpolation interpolation, T data)
{
return VisitChildren(interpolation, data);
}
- public virtual S VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText, T data)
+ public virtual S? VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText, T data)
{
return VisitChildren(interpolatedStringText, data);
}
- public virtual S VisitInvocationExpression(InvocationExpression invocationExpression, T data)
+ public virtual S? VisitInvocationExpression(InvocationExpression invocationExpression, T data)
{
return VisitChildren(invocationExpression, data);
}
- public virtual S VisitDirectionExpression(DirectionExpression directionExpression, T data)
+ public virtual S? VisitDirectionExpression(DirectionExpression directionExpression, T data)
{
return VisitChildren(directionExpression, data);
}
- public virtual S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data)
+ public virtual S? VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data)
{
return VisitChildren(memberReferenceExpression, data);
}
- public virtual S VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, T data)
+ public virtual S? VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, T data)
{
return VisitChildren(nullReferenceExpression, data);
}
- public virtual S VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, T data)
+ public virtual S? VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, T data)
{
return VisitChildren(objectCreateExpression, data);
}
- public virtual S VisitDeclarationExpression(DeclarationExpression declarationExpression, T data)
+ public virtual S? VisitDeclarationExpression(DeclarationExpression declarationExpression, T data)
{
return VisitChildren(declarationExpression, data);
}
- public virtual S VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression, T data)
+ public virtual S? VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression, T data)
{
return VisitChildren(recursivePatternExpression, data);
}
- public virtual S VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression, T data)
+ public virtual S? VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression, T data)
{
return VisitChildren(outVarDeclarationExpression, data);
}
- public virtual S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data)
+ public virtual S? VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data)
{
return VisitChildren(anonymousTypeCreateExpression, data);
}
- public virtual S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data)
+ public virtual S? VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data)
{
return VisitChildren(arrayCreateExpression, data);
}
- public virtual S VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, T data)
+ public virtual S? VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, T data)
{
return VisitChildren(parenthesizedExpression, data);
}
- public virtual S VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, T data)
+ public virtual S? VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, T data)
{
return VisitChildren(pointerReferenceExpression, data);
}
- public virtual S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data)
+ public virtual S? VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data)
{
return VisitChildren(primitiveExpression, data);
}
- public virtual S VisitSizeOfExpression(SizeOfExpression sizeOfExpression, T data)
+ public virtual S? VisitSizeOfExpression(SizeOfExpression sizeOfExpression, T data)
{
return VisitChildren(sizeOfExpression, data);
}
- public virtual S VisitStackAllocExpression(StackAllocExpression stackAllocExpression, T data)
+ public virtual S? VisitStackAllocExpression(StackAllocExpression stackAllocExpression, T data)
{
return VisitChildren(stackAllocExpression, data);
}
- public virtual S VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, T data)
+ public virtual S? VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, T data)
{
return VisitChildren(thisReferenceExpression, data);
}
- public virtual S VisitThrowExpression(ThrowExpression throwExpression, T data)
+ public virtual S? VisitThrowExpression(ThrowExpression throwExpression, T data)
{
return VisitChildren(throwExpression, data);
}
- public virtual S VisitTupleExpression(TupleExpression tupleExpression, T data)
+ public virtual S? VisitTupleExpression(TupleExpression tupleExpression, T data)
{
return VisitChildren(tupleExpression, data);
}
- public virtual S VisitTypeOfExpression(TypeOfExpression typeOfExpression, T data)
+ public virtual S? VisitTypeOfExpression(TypeOfExpression typeOfExpression, T data)
{
return VisitChildren(typeOfExpression, data);
}
- public virtual S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data)
+ public virtual S? VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data)
{
return VisitChildren(typeReferenceExpression, data);
}
- public virtual S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data)
+ public virtual S? VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data)
{
return VisitChildren(unaryOperatorExpression, data);
}
- public virtual S VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data)
+ public virtual S? VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data)
{
return VisitChildren(uncheckedExpression, data);
}
- public virtual S VisitQueryExpression(QueryExpression queryExpression, T data)
+ public virtual S? VisitQueryExpression(QueryExpression queryExpression, T data)
{
return VisitChildren(queryExpression, data);
}
- public virtual S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data)
+ public virtual S? VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data)
{
return VisitChildren(queryContinuationClause, data);
}
- public virtual S VisitQueryFromClause(QueryFromClause queryFromClause, T data)
+ public virtual S? VisitQueryFromClause(QueryFromClause queryFromClause, T data)
{
return VisitChildren(queryFromClause, data);
}
- public virtual S VisitQueryLetClause(QueryLetClause queryLetClause, T data)
+ public virtual S? VisitQueryLetClause(QueryLetClause queryLetClause, T data)
{
return VisitChildren(queryLetClause, data);
}
- public virtual S VisitQueryWhereClause(QueryWhereClause queryWhereClause, T data)
+ public virtual S? VisitQueryWhereClause(QueryWhereClause queryWhereClause, T data)
{
return VisitChildren(queryWhereClause, data);
}
- public virtual S VisitQueryJoinClause(QueryJoinClause queryJoinClause, T data)
+ public virtual S? VisitQueryJoinClause(QueryJoinClause queryJoinClause, T data)
{
return VisitChildren(queryJoinClause, data);
}
- public virtual S VisitQueryOrderClause(QueryOrderClause queryOrderClause, T data)
+ public virtual S? VisitQueryOrderClause(QueryOrderClause queryOrderClause, T data)
{
return VisitChildren(queryOrderClause, data);
}
- public virtual S VisitQueryOrdering(QueryOrdering queryOrdering, T data)
+ public virtual S? VisitQueryOrdering(QueryOrdering queryOrdering, T data)
{
return VisitChildren(queryOrdering, data);
}
- public virtual S VisitQuerySelectClause(QuerySelectClause querySelectClause, T data)
+ public virtual S? VisitQuerySelectClause(QuerySelectClause querySelectClause, T data)
{
return VisitChildren(querySelectClause, data);
}
- public virtual S VisitQueryGroupClause(QueryGroupClause queryGroupClause, T data)
+ public virtual S? VisitQueryGroupClause(QueryGroupClause queryGroupClause, T data)
{
return VisitChildren(queryGroupClause, data);
}
- public virtual S VisitAsExpression(AsExpression asExpression, T data)
+ public virtual S? VisitAsExpression(AsExpression asExpression, T data)
{
return VisitChildren(asExpression, data);
}
- public virtual S VisitIsExpression(IsExpression isExpression, T data)
+ public virtual S? VisitIsExpression(IsExpression isExpression, T data)
{
return VisitChildren(isExpression, data);
}
- public virtual S VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, T data)
+ public virtual S? VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, T data)
{
return VisitChildren(defaultValueExpression, data);
}
- public virtual S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data)
+ public virtual S? VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data)
{
return VisitChildren(undocumentedExpression, data);
}
- public virtual S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data)
+ public virtual S? VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data)
{
return VisitChildren(arrayInitializerExpression, data);
}
- public virtual S VisitArraySpecifier(ArraySpecifier arraySpecifier, T data)
+ public virtual S? VisitArraySpecifier(ArraySpecifier arraySpecifier, T data)
{
return VisitChildren(arraySpecifier, data);
}
- public virtual S VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data)
+ public virtual S? VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data)
{
return VisitChildren(namedArgumentExpression, data);
}
- public virtual S VisitNamedExpression(NamedExpression namedExpression, T data)
+ public virtual S? VisitNamedExpression(NamedExpression namedExpression, T data)
{
return VisitChildren(namedExpression, data);
}
- public virtual S VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation, T data)
+ public virtual S? VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation, T data)
{
return VisitChildren(singleVariableDesignation, data);
}
- public virtual S VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation, T data)
+ public virtual S? VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation, T data)
{
return VisitChildren(parenthesizedVariableDesignation, data);
}
- public virtual S VisitErrorNode(AstNode errorNode, T data)
+ public virtual S? VisitErrorNode(AstNode errorNode, T data)
{
return VisitChildren(errorNode, data);
}
- public virtual S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data)
+ public virtual S? VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data)
{
return VisitChildren(placeholder, data);
}
- public virtual S VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression, T data)
+ public virtual S? VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression, T data)
{
return VisitChildren(withInitializerExpression, data);
}
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/IAnnotatable.cs b/ICSharpCode.Decompiler/CSharp/Syntax/IAnnotatable.cs
index 8256661a5..6a033f8e1 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/IAnnotatable.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/IAnnotatable.cs
@@ -42,7 +42,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
/// The type of the annotation.
///
- T Annotation() where T : class;
+ T? Annotation() where T : class;
///
/// Gets the first annotation of the specified type.
@@ -51,7 +51,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
/// The type of the annotation.
///
- object Annotation(Type type);
+ object? Annotation(Type type);
///
/// Adds an annotation to this instance.
@@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
// or to an AnnotationList.
// Once it is pointed at an AnnotationList, it will never change (this allows thread-safety support by locking the list)
- object annotations;
+ object? annotations;
///
/// Clones all annotations.
@@ -136,7 +136,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
if (annotation == null)
throw new ArgumentNullException(nameof(annotation));
retry: // Retry until successful
- object oldAnnotation = Interlocked.CompareExchange(ref this.annotations, annotation, null);
+ object? oldAnnotation = Interlocked.CompareExchange(ref this.annotations, annotation, null);
if (oldAnnotation == null)
{
return; // we successfully added a single annotation
@@ -167,7 +167,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public virtual void RemoveAnnotations() where T : class
{
retry: // Retry until successful
- object oldAnnotations = this.annotations;
+ object? oldAnnotations = this.annotations;
AnnotationList? list = oldAnnotations as AnnotationList;
if (list != null)
{
@@ -189,7 +189,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
if (type == null)
throw new ArgumentNullException(nameof(type));
retry: // Retry until successful
- object oldAnnotations = this.annotations;
+ object? oldAnnotations = this.annotations;
AnnotationList? list = oldAnnotations as AnnotationList;
if (list != null)
{
@@ -206,9 +206,9 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
}
}
- public T Annotation() where T : class
+ public T? Annotation() where T : class
{
- object annotations = this.annotations;
+ object? annotations = this.annotations;
AnnotationList? list = annotations as AnnotationList;
if (list != null)
{
@@ -229,11 +229,11 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
}
}
- public object Annotation(Type type)
+ public object? Annotation(Type type)
{
if (type == null)
throw new ArgumentNullException(nameof(type));
- object annotations = this.annotations;
+ object? annotations = this.annotations;
AnnotationList? list = annotations as AnnotationList;
if (list != null)
{
@@ -259,7 +259,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
public IEnumerable
public interface IAstVisitor
{
- S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression);
- S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
- S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression);
- S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression);
- S VisitAsExpression(AsExpression asExpression);
- S VisitAssignmentExpression(AssignmentExpression assignmentExpression);
- S VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression);
- S VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression);
- S VisitCastExpression(CastExpression castExpression);
- S VisitCheckedExpression(CheckedExpression checkedExpression);
- S VisitConditionalExpression(ConditionalExpression conditionalExpression);
- S VisitDeclarationExpression(DeclarationExpression declarationExpression);
- S VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression);
- S VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression);
- S VisitDirectionExpression(DirectionExpression directionExpression);
- S VisitIdentifierExpression(IdentifierExpression identifierExpression);
- S VisitIndexerExpression(IndexerExpression indexerExpression);
- S VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression);
- S VisitInvocationExpression(InvocationExpression invocationExpression);
- S VisitIsExpression(IsExpression isExpression);
- S VisitLambdaExpression(LambdaExpression lambdaExpression);
- S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression);
- S VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression);
- S VisitNamedExpression(NamedExpression namedExpression);
- S VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression);
- S VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression);
- S VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression);
- S VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression);
- S VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression);
- S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression);
- S VisitSizeOfExpression(SizeOfExpression sizeOfExpression);
- S VisitStackAllocExpression(StackAllocExpression stackAllocExpression);
- S VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression);
- S VisitThrowExpression(ThrowExpression throwExpression);
- S VisitTupleExpression(TupleExpression tupleExpression);
- S VisitTypeOfExpression(TypeOfExpression typeOfExpression);
- S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression);
- S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression);
- S VisitUncheckedExpression(UncheckedExpression uncheckedExpression);
- S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
- S VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression);
-
- S VisitQueryExpression(QueryExpression queryExpression);
- S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause);
- S VisitQueryFromClause(QueryFromClause queryFromClause);
- S VisitQueryLetClause(QueryLetClause queryLetClause);
- S VisitQueryWhereClause(QueryWhereClause queryWhereClause);
- S VisitQueryJoinClause(QueryJoinClause queryJoinClause);
- S VisitQueryOrderClause(QueryOrderClause queryOrderClause);
- S VisitQueryOrdering(QueryOrdering queryOrdering);
- S VisitQuerySelectClause(QuerySelectClause querySelectClause);
- S VisitQueryGroupClause(QueryGroupClause queryGroupClause);
-
- S VisitAttribute(Attribute attribute);
- S VisitAttributeSection(AttributeSection attributeSection);
- S VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration);
- S VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration);
- S VisitTypeDeclaration(TypeDeclaration typeDeclaration);
- S VisitUsingAliasDeclaration(UsingAliasDeclaration usingAliasDeclaration);
- S VisitUsingDeclaration(UsingDeclaration usingDeclaration);
- S VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration);
-
- S VisitBlockStatement(BlockStatement blockStatement);
- S VisitBreakStatement(BreakStatement breakStatement);
- S VisitCheckedStatement(CheckedStatement checkedStatement);
- S VisitContinueStatement(ContinueStatement continueStatement);
- S VisitDoWhileStatement(DoWhileStatement doWhileStatement);
- S VisitEmptyStatement(EmptyStatement emptyStatement);
- S VisitExpressionStatement(ExpressionStatement expressionStatement);
- S VisitFixedStatement(FixedStatement fixedStatement);
- S VisitForeachStatement(ForeachStatement foreachStatement);
- S VisitForStatement(ForStatement forStatement);
- S VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement);
- S VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement);
- S VisitGotoStatement(GotoStatement gotoStatement);
- S VisitIfElseStatement(IfElseStatement ifElseStatement);
- S VisitLabelStatement(LabelStatement labelStatement);
- S VisitLockStatement(LockStatement lockStatement);
- S VisitReturnStatement(ReturnStatement returnStatement);
- S VisitSwitchStatement(SwitchStatement switchStatement);
- S VisitSwitchSection(SwitchSection switchSection);
- S VisitCaseLabel(CaseLabel caseLabel);
- S VisitSwitchExpression(SwitchExpression switchExpression);
- S VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection);
- S VisitThrowStatement(ThrowStatement throwStatement);
- S VisitTryCatchStatement(TryCatchStatement tryCatchStatement);
- S VisitCatchClause(CatchClause catchClause);
- S VisitUncheckedStatement(UncheckedStatement uncheckedStatement);
- S VisitUnsafeStatement(UnsafeStatement unsafeStatement);
- S VisitUsingStatement(UsingStatement usingStatement);
- S VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement);
- S VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement);
- S VisitWhileStatement(WhileStatement whileStatement);
- S VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement);
- S VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement);
-
- S VisitAccessor(Accessor accessor);
- S VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration);
- S VisitConstructorInitializer(ConstructorInitializer constructorInitializer);
- S VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration);
- S VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration);
- S VisitEventDeclaration(EventDeclaration eventDeclaration);
- S VisitCustomEventDeclaration(CustomEventDeclaration customEventDeclaration);
- S VisitFieldDeclaration(FieldDeclaration fieldDeclaration);
- S VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration);
- S VisitMethodDeclaration(MethodDeclaration methodDeclaration);
- S VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration);
- S VisitParameterDeclaration(ParameterDeclaration parameterDeclaration);
- S VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration);
- S VisitVariableInitializer(VariableInitializer variableInitializer);
- S VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration);
- S VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer);
-
- S VisitSyntaxTree(SyntaxTree syntaxTree);
- S VisitSimpleType(SimpleType simpleType);
- S VisitMemberType(MemberType memberType);
- S VisitTupleType(TupleAstType tupleType);
- S VisitTupleTypeElement(TupleTypeElement tupleTypeElement);
- S VisitFunctionPointerType(FunctionPointerAstType functionPointerType);
- S VisitInvocationType(InvocationAstType invocationType);
- S VisitComposedType(ComposedType composedType);
- S VisitArraySpecifier(ArraySpecifier arraySpecifier);
- S VisitPrimitiveType(PrimitiveType primitiveType);
-
- S VisitComment(Comment comment);
- S VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective);
- S VisitDocumentationReference(DocumentationReference documentationReference);
-
- S VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration);
- S VisitConstraint(Constraint constraint);
- S VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode);
- S VisitIdentifier(Identifier identifier);
-
- S VisitInterpolation(Interpolation interpolation);
- S VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText);
-
- S VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation);
- S VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation);
-
- S VisitNullNode(AstNode nullNode);
- S VisitErrorNode(AstNode errorNode);
- S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern);
+ S? VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression);
+ S? VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
+ S? VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression);
+ S? VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression);
+ S? VisitAsExpression(AsExpression asExpression);
+ S? VisitAssignmentExpression(AssignmentExpression assignmentExpression);
+ S? VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression);
+ S? VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression);
+ S? VisitCastExpression(CastExpression castExpression);
+ S? VisitCheckedExpression(CheckedExpression checkedExpression);
+ S? VisitConditionalExpression(ConditionalExpression conditionalExpression);
+ S? VisitDeclarationExpression(DeclarationExpression declarationExpression);
+ S? VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression);
+ S? VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression);
+ S? VisitDirectionExpression(DirectionExpression directionExpression);
+ S? VisitIdentifierExpression(IdentifierExpression identifierExpression);
+ S? VisitIndexerExpression(IndexerExpression indexerExpression);
+ S? VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression);
+ S? VisitInvocationExpression(InvocationExpression invocationExpression);
+ S? VisitIsExpression(IsExpression isExpression);
+ S? VisitLambdaExpression(LambdaExpression lambdaExpression);
+ S? VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression);
+ S? VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression);
+ S? VisitNamedExpression(NamedExpression namedExpression);
+ S? VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression);
+ S? VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression);
+ S? VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression);
+ S? VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression);
+ S? VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression);
+ S? VisitPrimitiveExpression(PrimitiveExpression primitiveExpression);
+ S? VisitSizeOfExpression(SizeOfExpression sizeOfExpression);
+ S? VisitStackAllocExpression(StackAllocExpression stackAllocExpression);
+ S? VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression);
+ S? VisitThrowExpression(ThrowExpression throwExpression);
+ S? VisitTupleExpression(TupleExpression tupleExpression);
+ S? VisitTypeOfExpression(TypeOfExpression typeOfExpression);
+ S? VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression);
+ S? VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression);
+ S? VisitUncheckedExpression(UncheckedExpression uncheckedExpression);
+ S? VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
+ S? VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression);
+
+ S? VisitQueryExpression(QueryExpression queryExpression);
+ S? VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause);
+ S? VisitQueryFromClause(QueryFromClause queryFromClause);
+ S? VisitQueryLetClause(QueryLetClause queryLetClause);
+ S? VisitQueryWhereClause(QueryWhereClause queryWhereClause);
+ S? VisitQueryJoinClause(QueryJoinClause queryJoinClause);
+ S? VisitQueryOrderClause(QueryOrderClause queryOrderClause);
+ S? VisitQueryOrdering(QueryOrdering queryOrdering);
+ S? VisitQuerySelectClause(QuerySelectClause querySelectClause);
+ S? VisitQueryGroupClause(QueryGroupClause queryGroupClause);
+
+ S? VisitAttribute(Attribute attribute);
+ S? VisitAttributeSection(AttributeSection attributeSection);
+ S? VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration);
+ S? VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration);
+ S? VisitTypeDeclaration(TypeDeclaration typeDeclaration);
+ S? VisitUsingAliasDeclaration(UsingAliasDeclaration usingAliasDeclaration);
+ S? VisitUsingDeclaration(UsingDeclaration usingDeclaration);
+ S? VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration);
+
+ S? VisitBlockStatement(BlockStatement blockStatement);
+ S? VisitBreakStatement(BreakStatement breakStatement);
+ S? VisitCheckedStatement(CheckedStatement checkedStatement);
+ S? VisitContinueStatement(ContinueStatement continueStatement);
+ S? VisitDoWhileStatement(DoWhileStatement doWhileStatement);
+ S? VisitEmptyStatement(EmptyStatement emptyStatement);
+ S? VisitExpressionStatement(ExpressionStatement expressionStatement);
+ S? VisitFixedStatement(FixedStatement fixedStatement);
+ S? VisitForeachStatement(ForeachStatement foreachStatement);
+ S? VisitForStatement(ForStatement forStatement);
+ S? VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement);
+ S? VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement);
+ S? VisitGotoStatement(GotoStatement gotoStatement);
+ S? VisitIfElseStatement(IfElseStatement ifElseStatement);
+ S? VisitLabelStatement(LabelStatement labelStatement);
+ S? VisitLockStatement(LockStatement lockStatement);
+ S? VisitReturnStatement(ReturnStatement returnStatement);
+ S? VisitSwitchStatement(SwitchStatement switchStatement);
+ S? VisitSwitchSection(SwitchSection switchSection);
+ S? VisitCaseLabel(CaseLabel caseLabel);
+ S? VisitSwitchExpression(SwitchExpression switchExpression);
+ S? VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection);
+ S? VisitThrowStatement(ThrowStatement throwStatement);
+ S? VisitTryCatchStatement(TryCatchStatement tryCatchStatement);
+ S? VisitCatchClause(CatchClause catchClause);
+ S? VisitUncheckedStatement(UncheckedStatement uncheckedStatement);
+ S? VisitUnsafeStatement(UnsafeStatement unsafeStatement);
+ S? VisitUsingStatement(UsingStatement usingStatement);
+ S? VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement);
+ S? VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement);
+ S? VisitWhileStatement(WhileStatement whileStatement);
+ S? VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement);
+ S? VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement);
+
+ S? VisitAccessor(Accessor accessor);
+ S? VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration);
+ S? VisitConstructorInitializer(ConstructorInitializer constructorInitializer);
+ S? VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration);
+ S? VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration);
+ S? VisitEventDeclaration(EventDeclaration eventDeclaration);
+ S? VisitCustomEventDeclaration(CustomEventDeclaration customEventDeclaration);
+ S? VisitFieldDeclaration(FieldDeclaration fieldDeclaration);
+ S? VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration);
+ S? VisitMethodDeclaration(MethodDeclaration methodDeclaration);
+ S? VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration);
+ S? VisitParameterDeclaration(ParameterDeclaration parameterDeclaration);
+ S? VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration);
+ S? VisitVariableInitializer(VariableInitializer variableInitializer);
+ S? VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration);
+ S? VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer);
+
+ S? VisitSyntaxTree(SyntaxTree syntaxTree);
+ S? VisitSimpleType(SimpleType simpleType);
+ S? VisitMemberType(MemberType memberType);
+ S? VisitTupleType(TupleAstType tupleType);
+ S? VisitTupleTypeElement(TupleTypeElement tupleTypeElement);
+ S? VisitFunctionPointerType(FunctionPointerAstType functionPointerType);
+ S? VisitInvocationType(InvocationAstType invocationType);
+ S? VisitComposedType(ComposedType composedType);
+ S? VisitArraySpecifier(ArraySpecifier arraySpecifier);
+ S? VisitPrimitiveType(PrimitiveType primitiveType);
+
+ S? VisitComment(Comment comment);
+ S? VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective);
+ S? VisitDocumentationReference(DocumentationReference documentationReference);
+
+ S? VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration);
+ S? VisitConstraint(Constraint constraint);
+ S? VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode);
+ S? VisitIdentifier(Identifier identifier);
+
+ S? VisitInterpolation(Interpolation interpolation);
+ S? VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText);
+
+ S? VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation);
+ S? VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation);
+
+ S? VisitNullNode(AstNode nullNode);
+ S? VisitErrorNode(AstNode errorNode);
+ S? VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern);
}
///
@@ -322,147 +322,147 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
public interface IAstVisitor
{
- S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data);
- S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data);
- S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data);
- S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data);
- S VisitAsExpression(AsExpression asExpression, T data);
- S VisitAssignmentExpression(AssignmentExpression assignmentExpression, T data);
- S VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, T data);
- S VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, T data);
- S VisitCastExpression(CastExpression castExpression, T data);
- S VisitCheckedExpression(CheckedExpression checkedExpression, T data);
- S VisitConditionalExpression(ConditionalExpression conditionalExpression, T data);
- S VisitDeclarationExpression(DeclarationExpression declarationExpression, T data);
- S VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression, T data);
- S VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, T data);
- S VisitDirectionExpression(DirectionExpression directionExpression, T data);
- S VisitIdentifierExpression(IdentifierExpression identifierExpression, T data);
- S VisitIndexerExpression(IndexerExpression indexerExpression, T data);
- S VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression, T data);
- S VisitInvocationExpression(InvocationExpression invocationExpression, T data);
- S VisitIsExpression(IsExpression isExpression, T data);
- S VisitLambdaExpression(LambdaExpression lambdaExpression, T data);
- S VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data);
- S VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data);
- S VisitNamedExpression(NamedExpression namedExpression, T data);
- S VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, T data);
- S VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, T data);
- S VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression, T data);
- S VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, T data);
- S VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, T data);
- S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data);
- S VisitSizeOfExpression(SizeOfExpression sizeOfExpression, T data);
- S VisitStackAllocExpression(StackAllocExpression stackAllocExpression, T data);
- S VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, T data);
- S VisitThrowExpression(ThrowExpression throwExpression, T data);
- S VisitTupleExpression(TupleExpression tupleExpression, T data);
- S VisitTypeOfExpression(TypeOfExpression typeOfExpression, T data);
- S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data);
- S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data);
- S VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data);
- S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data);
- S VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression, T data);
-
- S VisitQueryExpression(QueryExpression queryExpression, T data);
- S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data);
- S VisitQueryFromClause(QueryFromClause queryFromClause, T data);
- S VisitQueryLetClause(QueryLetClause queryLetClause, T data);
- S VisitQueryWhereClause(QueryWhereClause queryWhereClause, T data);
- S VisitQueryJoinClause(QueryJoinClause queryJoinClause, T data);
- S VisitQueryOrderClause(QueryOrderClause queryOrderClause, T data);
- S VisitQueryOrdering(QueryOrdering queryOrdering, T data);
- S VisitQuerySelectClause(QuerySelectClause querySelectClause, T data);
- S VisitQueryGroupClause(QueryGroupClause queryGroupClause, T data);
-
- S VisitAttribute(Attribute attribute, T data);
- S VisitAttributeSection(AttributeSection attributeSection, T data);
- S VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, T data);
- S VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, T data);
- S VisitTypeDeclaration(TypeDeclaration typeDeclaration, T data);
- S VisitUsingAliasDeclaration(UsingAliasDeclaration usingAliasDeclaration, T data);
- S VisitUsingDeclaration(UsingDeclaration usingDeclaration, T data);
- S VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration, T data);
-
- S VisitBlockStatement(BlockStatement blockStatement, T data);
- S VisitBreakStatement(BreakStatement breakStatement, T data);
- S VisitCheckedStatement(CheckedStatement checkedStatement, T data);
- S VisitContinueStatement(ContinueStatement continueStatement, T data);
- S VisitDoWhileStatement(DoWhileStatement doWhileStatement, T data);
- S VisitEmptyStatement(EmptyStatement emptyStatement, T data);
- S VisitExpressionStatement(ExpressionStatement expressionStatement, T data);
- S VisitFixedStatement(FixedStatement fixedStatement, T data);
- S VisitForeachStatement(ForeachStatement foreachStatement, T data);
- S VisitForStatement(ForStatement forStatement, T data);
- S VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, T data);
- S VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, T data);
- S VisitGotoStatement(GotoStatement gotoStatement, T data);
- S VisitIfElseStatement(IfElseStatement ifElseStatement, T data);
- S VisitLabelStatement(LabelStatement labelStatement, T data);
- S VisitLockStatement(LockStatement lockStatement, T data);
- S VisitReturnStatement(ReturnStatement returnStatement, T data);
- S VisitSwitchStatement(SwitchStatement switchStatement, T data);
- S VisitSwitchSection(SwitchSection switchSection, T data);
- S VisitCaseLabel(CaseLabel caseLabel, T data);
- S VisitSwitchExpression(SwitchExpression switchExpression, T data);
- S VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection, T data);
- S VisitThrowStatement(ThrowStatement throwStatement, T data);
- S VisitTryCatchStatement(TryCatchStatement tryCatchStatement, T data);
- S VisitCatchClause(CatchClause catchClause, T data);
- S VisitUncheckedStatement(UncheckedStatement uncheckedStatement, T data);
- S VisitUnsafeStatement(UnsafeStatement unsafeStatement, T data);
- S VisitUsingStatement(UsingStatement usingStatement, T data);
- S VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement, T data);
- S VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement, T data);
- S VisitWhileStatement(WhileStatement whileStatement, T data);
- S VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement, T data);
- S VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement, T data);
-
- S VisitAccessor(Accessor accessor, T data);
- S VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, T data);
- S VisitConstructorInitializer(ConstructorInitializer constructorInitializer, T data);
- S VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, T data);
- S VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, T data);
- S VisitEventDeclaration(EventDeclaration eventDeclaration, T data);
- S VisitCustomEventDeclaration(CustomEventDeclaration customEventDeclaration, T data);
- S VisitFieldDeclaration(FieldDeclaration fieldDeclaration, T data);
- S VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, T data);
- S VisitMethodDeclaration(MethodDeclaration methodDeclaration, T data);
- S VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data);
- S VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, T data);
- S VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, T data);
- S VisitVariableInitializer(VariableInitializer variableInitializer, T data);
- S VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration, T data);
- S VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer, T data);
-
- S VisitSyntaxTree(SyntaxTree syntaxTree, T data);
- S VisitSimpleType(SimpleType simpleType, T data);
- S VisitMemberType(MemberType memberType, T data);
- S VisitTupleType(TupleAstType tupleType, T data);
- S VisitTupleTypeElement(TupleTypeElement tupleTypeElement, T data);
- S VisitFunctionPointerType(FunctionPointerAstType functionPointerType, T data);
- S VisitInvocationType(InvocationAstType invocationType, T data);
- S VisitComposedType(ComposedType composedType, T data);
- S VisitArraySpecifier(ArraySpecifier arraySpecifier, T data);
- S VisitPrimitiveType(PrimitiveType primitiveType, T data);
-
- S VisitComment(Comment comment, T data);
- S VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective, T data);
- S VisitDocumentationReference(DocumentationReference documentationReference, T data);
-
- S VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration, T data);
- S VisitConstraint(Constraint constraint, T data);
- S VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode, T data);
- S VisitIdentifier(Identifier identifier, T data);
-
- S VisitInterpolation(Interpolation interpolation, T data);
- S VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText, T data);
-
- S VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation, T data);
- S VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation, T data);
-
- S VisitNullNode(AstNode nullNode, T data);
- S VisitErrorNode(AstNode errorNode, T data);
- S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data);
+ S? VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data);
+ S? VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data);
+ S? VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data);
+ S? VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data);
+ S? VisitAsExpression(AsExpression asExpression, T data);
+ S? VisitAssignmentExpression(AssignmentExpression assignmentExpression, T data);
+ S? VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, T data);
+ S? VisitBinaryOperatorExpression(BinaryOperatorExpression binaryOperatorExpression, T data);
+ S? VisitCastExpression(CastExpression castExpression, T data);
+ S? VisitCheckedExpression(CheckedExpression checkedExpression, T data);
+ S? VisitConditionalExpression(ConditionalExpression conditionalExpression, T data);
+ S? VisitDeclarationExpression(DeclarationExpression declarationExpression, T data);
+ S? VisitRecursivePatternExpression(RecursivePatternExpression recursivePatternExpression, T data);
+ S? VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, T data);
+ S? VisitDirectionExpression(DirectionExpression directionExpression, T data);
+ S? VisitIdentifierExpression(IdentifierExpression identifierExpression, T data);
+ S? VisitIndexerExpression(IndexerExpression indexerExpression, T data);
+ S? VisitInterpolatedStringExpression(InterpolatedStringExpression interpolatedStringExpression, T data);
+ S? VisitInvocationExpression(InvocationExpression invocationExpression, T data);
+ S? VisitIsExpression(IsExpression isExpression, T data);
+ S? VisitLambdaExpression(LambdaExpression lambdaExpression, T data);
+ S? VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, T data);
+ S? VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data);
+ S? VisitNamedExpression(NamedExpression namedExpression, T data);
+ S? VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, T data);
+ S? VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, T data);
+ S? VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression, T data);
+ S? VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, T data);
+ S? VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, T data);
+ S? VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data);
+ S? VisitSizeOfExpression(SizeOfExpression sizeOfExpression, T data);
+ S? VisitStackAllocExpression(StackAllocExpression stackAllocExpression, T data);
+ S? VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, T data);
+ S? VisitThrowExpression(ThrowExpression throwExpression, T data);
+ S? VisitTupleExpression(TupleExpression tupleExpression, T data);
+ S? VisitTypeOfExpression(TypeOfExpression typeOfExpression, T data);
+ S? VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data);
+ S? VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data);
+ S? VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data);
+ S? VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data);
+ S? VisitWithInitializerExpression(WithInitializerExpression withInitializerExpression, T data);
+
+ S? VisitQueryExpression(QueryExpression queryExpression, T data);
+ S? VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data);
+ S? VisitQueryFromClause(QueryFromClause queryFromClause, T data);
+ S? VisitQueryLetClause(QueryLetClause queryLetClause, T data);
+ S? VisitQueryWhereClause(QueryWhereClause queryWhereClause, T data);
+ S? VisitQueryJoinClause(QueryJoinClause queryJoinClause, T data);
+ S? VisitQueryOrderClause(QueryOrderClause queryOrderClause, T data);
+ S? VisitQueryOrdering(QueryOrdering queryOrdering, T data);
+ S? VisitQuerySelectClause(QuerySelectClause querySelectClause, T data);
+ S? VisitQueryGroupClause(QueryGroupClause queryGroupClause, T data);
+
+ S? VisitAttribute(Attribute attribute, T data);
+ S? VisitAttributeSection(AttributeSection attributeSection, T data);
+ S? VisitDelegateDeclaration(DelegateDeclaration delegateDeclaration, T data);
+ S? VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, T data);
+ S? VisitTypeDeclaration(TypeDeclaration typeDeclaration, T data);
+ S? VisitUsingAliasDeclaration(UsingAliasDeclaration usingAliasDeclaration, T data);
+ S? VisitUsingDeclaration(UsingDeclaration usingDeclaration, T data);
+ S? VisitExternAliasDeclaration(ExternAliasDeclaration externAliasDeclaration, T data);
+
+ S? VisitBlockStatement(BlockStatement blockStatement, T data);
+ S? VisitBreakStatement(BreakStatement breakStatement, T data);
+ S? VisitCheckedStatement(CheckedStatement checkedStatement, T data);
+ S? VisitContinueStatement(ContinueStatement continueStatement, T data);
+ S? VisitDoWhileStatement(DoWhileStatement doWhileStatement, T data);
+ S? VisitEmptyStatement(EmptyStatement emptyStatement, T data);
+ S? VisitExpressionStatement(ExpressionStatement expressionStatement, T data);
+ S? VisitFixedStatement(FixedStatement fixedStatement, T data);
+ S? VisitForeachStatement(ForeachStatement foreachStatement, T data);
+ S? VisitForStatement(ForStatement forStatement, T data);
+ S? VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, T data);
+ S? VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, T data);
+ S? VisitGotoStatement(GotoStatement gotoStatement, T data);
+ S? VisitIfElseStatement(IfElseStatement ifElseStatement, T data);
+ S? VisitLabelStatement(LabelStatement labelStatement, T data);
+ S? VisitLockStatement(LockStatement lockStatement, T data);
+ S? VisitReturnStatement(ReturnStatement returnStatement, T data);
+ S? VisitSwitchStatement(SwitchStatement switchStatement, T data);
+ S? VisitSwitchSection(SwitchSection switchSection, T data);
+ S? VisitCaseLabel(CaseLabel caseLabel, T data);
+ S? VisitSwitchExpression(SwitchExpression switchExpression, T data);
+ S? VisitSwitchExpressionSection(SwitchExpressionSection switchExpressionSection, T data);
+ S? VisitThrowStatement(ThrowStatement throwStatement, T data);
+ S? VisitTryCatchStatement(TryCatchStatement tryCatchStatement, T data);
+ S? VisitCatchClause(CatchClause catchClause, T data);
+ S? VisitUncheckedStatement(UncheckedStatement uncheckedStatement, T data);
+ S? VisitUnsafeStatement(UnsafeStatement unsafeStatement, T data);
+ S? VisitUsingStatement(UsingStatement usingStatement, T data);
+ S? VisitVariableDeclarationStatement(VariableDeclarationStatement variableDeclarationStatement, T data);
+ S? VisitLocalFunctionDeclarationStatement(LocalFunctionDeclarationStatement localFunctionDeclarationStatement, T data);
+ S? VisitWhileStatement(WhileStatement whileStatement, T data);
+ S? VisitYieldBreakStatement(YieldBreakStatement yieldBreakStatement, T data);
+ S? VisitYieldReturnStatement(YieldReturnStatement yieldReturnStatement, T data);
+
+ S? VisitAccessor(Accessor accessor, T data);
+ S? VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration, T data);
+ S? VisitConstructorInitializer(ConstructorInitializer constructorInitializer, T data);
+ S? VisitDestructorDeclaration(DestructorDeclaration destructorDeclaration, T data);
+ S? VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration, T data);
+ S? VisitEventDeclaration(EventDeclaration eventDeclaration, T data);
+ S? VisitCustomEventDeclaration(CustomEventDeclaration customEventDeclaration, T data);
+ S? VisitFieldDeclaration(FieldDeclaration fieldDeclaration, T data);
+ S? VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration, T data);
+ S? VisitMethodDeclaration(MethodDeclaration methodDeclaration, T data);
+ S? VisitOperatorDeclaration(OperatorDeclaration operatorDeclaration, T data);
+ S? VisitParameterDeclaration(ParameterDeclaration parameterDeclaration, T data);
+ S? VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration, T data);
+ S? VisitVariableInitializer(VariableInitializer variableInitializer, T data);
+ S? VisitFixedFieldDeclaration(FixedFieldDeclaration fixedFieldDeclaration, T data);
+ S? VisitFixedVariableInitializer(FixedVariableInitializer fixedVariableInitializer, T data);
+
+ S? VisitSyntaxTree(SyntaxTree syntaxTree, T data);
+ S? VisitSimpleType(SimpleType simpleType, T data);
+ S? VisitMemberType(MemberType memberType, T data);
+ S? VisitTupleType(TupleAstType tupleType, T data);
+ S? VisitTupleTypeElement(TupleTypeElement tupleTypeElement, T data);
+ S? VisitFunctionPointerType(FunctionPointerAstType functionPointerType, T data);
+ S? VisitInvocationType(InvocationAstType invocationType, T data);
+ S? VisitComposedType(ComposedType composedType, T data);
+ S? VisitArraySpecifier(ArraySpecifier arraySpecifier, T data);
+ S? VisitPrimitiveType(PrimitiveType primitiveType, T data);
+
+ S? VisitComment(Comment comment, T data);
+ S? VisitPreProcessorDirective(PreProcessorDirective preProcessorDirective, T data);
+ S? VisitDocumentationReference(DocumentationReference documentationReference, T data);
+
+ S? VisitTypeParameterDeclaration(TypeParameterDeclaration typeParameterDeclaration, T data);
+ S? VisitConstraint(Constraint constraint, T data);
+ S? VisitCSharpTokenNode(CSharpTokenNode cSharpTokenNode, T data);
+ S? VisitIdentifier(Identifier identifier, T data);
+
+ S? VisitInterpolation(Interpolation interpolation, T data);
+ S? VisitInterpolatedStringText(InterpolatedStringText interpolatedStringText, T data);
+
+ S? VisitSingleVariableDesignation(SingleVariableDesignation singleVariableDesignation, T data);
+ S? VisitParenthesizedVariableDesignation(ParenthesizedVariableDesignation parenthesizedVariableDesignation, T data);
+
+ S? VisitNullNode(AstNode nullNode, T data);
+ S? VisitErrorNode(AstNode errorNode, T data);
+ S? VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data);
}
}
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/INode.cs b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/INode.cs
index 327204e3e..d3a68e43d 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/INode.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/INode.cs
@@ -25,7 +25,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax.PatternMatching
///
public interface INode
{
- Role Role { get; }
+ Role? Role { get; }
INode? FirstChild { get; }
INode? NextSibling { get; }
bool IsNull { get; }
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Pattern.cs b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Pattern.cs
index 7e02f5063..b196d9483 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Pattern.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Pattern.cs
@@ -52,15 +52,15 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax.PatternMatching
get { return false; }
}
- Role INode.Role {
+ Role? INode.Role {
get { return null; }
}
- INode INode.NextSibling {
+ INode? INode.NextSibling {
get { return null; }
}
- INode INode.FirstChild {
+ INode? INode.FirstChild {
get { return null; }
}
@@ -80,8 +80,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax.PatternMatching
stack.Push(new PossibleMatch(firstOtherChild, match.CheckPoint()));
while (stack.Count > 0)
{
- INode cur1 = patternStack.Pop();
- INode cur2 = stack.Peek().NextOther;
+ INode? cur1 = patternStack.Pop();
+ INode? cur2 = stack.Peek().NextOther;
match.RestoreCheckPoint(stack.Pop().Checkpoint);
bool success = true;
while (cur1 != null && success)
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Repeat.cs b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Repeat.cs
index a99c60be0..2faf4150b 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Repeat.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/PatternMatching/Repeat.cs
@@ -44,7 +44,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax.PatternMatching
this.MaxCount = int.MaxValue;
}
- public override bool DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo)
+ public override bool DoMatchCollection(Role role, INode? pos, Match match, BacktrackingInfo backtrackingInfo)
{
var backtrackingStack = backtrackingInfo.backtrackingStack;
Debug.Assert(pos == null || pos.Role == role);
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs b/ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs
index 959431ad5..75ecaad58 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs
@@ -63,7 +63,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
#endregion
#region PatternPlaceholder
- public static implicit operator Statement(PatternMatching.Pattern pattern)
+ public static implicit operator Statement?(PatternMatching.Pattern? pattern)
{
return pattern != null ? new PatternPlaceholder(pattern) : null;
}
@@ -86,12 +86,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
visitor.VisitPatternPlaceholder(this, child);
}
- public override T AcceptVisitor(IAstVisitor visitor)
+ public override T? AcceptVisitor(IAstVisitor visitor)
{
return visitor.VisitPatternPlaceholder(this, child);
}
- public override S AcceptVisitor(IAstVisitor visitor, T data)
+ public override S? AcceptVisitor(IAstVisitor visitor, T data)
{
return visitor.VisitPatternPlaceholder(this, child, data);
}
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/SyntaxExtensions.cs b/ICSharpCode.Decompiler/CSharp/Syntax/SyntaxExtensions.cs
index 8d6cc4bc6..41a506d31 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/SyntaxExtensions.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/SyntaxExtensions.cs
@@ -54,7 +54,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public static Statement GetNextStatement(this Statement statement)
{
- AstNode next = statement.NextSibling;
+ AstNode? next = statement.NextSibling;
while (next != null && !(next is Statement))
next = next.NextSibling;
return (Statement)next;
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs
index 8b37f582c..890666c8e 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs
@@ -76,7 +76,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
///
public CSharpTokenNode Keyword {
get {
- for (AstNode child = this.FirstChild; child != null; child = child.NextSibling)
+ for (AstNode? child = this.FirstChild; child != null; child = child.NextSibling)
{
if (child.Role == PropertyDeclaration.GetKeywordRole || child.Role == PropertyDeclaration.SetKeywordRole
|| child.Role == PropertyDeclaration.InitKeywordRole
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EntityDeclaration.cs b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EntityDeclaration.cs
index 28cfb0798..5507fbc75 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EntityDeclaration.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EntityDeclaration.cs
@@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
internal static void SetModifiers(AstNode node, Modifiers newValue)
{
Modifiers oldValue = GetModifiers(node);
- AstNode insertionPos = node.GetChildrenByRole(AttributeRole).LastOrDefault();
+ AstNode? insertionPos = node.GetChildrenByRole(AttributeRole).LastOrDefault();
foreach (Modifiers m in CSharpModifierToken.AllModifiers)
{
if ((m & newValue) != 0)
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs
index bb86a18fd..dd6666a03 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs
@@ -70,7 +70,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public bool IsExtensionMethod {
get {
- ParameterDeclaration pd = (ParameterDeclaration)GetChildByRole(Roles.Parameter);
+ ParameterDeclaration? pd = GetChildByRole(Roles.Parameter) as ParameterDeclaration;
return pd != null && pd.HasThisModifier;
}
}
diff --git a/ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs b/ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs
index 4c88b0eb4..cc70cac43 100644
--- a/ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs
+++ b/ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs
@@ -462,13 +462,13 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
AstType ConvertTypeHelper(IType genericType, IReadOnlyList typeArguments)
{
- ITypeDefinition typeDef = genericType.GetDefinition();
+ ITypeDefinition? typeDef = genericType.GetDefinition();
Debug.Assert(typeDef != null || genericType.Kind == TypeKind.Unknown);
Debug.Assert(typeArguments.Count >= genericType.TypeParameterCount);
if (UseKeywordsForBuiltinTypes && typeDef != null)
{
- string keyword = KnownTypeReference.GetCSharpNameByTypeCode(typeDef.KnownTypeCode);
+ string? keyword = KnownTypeReference.GetCSharpNameByTypeCode(typeDef.KnownTypeCode);
if (keyword != null)
{
return new PrimitiveType(keyword);
@@ -1053,7 +1053,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
}
if (underlyingType.IsKnownType(KnownTypeCode.Double) || underlyingType.IsKnownType(KnownTypeCode.Single))
return ConvertFloatingPointLiteral(underlyingType, constantValue);
- IType literalType = underlyingType;
+ IType? literalType = underlyingType;
bool integerTypeMismatch = underlyingType.IsCSharpSmallIntegerType() || underlyingType.IsCSharpNativeIntegerType();
if (integerTypeMismatch)
{
@@ -1213,7 +1213,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
Expression ConvertEnumValue(IType type, long val)
{
- ITypeDefinition enumDefinition = type.GetDefinition();
+ ITypeDefinition? enumDefinition = type.GetDefinition();
TypeCode enumBaseTypeCode = ReflectionHelper.GetTypeCode(enumDefinition.EnumUnderlyingType);
var fields = enumDefinition.Fields
.Select(PrepareConstant)
@@ -1295,7 +1295,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
if (!field.IsConst)
return (-1, null);
- object constantValue = field.GetConstantValue();
+ object? constantValue = field.GetConstantValue();
if (constantValue == null)
return (-1, null);
return ((long)CSharpPrimitiveCast.Cast(TypeCode.Int64, constantValue, checkForOverflow: false), field);
@@ -1890,7 +1890,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
DelegateDeclaration ConvertDelegate(IMethod invokeMethod, Modifiers modifiers)
{
- ITypeDefinition d = invokeMethod.DeclaringTypeDefinition;
+ ITypeDefinition? d = invokeMethod.DeclaringTypeDefinition;
DelegateDeclaration decl = new DelegateDeclaration();
decl.Modifiers = modifiers & ~Modifiers.Sealed;
@@ -2019,7 +2019,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
decl.Modifiers = ModifierFromAccessibility(accessor.Accessibility);
if (this.ShowModifiers && accessor.HasReadonlyModifier())
decl.Modifiers |= Modifiers.Readonly;
- TokenRole keywordRole = kind switch {
+ TokenRole? keywordRole = kind switch {
MethodSemanticsAttributes.Getter => PropertyDeclaration.GetKeywordRole,
MethodSemanticsAttributes.Setter => PropertyDeclaration.SetKeywordRole,
MethodSemanticsAttributes.Adder => CustomEventDeclaration.AddKeywordRole,
@@ -2460,7 +2460,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
static bool IsObjectOrValueType(IType type)
{
- ITypeDefinition d = type.GetDefinition();
+ ITypeDefinition? d = type.GetDefinition();
return d != null && (d.KnownTypeCode == KnownTypeCode.Object || d.KnownTypeCode == KnownTypeCode.ValueType);
}
#endregion
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs b/ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs
index 8cf628075..eb181384f 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/AddCheckedBlocks.cs
@@ -244,7 +244,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
BlockStatement? block = node as BlockStatement;
if (block == null)
{
- for (AstNode child = node.FirstChild; child != null; child = child.NextSibling)
+ for (AstNode? child = node.FirstChild; child != null; child = child.NextSibling)
{
Run(child, context);
}
@@ -275,7 +275,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
InsertedNode? nodesUncheckedContextCheckedBlockOpen = null;
Statement? checkedBlockStart = null;
- Statement statement = block.Statements.FirstOrDefault();
+ Statement? statement = block.Statements.FirstOrDefault();
while (true)
{
// Blocks can be closed 'for free'. We use '<=' so that blocks are closed as late as possible (goal 4b)
@@ -340,7 +340,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (node is BlockStatement)
return GetResultFromBlock((BlockStatement)node);
Result result = new Result();
- for (AstNode child = node.FirstChild; child != null; child = child.NextSibling)
+ for (AstNode? child = node.FirstChild; child != null; child = child.NextSibling)
{
Result childResult = GetResult(child);
result.CostInCheckedContext += childResult.CostInCheckedContext;
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs b/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs
index b3f02dee0..4a76fbb98 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/AddXmlDocumentationTransform.cs
@@ -63,7 +63,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
static void InsertXmlDocumentation(AstNode node, StringReader r)
{
// Find the first non-empty line:
- string firstLine;
+ string? firstLine;
do
{
firstLine = r.ReadLine();
@@ -71,7 +71,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return;
} while (string.IsNullOrWhiteSpace(firstLine));
string indentation = firstLine.Substring(0, firstLine.Length - firstLine.TrimStart().Length);
- string line = firstLine;
+ string? line = firstLine;
int skippedWhitespaceLines = 0;
// Copy all lines from input to output, except for empty lines at the end.
while (line != null)
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/CombineQueryExpressions.cs b/ICSharpCode.Decompiler/CSharp/Transforms/CombineQueryExpressions.cs
index 1d9002811..842f16103 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/CombineQueryExpressions.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/CombineQueryExpressions.cs
@@ -47,8 +47,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
void CombineQueries(AstNode node, Dictionary fromOrLetIdentifiers)
{
- AstNode next;
- for (AstNode child = node.FirstChild; child != null; child = next)
+ AstNode? next;
+ for (AstNode? child = node.FirstChild; child != null; child = next)
{
// store reference to next child before transformation
next = child.NextSibling;
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs b/ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
index 7756a26cd..d73ed5ef0 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
@@ -297,7 +297,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
}
try
{
- for (AstNode child = node.FirstChild; child != null; child = child.NextSibling)
+ for (AstNode? child = node.FirstChild; child != null; child = child.NextSibling)
{
FindInsertionPoints(child, nodeLevel + 1);
}
@@ -321,7 +321,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{
InsertionPoint newPoint;
int startIndex = scopeTracking.Count - 1;
- BlockContainer captureScope = variable.CaptureScope;
+ BlockContainer? captureScope = variable.CaptureScope;
while (captureScope != null && !IsRelevantScope(captureScope))
{
captureScope = BlockContainer.FindClosestContainer(captureScope.Parent);
@@ -356,7 +356,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
}
}
}
- if (variableDict.TryGetValue(variable, out VariableToDeclare v))
+ if (variableDict.TryGetValue(variable, out VariableToDeclare? v))
{
v.InsertionPoint = FindCommonParent(v.InsertionPoint, newPoint);
}
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs b/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs
index 4048df940..b5edb964d 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs
@@ -67,8 +67,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{
if (node is IdentifierExpression || node is MemberReferenceExpression)
{
- ISymbol symbol = node.GetSymbol();
- if (symbol != null && renamedSymbols.TryGetValue(symbol, out string newName))
+ ISymbol? symbol = node.GetSymbol();
+ if (symbol != null && renamedSymbols.TryGetValue(symbol, out string? newName))
{
node.GetChildByRole(Roles.Identifier).Name = newName;
}
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs b/ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs
index dc1bc4794..457b5331a 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs
@@ -88,8 +88,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
node.ReplaceWith(query);
}
- AstNode next;
- for (AstNode child = (query ?? node).FirstChild; child != null; child = next)
+ AstNode? next;
+ for (AstNode? child = (query ?? node).FirstChild; child != null; child = next)
{
// store reference to next child before transformation
next = child.NextSibling;
@@ -103,7 +103,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return context.Settings.Discards;
}
- QueryExpression DecompileQuery(InvocationExpression invocation)
+ QueryExpression? DecompileQuery(InvocationExpression? invocation)
{
if (invocation == null)
return null;
@@ -119,7 +119,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsComplexQuery(mre))
return null;
Expression expr = invocation.Arguments.Single();
- if (MatchSimpleLambda(expr, out ParameterDeclaration parameter, out Expression body))
+ if (MatchSimpleLambda(expr, out ParameterDeclaration? parameter, out Expression? body))
{
QueryExpression query = new QueryExpression();
query.Clauses.Add(MakeFromClause(parameter, mre.Target.Detach()));
@@ -134,8 +134,8 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{
Expression keyLambda = invocation.Arguments.ElementAt(0);
Expression projectionLambda = invocation.Arguments.ElementAt(1);
- if (MatchSimpleLambda(keyLambda, out ParameterDeclaration parameter1, out Expression keySelector)
- && MatchSimpleLambda(projectionLambda, out ParameterDeclaration parameter2, out Expression elementSelector)
+ if (MatchSimpleLambda(keyLambda, out ParameterDeclaration? parameter1, out Expression? keySelector)
+ && MatchSimpleLambda(projectionLambda, out ParameterDeclaration? parameter2, out Expression? elementSelector)
&& parameter1.Name == parameter2.Name)
{
QueryExpression query = new QueryExpression();
@@ -152,7 +152,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
else if (invocation.Arguments.Count == 1)
{
Expression lambda = invocation.Arguments.Single();
- if (MatchSimpleLambda(lambda, out ParameterDeclaration parameter, out Expression keySelector))
+ if (MatchSimpleLambda(lambda, out ParameterDeclaration? parameter, out Expression? keySelector))
{
QueryExpression query = new QueryExpression();
query.Clauses.Add(MakeFromClause(parameter, mre.Target.Detach()));
@@ -167,7 +167,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (invocation.Arguments.Count != 2)
return null;
var fromExpressionLambda = invocation.Arguments.ElementAt(0);
- if (!MatchSimpleLambda(fromExpressionLambda, out ParameterDeclaration parameter, out Expression collectionSelector))
+ if (!MatchSimpleLambda(fromExpressionLambda, out ParameterDeclaration? parameter, out Expression? collectionSelector))
return null;
if (IsNullConditional(collectionSelector))
return null;
@@ -194,7 +194,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsComplexQuery(mre))
return null;
Expression expr = invocation.Arguments.Single();
- if (MatchSimpleLambda(expr, out ParameterDeclaration parameter, out Expression body))
+ if (MatchSimpleLambda(expr, out ParameterDeclaration? parameter, out Expression? body))
{
QueryExpression query = new QueryExpression();
query.Clauses.Add(MakeFromClause(parameter, mre.Target.Detach()));
@@ -213,7 +213,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsComplexQuery(mre))
return null;
var lambda = invocation.Arguments.Single();
- if (MatchSimpleLambda(lambda, out ParameterDeclaration parameter, out Expression orderExpression))
+ if (MatchSimpleLambda(lambda, out ParameterDeclaration? parameter, out Expression? orderExpression))
{
if (ValidateThenByChain(invocation, parameter.Name))
{
@@ -257,10 +257,10 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (IsNullConditional(source2))
return null;
Expression outerLambda = invocation.Arguments.ElementAt(1);
- if (!MatchSimpleLambda(outerLambda, out ParameterDeclaration element1, out Expression key1))
+ if (!MatchSimpleLambda(outerLambda, out ParameterDeclaration? element1, out Expression? key1))
return null;
Expression innerLambda = invocation.Arguments.ElementAt(2);
- if (!MatchSimpleLambda(innerLambda, out ParameterDeclaration element2, out Expression key2))
+ if (!MatchSimpleLambda(innerLambda, out ParameterDeclaration? element2, out Expression? key2))
return null;
LambdaExpression? lambda = invocation.Arguments.ElementAt(3) as LambdaExpression;
if (lambda != null && lambda.Parameters.Count == 2 && lambda.Body is Expression)
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs b/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs
index d4456e952..114e60daf 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/PatternStatementTransform.cs
@@ -62,7 +62,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
// Go through the children, and keep visiting a node as long as it changes.
// Because some transforms delete/replace nodes before and after the node being transformed, we rely
// on the transform's return value to know where we need to keep iterating.
- for (AstNode child = node.FirstChild; child != null; child = child.NextSibling)
+ for (AstNode? child = node.FirstChild; child != null; child = child.NextSibling)
{
AstNode oldChild;
do
@@ -88,7 +88,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
public override AstNode VisitForStatement(ForStatement forStatement)
{
- AstNode result = TransformForeachOnArray(forStatement);
+ AstNode? result = TransformForeachOnArray(forStatement);
if (result != null)
return result;
return base.VisitForStatement(forStatement);
@@ -174,7 +174,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
}
};
- public ForStatement TransformFor(ExpressionStatement node)
+ public ForStatement? TransformFor(ExpressionStatement node)
{
if (!context.Settings.ForStatement)
return null;
@@ -339,7 +339,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return false;
}
- Statement TransformForeachOnArray(ForStatement forStatement)
+ Statement? TransformForeachOnArray(ForStatement forStatement)
{
if (!context.Settings.ForEachStatement)
return null;
diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs b/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs
index 219f671ca..5ac5dba86 100644
--- a/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs
+++ b/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs
@@ -206,7 +206,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
Match m = fieldInitializerPattern.Match(instanceCtorsNotChainingWithThis[0].Body.FirstOrDefault());
if (!m.Success)
break;
- IMember fieldOrPropertyOrEvent = (m.Get("fieldAccess").Single().GetSymbol() as IMember)?.MemberDefinition;
+ IMember? fieldOrPropertyOrEvent = (m.Get("fieldAccess").Single().GetSymbol() as IMember)?.MemberDefinition;
if (!(fieldOrPropertyOrEvent is IField) && !(fieldOrPropertyOrEvent is IProperty) && !(fieldOrPropertyOrEvent is IEvent))
break;
var fieldOrPropertyOrEventDecl = members.FirstOrDefault(f => f.GetSymbol() == fieldOrPropertyOrEvent) as EntityDeclaration;
@@ -346,7 +346,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
AssignmentExpression? assignment = es.Expression as AssignmentExpression;
if (assignment == null || assignment.Operator != AssignmentOperatorType.Assign)
break;
- IMember fieldOrProperty = (assignment.Left.GetSymbol() as IMember)?.MemberDefinition;
+ IMember? fieldOrProperty = (assignment.Left.GetSymbol() as IMember)?.MemberDefinition;
if (!(fieldOrProperty is IField || fieldOrProperty is IProperty) || !fieldOrProperty.IsStatic)
break;
// Only move fields that are constants, if the declaring type is not marked beforefieldinit.
diff --git a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs
index 680dbd88c..8ad8b704c 100644
--- a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs
+++ b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs
@@ -156,7 +156,7 @@ namespace ICSharpCode.Decompiler.CSharp
{
if (descendant == Expression)
return this;
- for (AstNode parent = descendant.Parent; parent != null; parent = parent.Parent)
+ for (AstNode? parent = descendant.Parent; parent != null; parent = parent.Parent)
{
foreach (var inst in parent.Annotations.OfType())
descendant.AddAnnotation(inst);
diff --git a/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs b/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs
index c6e10cfbd..87441be6e 100644
--- a/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs
+++ b/ICSharpCode.Decompiler/CSharp/TypeSystem/ResolvedUsingScope.cs
@@ -70,7 +70,7 @@ namespace ICSharpCode.Decompiler.CSharp.TypeSystem
public INamespace Namespace {
get {
- INamespace result = LazyInit.VolatileRead(ref this.@namespace);
+ INamespace? result = LazyInit.VolatileRead(ref this.@namespace);
if (result != null)
{
return result;
diff --git a/ICSharpCode.Decompiler/DecompilerException.cs b/ICSharpCode.Decompiler/DecompilerException.cs
index d536148b4..412a1d395 100644
--- a/ICSharpCode.Decompiler/DecompilerException.cs
+++ b/ICSharpCode.Decompiler/DecompilerException.cs
@@ -98,7 +98,7 @@ namespace ICSharpCode.Decompiler
static string GetTypeName(Exception exception)
{
- string type = exception.GetType().FullName;
+ string? type = exception.GetType().FullName;
if (exception is ExternalException || exception is IOException)
return type + " (" + Marshal.GetHRForException(exception).ToString("x8") + ")";
else
@@ -114,8 +114,8 @@ namespace ICSharpCode.Decompiler
StringBuilder b = new StringBuilder();
for (int i = 0; i < stackTrace.FrameCount; i++)
{
- StackFrame frame = stackTrace.GetFrame(i);
- MethodBase method = frame.GetMethod();
+ StackFrame? frame = stackTrace.GetFrame(i);
+ MethodBase? method = frame.GetMethod();
if (method == null)
continue;
@@ -123,7 +123,7 @@ namespace ICSharpCode.Decompiler
b.AppendLine();
b.Append(" at ");
- Type declaringType = method.DeclaringType;
+ Type? declaringType = method.DeclaringType;
if (declaringType != null)
{
b.Append(declaringType.FullName.Replace('+', '.'));
@@ -173,7 +173,7 @@ namespace ICSharpCode.Decompiler
string? filename = null;
try
{
- string fullpath = frame.GetFileName();
+ string? fullpath = frame.GetFileName();
if (fullpath != null)
filename = Path.GetFileName(fullpath);
}
diff --git a/ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs b/ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
index 9815de4d6..9e130ead2 100644
--- a/ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
+++ b/ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
@@ -1040,10 +1040,10 @@ namespace ICSharpCode.Decompiler.Disassembler
output.Write("lpstruct");
break;
case 0x2c: // CustomMarshaler
- string guidValue = blob.ReadSerializedString();
- string unmanagedType = blob.ReadSerializedString();
- string managedType = blob.ReadSerializedString();
- string cookie = blob.ReadSerializedString();
+ string? guidValue = blob.ReadSerializedString();
+ string? unmanagedType = blob.ReadSerializedString();
+ string? managedType = blob.ReadSerializedString();
+ string? cookie = blob.ReadSerializedString();
var guid = !string.IsNullOrEmpty(guidValue) ? new Guid(guidValue) : Guid.Empty;
diff --git a/ICSharpCode.Decompiler/Documentation/GetPotentiallyNestedClassTypeReference.cs b/ICSharpCode.Decompiler/Documentation/GetPotentiallyNestedClassTypeReference.cs
index 754fe1f9a..8422b93a1 100644
--- a/ICSharpCode.Decompiler/Documentation/GetPotentiallyNestedClassTypeReference.cs
+++ b/ICSharpCode.Decompiler/Documentation/GetPotentiallyNestedClassTypeReference.cs
@@ -57,7 +57,7 @@ namespace ICSharpCode.Decompiler.Documentation
{
if (asm == null)
continue;
- ITypeDefinition typeDef = asm.GetTypeDefinition(new TopLevelTypeName(ns, name, topLevelTPC));
+ ITypeDefinition? typeDef = asm.GetTypeDefinition(new TopLevelTypeName(ns, name, topLevelTPC));
for (int j = i + 1; j < parts.Length && typeDef != null; j++)
{
int tpc = (j == parts.Length - 1 ? typeParameterCount : 0);
diff --git a/ICSharpCode.Decompiler/Documentation/IdStringProvider.cs b/ICSharpCode.Decompiler/Documentation/IdStringProvider.cs
index 64c3ec881..59000a1f9 100644
--- a/ICSharpCode.Decompiler/Documentation/IdStringProvider.cs
+++ b/ICSharpCode.Decompiler/Documentation/IdStringProvider.cs
@@ -155,7 +155,7 @@ namespace ICSharpCode.Decompiler.Documentation
b.Append('@');
break;
default:
- IType declType = type.DeclaringType;
+ IType? declType = type.DeclaringType;
if (declType != null)
{
AppendTypeName(b, declType, explicitInterfaceImpl);
diff --git a/ICSharpCode.Decompiler/Documentation/XmlDocLoader.cs b/ICSharpCode.Decompiler/Documentation/XmlDocLoader.cs
index 3d4c9ce6c..de2b116f0 100644
--- a/ICSharpCode.Decompiler/Documentation/XmlDocLoader.cs
+++ b/ICSharpCode.Decompiler/Documentation/XmlDocLoader.cs
@@ -54,7 +54,7 @@ namespace ICSharpCode.Decompiler.Documentation
throw new ArgumentNullException(nameof(module));
lock (cache)
{
- if (!cache.TryGetValue(module, out XmlDocumentationProvider xmlDoc))
+ if (!cache.TryGetValue(module, out XmlDocumentationProvider? xmlDoc))
{
string xmlDocFile = LookupLocalizedXmlDoc(module.FileName);
if (xmlDocFile == null)
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs b/ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs
index 5e71463ee..68459498d 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs
@@ -1084,8 +1084,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
bool IsBuilderFieldOnThis(ILInstruction inst)
{
- IField field;
- ILInstruction target;
+ IField? field;
+ ILInstruction? target;
if (builderType.IsReferenceType == true)
{
// ldfld(StateMachine::<>t__builder, ldloc(this))
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs b/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs
index 147ce4142..031f0ff73 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInCatchTransform.cs
@@ -102,7 +102,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
break;
case SwitchSection jumpTableEntry:
Debug.Assert(switchInstructionOpt == null || jumpTableEntry.Parent == switchInstructionOpt);
- switchInstructionOpt = (SwitchInstruction)jumpTableEntry.Parent;
+ switchInstructionOpt = jumpTableEntry.Parent as SwitchInstruction;
break;
}
@@ -142,7 +142,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
if (result.NextBlockOrExitContainer is Block nextBlock && nextBlock.IncomingEdgeCount == 0)
{
List dependentBlocks = new List();
- Block current = nextBlock;
+ Block? current = nextBlock;
do
{
@@ -201,8 +201,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
{
ILVariable? v = null;
if (MatchExceptionCaptureBlock(context, block,
- ref v, out StLoc typedExceptionVariableStore,
- out Block captureBlock, out Block throwBlock))
+ ref v, out StLoc? typedExceptionVariableStore,
+ out Block? captureBlock, out Block? throwBlock))
{
context.Step($"ExceptionDispatchInfo.Capture({v.Name}).Throw() => throw;", typedExceptionVariableStore);
block.Instructions.RemoveRange(typedExceptionVariableStore.ChildIndex + 1, 2);
@@ -355,7 +355,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
return false;
}
- bool ParseIfJumpTable(int id, Block jumpTableEntryBlock, ILVariable identifierVariable, out Block? realEntryPoint, out ILInstruction? nextBlockOrExitContainer, out ILInstruction? jumpTableEntry)
+ bool ParseIfJumpTable(int id, Block jumpTableEntryBlock, ILVariable identifierVariable, [NotNullWhen(true)] out Block? realEntryPoint, out ILInstruction? nextBlockOrExitContainer, [NotNullWhen(true)] out ILInstruction? jumpTableEntry)
{
realEntryPoint = null;
nextBlockOrExitContainer = null;
@@ -420,7 +420,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
// =>
// throw(ldloc result.Handler.Variable)
internal static bool MatchExceptionCaptureBlock(ILTransformContext context, Block block,
- ref ILVariable objectVariable, out StLoc? typedExceptionVariableStore, out Block? captureBlock, out Block? throwBlock)
+ ref ILVariable? objectVariable, out StLoc? typedExceptionVariableStore, out Block? captureBlock, out Block? throwBlock)
{
bool DerivesFromException(IType t) => t.GetAllBaseTypes().Any(ty => ty.IsKnownType(KnownTypeCode.Exception));
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs b/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs
index 7cccce8bd..e70846af5 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/AwaitInFinallyTransform.cs
@@ -81,7 +81,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
// stloc V_6(ldloc V_3) - store exception in 'global' object variable
// br IL_0075 - jump out of catch block to the head of the finallyBlock
var catchBlockEntry = catchBlockContainer.EntryPoint;
- ILVariable objectVariable;
+ ILVariable? objectVariable;
switch (catchBlockEntry.Instructions.Count)
{
case 2:
@@ -127,7 +127,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
StateRangeAnalysis sra = new StateRangeAnalysis(StateRangeAnalysisMode.AwaitInFinally, null, stateVariable);
sra.AssignStateRanges(noThrowBlock, Util.LongSet.Universe);
- var mapping = sra.GetBlockStateSetMapping((BlockContainer)noThrowBlock.Parent);
+ var mapping = sra.GetBlockStateSetMapping(noThrowBlock.Parent as BlockContainer);
var mappingForLeave = sra.GetBlockStateSetMappingForLeave();
context.StepStartGroup("Inline finally block with await", tryCatch.Handlers[0]);
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs b/ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs
index 6276011fc..265516c01 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/ConditionDetection.cs
@@ -45,9 +45,9 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
Other
}
- private BlockTransformContext context;
- private ControlFlowNode cfgNode;
- private BlockContainer currentContainer;
+ private BlockTransformContext? context;
+ private ControlFlowNode? cfgNode;
+ private BlockContainer? currentContainer;
///
/// Builds structured control flow for the block associated with the control flow node.
@@ -59,7 +59,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
public void Run(Block block, BlockTransformContext context)
{
this.context = context;
- currentContainer = (BlockContainer)block.Parent;
+ currentContainer = block.Parent as BlockContainer;
// We only embed blocks into this block if they aren't referenced anywhere else,
// so those blocks are dominated by this block.
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowSimplification.cs b/ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowSimplification.cs
index 9dd4aa74f..282e198fc 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowSimplification.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/ControlFlowSimplification.cs
@@ -120,11 +120,11 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
// (where 'v' has no other uses)
// Simplify these to a simple `ret()` so that they match the release build version.
//
- if (block.Instructions.Count == 2 && block.Instructions[1].MatchReturn(out ILInstruction value))
+ if (block.Instructions.Count == 2 && block.Instructions[1].MatchReturn(out ILInstruction? value))
{
var ret = (Leave)block.Instructions[1];
- if (value.MatchLdLoc(out ILVariable v)
- && v.IsSingleDefinition && v.LoadCount == 1 && block.Instructions[0].MatchStLoc(v, out ILInstruction inst))
+ if (value.MatchLdLoc(out ILVariable? v)
+ && v.IsSingleDefinition && v.LoadCount == 1 && block.Instructions[0].MatchStLoc(v, out ILInstruction? inst))
{
context.Step("Inline variable in return block", block);
inst.AddILRange(ret.Value);
@@ -228,7 +228,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
if (!value.MatchLdLoc(out var returnVar))
return false;
var container = branch.TargetContainer;
- for (ILInstruction inst = branch; inst != container; inst = inst.Parent)
+ for (ILInstruction? inst = branch; inst != container; inst = inst.Parent)
{
if (inst.Parent is TryFinally tryFinally && inst.SlotInfo == TryFinally.TryBlockSlot)
{
diff --git a/ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs b/ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs
index 3674b323a..53e5f2c1c 100644
--- a/ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs
+++ b/ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs
@@ -106,7 +106,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
for (int j = 0; j < block.Instructions.Count - 1; j++)
{
var inst = block.Instructions[j];
- if (inst.MatchStLoc(out ILVariable v, out var value) && v.Kind == VariableKind.PinnedLocal)
+ if (inst.MatchStLoc(out ILVariable? v, out var value) && v.Kind == VariableKind.PinnedLocal)
{
if (block.Instructions[j + 1].OpCode != OpCode.Branch)
{
diff --git a/ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs b/ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs
index 5f4171de9..22c064254 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/CachedDelegateInitialization.cs
@@ -88,9 +88,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (trueInst == null || trueInst.Instructions.Count != 1 || !inst.FalseInst.MatchNop())
return false;
var storeInst = trueInst.Instructions[0];
- if (!inst.Condition.MatchCompEquals(out ILInstruction left, out ILInstruction right) || !left.MatchLdsFld(out IField field) || !right.MatchLdNull())
+ if (!inst.Condition.MatchCompEquals(out ILInstruction? left, out ILInstruction? right) || !left.MatchLdsFld(out IField? field) || !right.MatchLdNull())
return false;
- if (!storeInst.MatchStsFld(out IField field2, out ILInstruction value) || !field.Equals(field2) || !field.IsCompilerGeneratedOrIsInCompilerGeneratedClass())
+ if (!storeInst.MatchStsFld(out IField? field2, out ILInstruction? value) || !field.Equals(field2) || !field.IsCompilerGeneratedOrIsInCompilerGeneratedClass())
return false;
if (!DelegateConstruction.MatchDelegateConstruction(value.UnwrapConv(ConversionKind.Invalid) as NewObj, out _, out _, out _, true))
return false;
@@ -117,10 +117,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms
Block? trueInst = inst.TrueInst as Block;
if (trueInst == null || (trueInst.Instructions.Count != 1) || !inst.FalseInst.MatchNop())
return false;
- if (!inst.Condition.MatchCompEquals(out ILInstruction left, out ILInstruction right) || !left.MatchLdLoc(out ILVariable v) || !right.MatchLdNull())
+ if (!inst.Condition.MatchCompEquals(out ILInstruction? left, out ILInstruction? right) || !left.MatchLdLoc(out ILVariable? v) || !right.MatchLdNull())
return false;
var storeInst = trueInst.Instructions.Last();
- if (!storeInst.MatchStLoc(v, out ILInstruction value))
+ if (!storeInst.MatchStLoc(v, out ILInstruction? value))
return false;
if (!DelegateConstruction.MatchDelegateConstruction(value as NewObj, out _, out _, out _, true))
return false;
@@ -157,7 +157,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
Block? trueInst = inst.TrueInst as Block;
if (trueInst == null || (trueInst.Instructions.Count != 1) || !inst.FalseInst.MatchNop())
return false;
- if (!inst.Condition.MatchCompEquals(out ILInstruction left, out ILInstruction right) || !left.MatchLdLoc(out ILVariable s) || !right.MatchLdNull())
+ if (!inst.Condition.MatchCompEquals(out ILInstruction? left, out ILInstruction? right) || !left.MatchLdLoc(out ILVariable? s) || !right.MatchLdNull())
return false;
var storeInst = trueInst.Instructions.Last() as StLoc;
var storeBeforeIf = inst.Parent.Children.ElementAtOrDefault(inst.ChildIndex - 1) as StLoc;
@@ -189,7 +189,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
Block? trueInst = inst.TrueInst as Block;
if (trueInst == null || (trueInst.Instructions.Count != 1) || !inst.FalseInst.MatchNop())
return false;
- if (!inst.Condition.MatchCompEquals(out ILInstruction left, out ILInstruction right) || !left.MatchLdLoc(out ILVariable s) || !right.MatchLdNull())
+ if (!inst.Condition.MatchCompEquals(out ILInstruction? left, out ILInstruction? right) || !left.MatchLdLoc(out ILVariable? s) || !right.MatchLdNull())
return false;
var storeInst = trueInst.Instructions.Last() as StLoc;
var storeBeforeIf = inst.Parent.Children.ElementAtOrDefault(inst.ChildIndex - 1) as StLoc;
@@ -240,7 +240,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
return false;
}
- if (!inst.Condition.MatchCompEquals(out ILInstruction left, out ILInstruction right) || !right.MatchLdNull())
+ if (!inst.Condition.MatchCompEquals(out ILInstruction? left, out ILInstruction? right) || !right.MatchLdNull())
return false;
if (!ldobj.Match(left).Success)
return false;
@@ -311,7 +311,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
return false;
}
- if (!inst.Condition.MatchCompNotEqualsNull(out ILInstruction left))
+ if (!inst.Condition.MatchCompNotEqualsNull(out ILInstruction? left))
return false;
if (!ldobj.Match(left).Success)
return false;
diff --git a/ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs b/ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs
index be27d3297..33e90a01e 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/CopyPropagation.cs
@@ -65,7 +65,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
for (int i = 0; i < block.Instructions.Count; i++)
{
- if (block.Instructions[i].MatchStLoc(out ILVariable v, out ILInstruction copiedExpr))
+ if (block.Instructions[i].MatchStLoc(out ILVariable? v, out ILInstruction? copiedExpr))
{
if (v.IsSingleDefinition && v.LoadCount == 0 && v.Kind == VariableKind.StackSlot)
{
diff --git a/ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs b/ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs
index 412c047a6..f7a9226ca 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs
@@ -104,7 +104,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
// This transform is required because ILInlining only works with stloc/ldloc
internal static bool StObjToStLoc(StObj inst, ILTransformContext context)
{
- if (inst.Target.MatchLdLoca(out ILVariable v)
+ if (inst.Target.MatchLdLoca(out ILVariable? v)
&& TypeUtils.IsCompatibleTypeForMemoryAccess(v.Type, inst.Type)
&& inst.UnalignedPrefix == 0
&& !inst.IsVolatile)
@@ -222,6 +222,5 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
return false;
}
-
}
}
diff --git a/ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs b/ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs
index 2b8607cc2..5ee75f167 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs
@@ -38,7 +38,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
if (!context.Settings.Ranges)
return false;
- if (!ldelema.Array.MatchLdLoc(out ILVariable array))
+ if (!ldelema.Array.MatchLdLoc(out ILVariable? array))
return false;
if (ldelema.Indices.Count != 1)
return false; // the index/range feature doesn't support multi-dimensional arrays
@@ -176,7 +176,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
// stloc startOffsetVar(call GetOffset(startIndexLoad, ldloc length))
- if (!(block.Instructions[pos].MatchStLoc(out ILVariable startOffsetVar, out ILInstruction startOffsetVarInit)
+ if (!(block.Instructions[pos].MatchStLoc(out ILVariable? startOffsetVar, out ILInstruction? startOffsetVarInit)
&& startOffsetVar.IsSingleDefinition && startOffsetVar.StackType == StackType.I4))
{
// Not our primary indexing/slicing pattern.
diff --git a/ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs b/ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs
index 1546ec54e..4ac25bfc0 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs
@@ -106,9 +106,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms
context.Step("Remove hashtable initializer", actual);
if (jumpToNext != null)
{
- actual.Instructions.SecondToLastOrDefault().ReplaceWith(jumpToNext);
+ actual.Instructions.SecondToLastOrDefault()?.ReplaceWith(jumpToNext);
}
- actual.Instructions.LastOrDefault().ReplaceWith(new Branch(next));
+ actual.Instructions.LastOrDefault()?.ReplaceWith(new Branch(next));
omittedBlocks.Add(containingBlock, previous);
changedContainers.Add(body);
}
@@ -196,7 +196,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
ExtensionMethods.Swap(ref firstBlockOrDefaultJump, ref nextCaseJump);
}
// match call to operator ==(string, string)
- if (!MatchStringEqualityComparison(condition, out var switchValueVar, out string firstBlockValue, out bool isVBCompareString))
+ if (!MatchStringEqualityComparison(condition, out var switchValueVar, out string? firstBlockValue, out bool isVBCompareString))
return false;
if (isVBCompareString)
{
@@ -217,13 +217,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false;
}
- var values = new List<(string, ILInstruction)>();
- var uniqueValues = new HashSet();
+ var values = new List<(string?, ILInstruction)>();
+ var uniqueValues = new HashSet();
int numberOfUniqueMatchesWithCurrentVariable = 0;
HashSet caseBlocks = new HashSet();
caseBlocks.Add((Block)instructions[i].Parent);
- bool AddSwitchSection(string value, ILInstruction inst)
+ bool AddSwitchSection(string? value, ILInstruction inst)
{
if (!uniqueValues.Add(value))
return false;
@@ -306,14 +306,14 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
}
// if instruction must be followed by a branch to the next case
- if (!nextCaseJump.MatchBranch(out Block currentCaseBlock))
+ if (!nextCaseJump.MatchBranch(out Block? currentCaseBlock))
return false;
// extract all cases and add them to the values list.
ILInstruction nextCaseBlock;
do
{
- nextCaseBlock = MatchCaseBlock(currentCaseBlock, switchValueVar, out string value, out bool emptyStringEqualsNull, out ILInstruction block);
- if (nextCaseBlock == null)
+ (nextCaseBlock, var block) = MatchCaseBlock(currentCaseBlock, switchValueVar, out string? value, out bool emptyStringEqualsNull);
+ if (nextCaseBlock == null || block == null)
break;
if (emptyStringEqualsNull && string.IsNullOrEmpty(value))
{
@@ -474,7 +474,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return true;
}
- bool IsIsInternedCall(Call call, [NotNullWhen(true)] out ILInstruction? argument)
+ bool IsIsInternedCall(Call? call, [NotNullWhen(true)] out ILInstruction? argument)
{
if (call != null
&& call.Method.DeclaringType.IsKnownType(KnownTypeCode.String)
@@ -504,19 +504,20 @@ namespace ICSharpCode.Decompiler.IL.Transforms
/// The is updated if the value gets copied to a different variable.
/// See comments below for more info.
///
- ILInstruction? MatchCaseBlock(Block currentBlock, ILVariable switchVariable, out string? value, out bool emptyStringEqualsNull, out ILInstruction? caseBlockOrLeave)
+
+ (ILInstruction? NextBlock, ILInstruction? CaseBlockOrLeave) MatchCaseBlock(Block currentBlock, ILVariable switchVariable, out string? value, out bool emptyStringEqualsNull)
{
value = null;
- caseBlockOrLeave = null;
+ ILInstruction? caseBlockOrLeave = null;
emptyStringEqualsNull = false;
if (currentBlock.IncomingEdgeCount != 1 || currentBlock.Instructions.Count != 2)
- return null;
+ return (null, null);
if (!currentBlock.MatchIfAtEndOfBlock(out var condition, out var caseBlockBranch, out var nextBlockBranch))
- return null;
+ return (null, null);
if (!MatchStringEqualityComparison(condition, switchVariable, out value, out bool isVBCompareString))
{
- return null;
+ return (null, null);
}
if (isVBCompareString)
{
@@ -533,21 +534,21 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
else
{
- return null;
+ return (null, null);
}
if (nextBlockBranch.MatchBranch(out Block? nextBlock))
{
// success
- return nextBlock;
+ return (nextBlock, caseBlockOrLeave);
}
else if (nextBlockBranch.MatchLeave(out BlockContainer? blockContainer))
{
// success
- return blockContainer;
+ return (blockContainer, caseBlockOrLeave);
}
else
{
- return null;
+ return (null, caseBlockOrLeave);
}
}
@@ -1030,20 +1031,20 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false;
}
- var stringValues = new List<(string Value, ILInstruction TargetBlockOrLeave)>();
+ var stringValues = new List<(string? Value, ILInstruction TargetBlockOrLeave)>();
SwitchSection defaultSection = switchInst.GetDefaultSection();
- if (!(defaultSection.Body.MatchBranch(out Block exitOrDefaultBlock) || defaultSection.Body.MatchLeave(out _)))
+ if (!(defaultSection.Body.MatchBranch(out Block? exitOrDefaultBlock) || defaultSection.Body.MatchLeave(out _)))
return false;
foreach (var section in switchInst.Sections)
{
if (section == defaultSection)
continue;
// extract target block
- if (!section.Body.MatchBranch(out Block target))
+ if (!section.Body.MatchBranch(out Block? target))
return false;
- string stringValue;
+ string? stringValue;
bool emptyStringEqualsNull;
- if (MatchRoslynEmptyStringCaseBlockHead(target, switchValueLoad.Variable, out ILInstruction targetOrLeave, out Block currentExitBlock))
+ if (MatchRoslynEmptyStringCaseBlockHead(target, switchValueLoad.Variable, out ILInstruction? targetOrLeave, out Block? currentExitBlock))
{
stringValue = "";
emptyStringEqualsNull = false;
@@ -1168,7 +1169,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
// implements https://github.com/dotnet/roslyn/pull/66081
// if (comp(ldloc switchValueVar == ldnull)) br nullCase
// br nextBlock
- Block switchOnLengthBlock;
+ Block? switchOnLengthBlock;
int switchOnLengthBlockStartOffset;
Block? nullCase = null;
if (instructions[i].MatchIfInstruction(out var condition, out var exitBlockJump)
@@ -1206,7 +1207,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
Block? defaultCase = null;
if (!MatchSwitchOnLengthBlock(ref switchValueVar, switchOnLengthBlock, switchOnLengthBlockStartOffset, out var blocksByLength))
return false;
- List<(string, ILInstruction)> stringValues = new();
+ List<(string?, ILInstruction)> stringValues = new();
foreach (var b in blocksByLength)
{
if (b.Length.Count() != 1)
@@ -1231,7 +1232,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
}
}
- else if (MatchRoslynCaseBlockHead(b.TargetBlock, switchValueVar, out var bodyOrLeave, out var exit, out string stringValue, out _))
+ else if (MatchRoslynCaseBlockHead(b.TargetBlock, switchValueVar, out var bodyOrLeave, out var exit, out string? stringValue, out _))
{
if (exit != defaultCase)
return false;
@@ -1269,7 +1270,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
context.Step(nameof(MatchRoslynSwitchOnStringUsingLengthAndChar), instructions[i]);
var defaultLabel = new LongSet(new LongInterval(0, stringValues.Count)).Invert();
- var values = new string[stringValues.Count];
+ var values = new string?[stringValues.Count];
var sections = new SwitchSection[stringValues.Count];
foreach (var (idx, (value, bodyInstruction)) in stringValues.WithIndex())
{
@@ -1400,7 +1401,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return results?.Count > 0;
}
- bool MatchSwitchOnLengthBlock(ref ILVariable switchValueVar, Block switchOnLengthBlock, int startOffset, [NotNullWhen(true)] out List<(LongSet Length, Block TargetBlock)>? blocks)
+ bool MatchSwitchOnLengthBlock(ref ILVariable? switchValueVar, Block switchOnLengthBlock, int startOffset, out List<(LongSet Length, Block TargetBlock)>? blocks)
{
blocks = null;
SwitchInstruction? @switch;
@@ -1476,6 +1477,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
default:
return false;
}
+
if (@switch == null)
return true;
blocks = new(@switch.Sections.Count);
@@ -1507,7 +1509,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
/// br newDefaultBlock
/// }
///
- private bool IsNullCheckInDefaultBlock(ref Block exitOrDefaultBlock, ILVariable switchVar, [NotNullWhen(true)] out Block? nullValueCaseBlock)
+ private bool IsNullCheckInDefaultBlock(ref Block? exitOrDefaultBlock, ILVariable switchVar, [NotNullWhen(true)] out Block? nullValueCaseBlock)
{
nullValueCaseBlock = null;
if (exitOrDefaultBlock == null)
@@ -1533,7 +1535,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
/// if (call op_Equality(ldloc switchValueVar, stringValue)) br body
/// br exit
///
- bool MatchRoslynCaseBlockHead(Block target, ILVariable switchValueVar, [NotNullWhen(true)] out ILInstruction? bodyOrLeave, [NotNullWhen(true)] out Block? defaultOrExitBlock, [NotNullWhen(true)] out string? stringValue, out bool emptyStringEqualsNull)
+ bool MatchRoslynCaseBlockHead(Block target, ILVariable switchValueVar, [NotNullWhen(true)] out ILInstruction? bodyOrLeave, out Block? defaultOrExitBlock, out string? stringValue, out bool emptyStringEqualsNull)
{
bodyOrLeave = null;
defaultOrExitBlock = null;
@@ -1593,7 +1595,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
/// br exit
/// }
///
- bool MatchRoslynEmptyStringCaseBlockHead(Block target, ILVariable switchValueVar, [NotNullWhen(true)] out ILInstruction? bodyOrLeave, [NotNullWhen(true)] out Block? defaultOrExitBlock)
+ bool MatchRoslynEmptyStringCaseBlockHead(Block target, ILVariable switchValueVar, [NotNullWhen(true)] out ILInstruction? bodyOrLeave, out Block? defaultOrExitBlock)
{
bodyOrLeave = null;
defaultOrExitBlock = null;
@@ -1628,6 +1630,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false;
if (bodyBranch.MatchLeave(out _))
{
+
bodyOrLeave = bodyBranch;
return true;
}
diff --git a/ICSharpCode.Decompiler/Semantics/ConstantResolveResult.cs b/ICSharpCode.Decompiler/Semantics/ConstantResolveResult.cs
index d475de1ae..5336def6c 100644
--- a/ICSharpCode.Decompiler/Semantics/ConstantResolveResult.cs
+++ b/ICSharpCode.Decompiler/Semantics/ConstantResolveResult.cs
@@ -32,9 +32,9 @@ namespace ICSharpCode.Decompiler.Semantics
///
public class ConstantResolveResult : ResolveResult
{
- object constantValue;
+ object? constantValue;
- public ConstantResolveResult(IType type, object constantValue) : base(type)
+ public ConstantResolveResult(IType type, object? constantValue) : base(type)
{
this.constantValue = constantValue;
}
@@ -43,7 +43,7 @@ namespace ICSharpCode.Decompiler.Semantics
get { return true; }
}
- public override object ConstantValue {
+ public override object? ConstantValue {
get { return constantValue; }
}
diff --git a/ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs b/ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs
index 8a55aa119..b7309ba73 100644
--- a/ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs
+++ b/ICSharpCode.Decompiler/TypeSystem/ReflectionHelper.cs
@@ -227,7 +227,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
///
/// Gets the type code for the specified type, or TypeCode.Empty if none of the other type codes match.
///
- public static TypeCode GetTypeCode(this IType type)
+ public static TypeCode GetTypeCode(this IType? type)
{
ITypeDefinition? def = type as ITypeDefinition;
if (def != null)
diff --git a/ICSharpCode.Decompiler/TypeSystem/TaskType.cs b/ICSharpCode.Decompiler/TypeSystem/TaskType.cs
index 76db1389e..2ab3a2fca 100644
--- a/ICSharpCode.Decompiler/TypeSystem/TaskType.cs
+++ b/ICSharpCode.Decompiler/TypeSystem/TaskType.cs
@@ -74,8 +74,8 @@ namespace ICSharpCode.Decompiler.TypeSystem
var arg = attribute.FixedArguments[0];
if (!arg.Type.IsKnownType(KnownTypeCode.Type))
return false;
- builderType = (IType)arg.Value;
- return true;
+ builderType = arg.Value as IType;
+ return builderType != null;
}
return false;
}
diff --git a/ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs b/ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs
index ecb1e25d1..85d85fdcc 100644
--- a/ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs
+++ b/ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs
@@ -35,7 +35,7 @@ namespace ILSpy.BamlDecompiler
[PartCreationPolicy(CreationPolicy.Shared)]
public sealed class BamlResourceNodeFactory : IResourceNodeFactory
{
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
if (resource.Name.EndsWith(".baml", StringComparison.OrdinalIgnoreCase))
return new BamlResourceEntryNode(resource.Name, resource.TryOpenStream);
diff --git a/ILSpy/Languages/ILAstLanguage.cs b/ILSpy/Languages/ILAstLanguage.cs
index b0f467b4b..c3fa7755b 100644
--- a/ILSpy/Languages/ILAstLanguage.cs
+++ b/ILSpy/Languages/ILAstLanguage.cs
@@ -39,9 +39,9 @@ namespace ICSharpCode.ILSpy
///
abstract class ILAstLanguage : Language
{
- public event EventHandler StepperUpdated;
+ public event EventHandler? StepperUpdated;
- protected virtual void OnStepperUpdated(EventArgs e = null)
+ protected virtual void OnStepperUpdated(EventArgs? e = null)
{
StepperUpdated?.Invoke(this, e ?? new EventArgs());
}
diff --git a/ILSpy/MainWindow.xaml.cs b/ILSpy/MainWindow.xaml.cs
index 235594f7a..21271efeb 100644
--- a/ILSpy/MainWindow.xaml.cs
+++ b/ILSpy/MainWindow.xaml.cs
@@ -44,6 +44,7 @@ using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.Decompiler.TypeSystem.Implementation;
using ICSharpCode.ILSpy.AppEnv;
using ICSharpCode.ILSpy.Commands;
+using ICSharpCode.ILSpy.Controls.TreeView;
using ICSharpCode.ILSpy.Docking;
using ICSharpCode.ILSpy.Options;
using ICSharpCode.ILSpy.Search;
@@ -51,16 +52,15 @@ using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.Themes;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpy.Updates;
+using ICSharpCode.ILSpy.Util;
using ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpyX;
+using ICSharpCode.ILSpyX.Extensions;
using ICSharpCode.ILSpyX.FileLoaders;
using ICSharpCode.ILSpyX.Settings;
-using ICSharpCode.ILSpy.Controls.TreeView;
-using ICSharpCode.ILSpy.Util;
-using ICSharpCode.ILSpyX.Extensions;
+using ICSharpCode.ILSpyX.TreeView;
using Microsoft.Win32;
-using ICSharpCode.ILSpyX.TreeView;
using TomsToolbox.Composition;
@@ -749,10 +749,10 @@ namespace ICSharpCode.ILSpy
}
}
- internal static IEntity FindEntityInRelevantAssemblies(string navigateTo, IEnumerable relevantAssemblies)
+ internal static IEntity? FindEntityInRelevantAssemblies(string navigateTo, IEnumerable relevantAssemblies)
{
- ITypeReference typeRef = null;
- IMemberReference memberRef = null;
+ ITypeReference? typeRef = null;
+ IMemberReference? memberRef = null;
if (navigateTo.StartsWith("T:", StringComparison.Ordinal))
{
typeRef = IdStringProvider.ParseTypeName(navigateTo);
diff --git a/ILSpy/TextView/DocumentationUIBuilder.cs b/ILSpy/TextView/DocumentationUIBuilder.cs
index bc7a9a409..e8527c858 100644
--- a/ILSpy/TextView/DocumentationUIBuilder.cs
+++ b/ILSpy/TextView/DocumentationUIBuilder.cs
@@ -128,7 +128,7 @@ namespace ICSharpCode.ILSpy.TextView
AddBlock(block);
}
- public void AddXmlDocumentation(string xmlDocumentation, IEntity declaringEntity, Func resolver)
+ public void AddXmlDocumentation(string xmlDocumentation, IEntity declaringEntity, Func resolver)
{
if (xmlDocumentation == null)
return;
diff --git a/ILSpy/TreeNodes/ResourceNodes/CursorResourceEntryNode.cs b/ILSpy/TreeNodes/ResourceNodes/CursorResourceEntryNode.cs
index 993c22bdf..640d373e3 100644
--- a/ILSpy/TreeNodes/ResourceNodes/CursorResourceEntryNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/CursorResourceEntryNode.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
static readonly string[] imageFileExtensions = { ".cur" };
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
string key = resource.Name;
foreach (string fileExt in imageFileExtensions)
@@ -70,7 +70,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return false;
//HACK: windows imaging does not understand that .cur files have the same layout as .ico
// so load to data, and modify the ResourceType in the header to make look like an icon...
- MemoryStream s = data as MemoryStream;
+ MemoryStream? s = data as MemoryStream;
if (s == null)
{
// data was stored in another stream type (e.g. PinnedBufferedMemoryStream)
diff --git a/ILSpy/TreeNodes/ResourceNodes/IResourceNodeFactory.cs b/ILSpy/TreeNodes/ResourceNodes/IResourceNodeFactory.cs
index a9dba6c6f..9989fccd1 100644
--- a/ILSpy/TreeNodes/ResourceNodes/IResourceNodeFactory.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/IResourceNodeFactory.cs
@@ -26,6 +26,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
///
public interface IResourceNodeFactory
{
- ITreeNode CreateNode(Resource resource);
+ ITreeNode? CreateNode(Resource resource);
}
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/IconResourceEntryNode.cs b/ILSpy/TreeNodes/ResourceNodes/IconResourceEntryNode.cs
index 075aa1ca0..b3618772d 100644
--- a/ILSpy/TreeNodes/ResourceNodes/IconResourceEntryNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/IconResourceEntryNode.cs
@@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
[PartCreationPolicy(CreationPolicy.Shared)]
sealed class IconResourceNodeFactory : IResourceNodeFactory
{
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
if (resource.Name.EndsWith(".ico", StringComparison.OrdinalIgnoreCase))
{
@@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
sealed class IconResourceEntryNode : ResourceEntryNode
{
- public IconResourceEntryNode(string key, Func data)
+ public IconResourceEntryNode(string key, Func data)
: base(key, data)
{
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/ImageListResourceEntryNode.cs b/ILSpy/TreeNodes/ResourceNodes/ImageListResourceEntryNode.cs
index 7a3d9c795..be339b801 100644
--- a/ILSpy/TreeNodes/ResourceNodes/ImageListResourceEntryNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/ImageListResourceEntryNode.cs
@@ -31,12 +31,12 @@ namespace ICSharpCode.ILSpy.TreeNodes
[PartCreationPolicy(CreationPolicy.Shared)]
sealed class ImageListResourceEntryNodeFactory : IResourceNodeFactory
{
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
return null;
}
- public ILSpyTreeNode CreateNode(string key, object data)
+ public ILSpyTreeNode? CreateNode(string key, object data)
{
if (data is ImageListStreamer)
return new ImageListResourceEntryNode(key, (ImageListStreamer)data);
diff --git a/ILSpy/TreeNodes/ResourceNodes/ImageResourceEntryNode.cs b/ILSpy/TreeNodes/ResourceNodes/ImageResourceEntryNode.cs
index cad4098eb..c98e36d8e 100644
--- a/ILSpy/TreeNodes/ResourceNodes/ImageResourceEntryNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/ImageResourceEntryNode.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
static readonly string[] imageFileExtensions = { ".png", ".gif", ".bmp", ".jpg" };
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
string key = resource.Name;
foreach (string fileExt in imageFileExtensions)
@@ -50,7 +50,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
sealed class ImageResourceEntryNode : ResourceEntryNode
{
- public ImageResourceEntryNode(string key, Func openStream)
+ public ImageResourceEntryNode(string key, Func openStream)
: base(key, openStream)
{
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/ResourceEntryNode.cs b/ILSpy/TreeNodes/ResourceNodes/ResourceEntryNode.cs
index 5786c88c8..6b0e34633 100644
--- a/ILSpy/TreeNodes/ResourceNodes/ResourceEntryNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/ResourceEntryNode.cs
@@ -34,18 +34,18 @@ namespace ICSharpCode.ILSpy.TreeNodes
public class ResourceEntryNode : ILSpyTreeNode
{
private readonly string key;
- private readonly Func openStream;
+ private readonly Func openStream;
public override object Text => Language.EscapeName(key);
public override object Icon => Images.Resource;
- protected Stream OpenStream()
+ protected Stream? OpenStream()
{
return openStream();
}
- public ResourceEntryNode(string key, Func openStream)
+ public ResourceEntryNode(string key, Func openStream)
{
if (key == null)
throw new ArgumentNullException(nameof(key));
@@ -57,7 +57,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public static ILSpyTreeNode Create(Resource resource)
{
- ILSpyTreeNode result = null;
+ ILSpyTreeNode? result = null;
foreach (var factory in App.ExportProvider.GetExportedValues())
{
result = factory.CreateNode(resource) as ILSpyTreeNode;
@@ -78,13 +78,14 @@ namespace ICSharpCode.ILSpy.TreeNodes
language.WriteCommentLine(output, string.Format("{0} = {1}", key, data));
}
- public override bool Save(ViewModels.TabPageModel tabPage)
+ public override bool Save(ViewModels.TabPageModel? tabPage)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.FileName = Path.GetFileName(WholeProjectDecompiler.SanitizeFileName(key));
if (dlg.ShowDialog() == true)
{
using var data = OpenStream();
+
using var fs = dlg.OpenFile();
data.CopyTo(fs);
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/ResourcesFileTreeNode.cs b/ILSpy/TreeNodes/ResourceNodes/ResourcesFileTreeNode.cs
index 324390af2..eb3ab6e17 100644
--- a/ILSpy/TreeNodes/ResourceNodes/ResourcesFileTreeNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/ResourcesFileTreeNode.cs
@@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
[PartCreationPolicy(CreationPolicy.Shared)]
sealed class ResourcesFileTreeNodeFactory : IResourceNodeFactory
{
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
if (resource.Name.EndsWith(".resources", StringComparison.OrdinalIgnoreCase))
{
@@ -50,7 +50,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
return null;
}
- public ILSpyTreeNode CreateNode(string key, object data)
+ public ILSpyTreeNode? CreateNode(string key, object data)
{
return null;
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/XamlResourceNode.cs b/ILSpy/TreeNodes/ResourceNodes/XamlResourceNode.cs
index e017948df..a582b43b5 100644
--- a/ILSpy/TreeNodes/ResourceNodes/XamlResourceNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/XamlResourceNode.cs
@@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.Xaml
[PartCreationPolicy(CreationPolicy.Shared)]
sealed class XamlResourceNodeFactory : IResourceNodeFactory
{
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
if (resource.Name.EndsWith(".xaml", StringComparison.OrdinalIgnoreCase))
return new XamlResourceEntryNode(resource.Name, resource.TryOpenStream);
@@ -45,9 +45,9 @@ namespace ICSharpCode.ILSpy.Xaml
sealed class XamlResourceEntryNode : ResourceEntryNode
{
- string xaml;
+ string? xaml;
- public XamlResourceEntryNode(string key, Func openStream) : base(key, openStream)
+ public XamlResourceEntryNode(string key, Func openStream) : base(key, openStream)
{
}
diff --git a/ILSpy/TreeNodes/ResourceNodes/XmlResourceNode.cs b/ILSpy/TreeNodes/ResourceNodes/XmlResourceNode.cs
index 740947602..32947bc18 100644
--- a/ILSpy/TreeNodes/ResourceNodes/XmlResourceNode.cs
+++ b/ILSpy/TreeNodes/ResourceNodes/XmlResourceNode.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpy.Xaml
{
private readonly static string[] xmlFileExtensions = { ".xml", ".xsd", ".xslt" };
- public ITreeNode CreateNode(Resource resource)
+ public ITreeNode? CreateNode(Resource resource)
{
string key = resource.Name;
foreach (string fileExt in xmlFileExtensions)
@@ -50,9 +50,9 @@ namespace ICSharpCode.ILSpy.Xaml
sealed class XmlResourceEntryNode : ResourceEntryNode
{
- string xml;
+ string? xml;
- public XmlResourceEntryNode(string key, Func data)
+ public XmlResourceEntryNode(string key, Func data)
: base(key, data)
{
}
@@ -74,7 +74,7 @@ namespace ICSharpCode.ILSpy.Xaml
public override bool View(TabPageModel tabPage)
{
AvalonEditTextOutput output = new AvalonEditTextOutput();
- IHighlightingDefinition highlighting = null;
+ IHighlightingDefinition? highlighting = null;
tabPage.ShowTextView(textView => textView.RunWithCancellation(
token => Task.Factory.StartNew(
diff --git a/ILSpy/Views/DebugSteps.xaml.cs b/ILSpy/Views/DebugSteps.xaml.cs
index b619cc6b7..e69199aff 100644
--- a/ILSpy/Views/DebugSteps.xaml.cs
+++ b/ILSpy/Views/DebugSteps.xaml.cs
@@ -48,7 +48,7 @@ namespace ICSharpCode.ILSpy
#endif
}
- private void WritingOptions_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+ private void WritingOptions_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
{
DecompileAsync(lastSelectedStep);
}
@@ -80,7 +80,7 @@ namespace ICSharpCode.ILSpy
#endif
}
- private void ILAstStepperUpdated(object sender, EventArgs e)
+ private void ILAstStepperUpdated(object? sender, EventArgs? e)
{
#if DEBUG
if (language == null)