Browse Source

more nullable error cleanups

pull/3287/head
apmoskevitz 11 months ago
parent
commit
73a79213b0
  1. 1
      .editorconfig
  2. 12
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs
  3. 2
      ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs
  4. 4
      ICSharpCode.Decompiler/CSharp/Resolver/MethodGroupResolveResult.cs
  5. 2
      ICSharpCode.Decompiler/CSharp/Syntax/Expressions/InterpolatedStringExpression.cs
  6. 4
      ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs
  7. 2
      ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs
  8. 2
      ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EnumMemberDeclaration.cs
  9. 2
      ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
  10. 2
      ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs
  11. 6
      ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs
  12. 2
      ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs
  13. 18
      ICSharpCode.Decompiler/DecompilerException.cs
  14. 2
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
  15. 44
      ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs
  16. 14
      ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs
  17. 2
      ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs
  18. 6
      ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs
  19. 4
      ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs
  20. 2
      ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs
  21. 4
      ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs
  22. 2
      ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataEvent.cs
  23. 2
      ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataProperty.cs
  24. 2
      ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs
  25. 2
      ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs
  26. 2
      ICSharpCode.ILSpyX/Abstractions/ILanguage.cs
  27. 2
      ILSpy.ReadyToRun/ReadyToRunLanguage.cs
  28. 4
      ILSpy/Analyzers/AnalyzerEntityTreeNode.cs
  29. 2
      ILSpy/Analyzers/TreeNodes/AnalyzedEventTreeNode.cs
  30. 2
      ILSpy/Analyzers/TreeNodes/AnalyzedFieldTreeNode.cs
  31. 2
      ILSpy/Analyzers/TreeNodes/AnalyzedMethodTreeNode.cs
  32. 2
      ILSpy/Analyzers/TreeNodes/AnalyzedPropertyTreeNode.cs
  33. 2
      ILSpy/Analyzers/TreeNodes/AnalyzedTypeTreeNode.cs
  34. 11
      ILSpy/App.xaml.cs
  35. 4
      ILSpy/AvalonEdit/TextMarkerService.cs
  36. 2
      ILSpy/Commands/CommandWrapper.cs
  37. 4
      ILSpy/Commands/DelegateCommand.cs
  38. 2
      ILSpy/Commands/IProtocolHandler.cs
  39. 6
      ILSpy/Commands/SimpleCommand.cs
  40. 2
      ILSpy/Controls/SearchBox.cs
  41. 2
      ILSpy/Controls/TreeView/SharpTreeNodeView.cs
  42. 2
      ILSpy/Controls/TreeView/SharpTreeView.cs
  43. 14
      ILSpy/Controls/TreeView/SharpTreeViewItemAutomationPeer.cs
  44. 4
      ILSpy/Docking/DockWorkspace.cs
  45. 2
      ILSpy/Docking/PaneCollection.cs
  46. 4
      ILSpy/LanguageSettings.cs
  47. 2
      ILSpy/Languages/Language.cs
  48. 10
      ILSpy/MainWindow.xaml.cs
  49. 4
      ILSpy/Metadata/Helpers.cs
  50. 4
      ILSpy/Metadata/MetaDataGrid.cs
  51. 2
      ILSpy/Options/DecompilerSettingsViewModel.cs
  52. 4
      ILSpy/Options/DisplaySettings.cs
  53. 4
      ILSpy/Options/MiscSettingsViewModel.cs
  54. 2
      ILSpy/Search/SearchPane.xaml.cs
  55. 4
      ILSpy/SessionSettings.cs
  56. 2
      ILSpy/TextView/BracketHighlightRenderer.cs
  57. 6
      ILSpy/Themes/WindowStyleManagerBehavior.cs
  58. 4
      ILSpy/TreeNodes/AssemblyListTreeNode.cs
  59. 4
      ILSpy/TreeNodes/ILSpyTreeNode.cs
  60. 2
      ILSpy/Updates/NotifyOfUpdatesStrategy.cs
  61. 4
      ILSpy/Updates/UpdateSettings.cs
  62. 4
      ILSpy/ViewModels/PaneModel.cs
  63. 4
      ILSpy/ViewModels/ViewModelBase.cs

1
.editorconfig

@ -153,6 +153,7 @@ dotnet_diagnostic.IDE2003.severity = silent @@ -153,6 +153,7 @@ dotnet_diagnostic.IDE2003.severity = silent
#cleared null error types
dotnet_diagnostic.CS8612.severity = error
dotnet_diagnostic.CS8622.severity = error
dotnet_diagnostic.CS8714.severity = error
dotnet_diagnostic.CS8762.severity = error
dotnet_diagnostic.CS8765.severity = error

12
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -777,7 +777,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -777,7 +777,7 @@ namespace ICSharpCode.Decompiler.CSharp
ArgumentWithAlignmentAndFormat,
}
private IEnumerable<(TokenKind, string)> TokenizeFormatString(string value)
private IEnumerable<(TokenKind, string?)> TokenizeFormatString(string value)
{
int pos = -1;
@ -1395,7 +1395,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1395,7 +1395,7 @@ namespace ICSharpCode.Decompiler.CSharp
}
OverloadResolutionErrors IsUnambiguousCall(ExpectedTargetDetails expectedTargetDetails, IMethod method,
ResolveResult target, IType[] typeArguments, ResolveResult[] arguments,
ResolveResult? target, IType[] typeArguments, ResolveResult[] arguments,
string[]? argumentNames, int firstOptionalArgumentIndex,
out IParameterizedMember? foundMember, out bool bestCandidateIsExpandedForm)
{
@ -1676,7 +1676,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1676,7 +1676,7 @@ namespace ICSharpCode.Decompiler.CSharp
return false;
}
ExpressionWithResolveResult HandleConstructorCall(ExpectedTargetDetails expectedTargetDetails, ResolveResult target, IMethod method, ArgumentList argumentList)
ExpressionWithResolveResult HandleConstructorCall(ExpectedTargetDetails expectedTargetDetails, ResolveResult? target, IMethod method, ArgumentList argumentList)
{
if (settings.AnonymousTypes && method.DeclaringType.IsAnonymousType())
{
@ -1823,7 +1823,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1823,7 +1823,7 @@ namespace ICSharpCode.Decompiler.CSharp
return expr.Expression.WithRR(new MemberResolveResult(null, method));
}
ExpressionWithResolveResult BuildDelegateReference(IMethod method, IMethod? invokeMethod, ExpectedTargetDetails expectedTargetDetails, ILInstruction thisArg)
ExpressionWithResolveResult BuildDelegateReference(IMethod method, IMethod? invokeMethod, ExpectedTargetDetails expectedTargetDetails, ILInstruction? thisArg)
{
ExpressionBuilder expressionBuilder = this.expressionBuilder;
ExpressionWithResolveResult targetExpression;
@ -1850,11 +1850,11 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1850,11 +1850,11 @@ namespace ICSharpCode.Decompiler.CSharp
}
(TranslatedExpression target, bool addTypeArguments, string methodName, ResolveResult result) DisambiguateDelegateReference(IMethod method, IMethod invokeMethod, ExpectedTargetDetails expectedTargetDetails, ILInstruction thisArg)
(TranslatedExpression target, bool addTypeArguments, string? methodName, ResolveResult result) DisambiguateDelegateReference(IMethod method, IMethod invokeMethod, ExpectedTargetDetails expectedTargetDetails, ILInstruction? thisArg)
{
if (method.IsLocalFunction)
{
ILFunction localFunction = expressionBuilder.ResolveLocalFunction(method);
ILFunction? localFunction = expressionBuilder.ResolveLocalFunction(method);
Debug.Assert(localFunction != null);
return (default, addTypeArguments: true, localFunction.Name, ToMethodGroup(method, localFunction));
}

2
ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs

@ -267,7 +267,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -267,7 +267,7 @@ namespace ICSharpCode.Decompiler.CSharp
/// <summary>
/// Gets the detected primary constructor. Returns null, if there was no primary constructor detected.
/// </summary>
public IMethod PrimaryConstructor => primaryCtor;
public IMethod? PrimaryConstructor => primaryCtor;
public bool IsInheritedRecord => isInheritedRecord;

4
ICSharpCode.Decompiler/CSharp/Resolver/MethodGroupResolveResult.cs

@ -79,10 +79,10 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver @@ -79,10 +79,10 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
{
readonly IReadOnlyList<MethodListWithDeclaringType> methodLists;
readonly IReadOnlyList<IType> typeArguments;
readonly ResolveResult targetResult;
readonly ResolveResult? targetResult;
readonly string methodName;
public MethodGroupResolveResult(ResolveResult targetResult, string methodName,
public MethodGroupResolveResult(ResolveResult? targetResult, string methodName,
IReadOnlyList<MethodListWithDeclaringType> methods, IReadOnlyList<IType> typeArguments)
: base(SpecialType.NoType)
{

2
ICSharpCode.Decompiler/CSharp/Syntax/Expressions/InterpolatedStringExpression.cs

@ -106,7 +106,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -106,7 +106,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public int Alignment { get; }
public string Suffix { get; }
public string? Suffix { get; }
public CSharpTokenNode RBraceToken {
get { return GetChildByRole(RBrace); }

4
ICSharpCode.Decompiler/CSharp/Syntax/Statements/Statement.cs

@ -86,12 +86,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -86,12 +86,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
visitor.VisitPatternPlaceholder(this, child);
}
public override T? AcceptVisitor<T>(IAstVisitor<T> visitor)
public override T AcceptVisitor<T>(IAstVisitor<T> visitor)
{
return visitor.VisitPatternPlaceholder(this, child);
}
public override S? AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitPatternPlaceholder(this, child, data);
}

2
ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/Accessor.cs

@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -89,7 +89,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
}
}
public BlockStatement Body {
public BlockStatement? Body {
get { return GetChildByRole(Roles.Body); }
set { SetChildByRole(Roles.Body, value); }
}

2
ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/EnumMemberDeclaration.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -40,7 +40,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
get { return GetChildByRole(Roles.Assign); }
}
public Expression Initializer {
public Expression? Initializer {
get { return GetChildByRole(InitializerRole); }
set { SetChildByRole(InitializerRole, value); }
}

2
ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs

@ -766,7 +766,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -766,7 +766,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
{
foreach (var node in rootNode.Descendants)
{
ILVariable ilVar;
ILVariable? ilVar;
switch (node)
{
case IdentifierExpression id:

2
ICSharpCode.Decompiler/CSharp/Transforms/FixNameCollisions.cs

@ -50,7 +50,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -50,7 +50,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (fieldDecl.Variables.Count != 1)
continue;
string oldName = fieldDecl.Variables.Single().Name;
ISymbol symbol = fieldDecl.GetSymbol();
ISymbol? symbol = fieldDecl.GetSymbol();
if (memberNames.Contains(oldName) && ((IField)symbol).Accessibility == Accessibility.Private)
{
string newName = PickNewName(memberNames, oldName);

6
ICSharpCode.Decompiler/CSharp/Transforms/IntroduceQueryExpressions.cs

@ -80,7 +80,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -80,7 +80,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
void DecompileQueries(AstNode node)
{
Expression query = DecompileQuery(node as InvocationExpression);
Expression? query = DecompileQuery(node as InvocationExpression);
if (query != null)
{
if (node.Parent is ExpressionStatement && CanUseDiscardAssignment())
@ -351,13 +351,13 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -351,13 +351,13 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
/// <summary>
/// Ensure that all ThenBy's are correct, and that the list of ThenBy's is terminated by an 'OrderBy' invocation.
/// </summary>
bool ValidateThenByChain(InvocationExpression invocation, string expectedParameterName)
bool ValidateThenByChain(InvocationExpression? invocation, string expectedParameterName)
{
if (invocation == null || invocation.Arguments.Count != 1)
return false;
if (!(invocation.Target is MemberReferenceExpression mre))
return false;
if (!MatchSimpleLambda(invocation.Arguments.Single(), out ParameterDeclaration parameter, out _))
if (!MatchSimpleLambda(invocation.Arguments.Single(), out ParameterDeclaration? parameter, out _))
return false;
if (parameter.Name != expectedParameterName)
return false;

2
ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs

@ -184,7 +184,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -184,7 +184,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (instanceCtorsNotChainingWithThis.Length > 0)
{
var ctorMethodDef = instanceCtorsNotChainingWithThis[0].GetSymbol() as IMethod;
ITypeDefinition declaringTypeDefinition = ctorMethodDef?.DeclaringTypeDefinition;
ITypeDefinition? declaringTypeDefinition = ctorMethodDef?.DeclaringTypeDefinition;
if (ctorMethodDef != null && declaringTypeDefinition?.IsReferenceType == false && !declaringTypeDefinition.IsRecord)
return;

18
ICSharpCode.Decompiler/DecompilerException.cs

@ -36,15 +36,15 @@ namespace ICSharpCode.Decompiler @@ -36,15 +36,15 @@ namespace ICSharpCode.Decompiler
/// </summary>
public class DecompilerException : Exception, ISerializable
{
public string AssemblyName => File.Name;
public string? AssemblyName => File?.Name;
public string FileName => File.FileName;
public string? FileName => File?.FileName;
public IEntity DecompiledEntity { get; }
public IModule Module { get; }
public MetadataFile File { get; }
public IEntity? DecompiledEntity { get; }
public IModule? Module { get; }
public MetadataFile? File { get; }
public DecompilerException(MetadataModule module, IEntity decompiledEntity,
public DecompilerException(MetadataModule module, IEntity? decompiledEntity,
Exception innerException, string? message = null)
: base(message ?? GetDefaultMessage(decompiledEntity), innerException)
{
@ -115,7 +115,7 @@ namespace ICSharpCode.Decompiler @@ -115,7 +115,7 @@ namespace ICSharpCode.Decompiler
for (int i = 0; i < stackTrace.FrameCount; i++)
{
StackFrame? frame = stackTrace.GetFrame(i);
MethodBase? method = frame.GetMethod();
MethodBase? method = frame?.GetMethod();
if (method == null)
continue;
@ -126,7 +126,7 @@ namespace ICSharpCode.Decompiler @@ -126,7 +126,7 @@ namespace ICSharpCode.Decompiler
Type? declaringType = method.DeclaringType;
if (declaringType != null)
{
b.Append(declaringType.FullName.Replace('+', '.'));
b.Append(declaringType.FullName?.Replace('+', '.'));
b.Append('.');
}
b.Append(method.Name);
@ -168,7 +168,7 @@ namespace ICSharpCode.Decompiler @@ -168,7 +168,7 @@ namespace ICSharpCode.Decompiler
b.Append(')');
// source location
if (frame.GetILOffset() >= 0)
if (frame?.GetILOffset() >= 0)
{
string? filename = null;
try

2
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -1188,7 +1188,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -1188,7 +1188,7 @@ namespace ICSharpCode.Decompiler.Disassembler
break;
default:
var blob = metadata.GetBlobReader(constant.Value);
object value;
object? value;
try
{
value = blob.ReadConstant(constant.TypeCode);

44
ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs

@ -74,29 +74,29 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -74,29 +74,29 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
ILTransformContext context;
// These fields are set by MatchTaskCreationPattern() or MatchEnumeratorCreationNewObj()
IType taskType; // return type of the async method; or IAsyncEnumerable{T}/IAsyncEnumerator{T}
IType underlyingReturnType; // return type of the method (only the "T" for Task{T}), for async enumerators this is the type being yielded
IType? taskType; // return type of the async method; or IAsyncEnumerable{T}/IAsyncEnumerator{T}
IType? underlyingReturnType; // return type of the method (only the "T" for Task{T}), for async enumerators this is the type being yielded
AsyncMethodType methodType;
ITypeDefinition stateMachineType;
IType builderType;
IField builderField;
IField stateField;
ITypeDefinition? stateMachineType;
IType? builderType;
IField? builderField;
IField? stateField;
int initialState;
Dictionary<IField, ILVariable> fieldToParameterMap = new Dictionary<IField, ILVariable>();
Dictionary<ILVariable, ILVariable> cachedFieldToParameterMap = new Dictionary<ILVariable, ILVariable>();
IField disposeModeField; // 'disposeMode' field (IAsyncEnumerable/IAsyncEnumerator only)
IField? disposeModeField; // 'disposeMode' field (IAsyncEnumerable/IAsyncEnumerator only)
// These fields are set by AnalyzeMoveNext():
ILFunction moveNextFunction;
ILVariable cachedStateVar; // variable in MoveNext that caches the stateField.
TryCatch mainTryCatch;
Block setResultReturnBlock; // block that is jumped to for return statements
// Note: for async enumerators, a jump to setResultReturnBlock is a 'yield break;'
ILFunction? moveNextFunction;
ILVariable? cachedStateVar; // variable in MoveNext that caches the stateField.
TryCatch? mainTryCatch;
Block? setResultReturnBlock; // block that is jumped to for return statements
// Note: for async enumerators, a jump to setResultReturnBlock is a 'yield break;'
int finalState; // final state after the setResultAndExitBlock
bool finalStateKnown;
ILVariable resultVar; // the variable that gets returned by the setResultAndExitBlock
Block setResultYieldBlock; // block that is jumped to for 'yield return' statements
ILVariable doFinallyBodies;
ILVariable? resultVar; // the variable that gets returned by the setResultAndExitBlock
Block? setResultYieldBlock; // block that is jumped to for 'yield return' statements
ILVariable? doFinallyBodies;
// These fields are set by AnalyzeStateMachine():
int smallestAwaiterVarIndex;
@ -295,15 +295,15 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -295,15 +295,15 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
}
if (startCall.Arguments.Count != 2)
return false;
ILInstruction loadBuilderExpr = startCall.Arguments[0];
if (!startCall.Arguments[1].MatchLdLoca(out ILVariable stateMachineVar))
ILInstruction? loadBuilderExpr = startCall.Arguments[0];
if (!startCall.Arguments[1].MatchLdLoca(out ILVariable? stateMachineVar))
return false;
stateMachineType = stateMachineVar.Type.GetDefinition();
if (stateMachineType == null)
return false;
pos--;
if (loadBuilderExpr.MatchLdLocRef(out ILVariable builderVar))
if (loadBuilderExpr.MatchLdLocRef(out ILVariable? builderVar))
{
// Check third-to-last instruction (copy of builder)
// stloc builder(ldfld StateMachine::<>t__builder(ldloc stateMachine))
@ -340,8 +340,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -340,8 +340,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
return false;
if (!MatchCall(returnValue, "get_Task", out var getTaskArgs) || getTaskArgs.Count != 1)
return false;
ILInstruction target;
IField builderField2;
ILInstruction? target;
IField? builderField2;
if (builderType.IsReferenceType == true)
{
if (!getTaskArgs[0].MatchLdFld(out target, out builderField2))
@ -804,7 +804,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -804,7 +804,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
return block.Instructions[1].MatchLeave(blockContainer);
}
private Block CheckSetResultReturnBlock(BlockContainer blockContainer, int setResultReturnBlockIndex, bool[] blocksAnalyzed)
private Block? CheckSetResultReturnBlock(BlockContainer blockContainer, int setResultReturnBlockIndex, bool[] blocksAnalyzed)
{
if (setResultReturnBlockIndex >= blockContainer.Blocks.Count)
{
@ -1931,7 +1931,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -1931,7 +1931,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
context.StepEndGroup(keepIfEmpty: true);
}
internal static Block GetBodyEntryPoint(BlockContainer body)
internal static Block? GetBodyEntryPoint(BlockContainer? body)
{
if (body == null)
return null;

14
ICSharpCode.Decompiler/IL/ControlFlow/DetectPinnedRegions.cs

@ -163,7 +163,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -163,7 +163,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
for (int i = 0; i < container.Blocks.Count; i++)
{
var block = container.Blocks[i];
if (IsNullSafeArrayToPointerPattern(block, out ILVariable v, out ILVariable p, out Block targetBlock))
if (IsNullSafeArrayToPointerPattern(block, out ILVariable? v, out ILVariable? p, out Block? targetBlock))
{
context.Step("NullSafeArrayToPointerPattern", block);
ILInstruction arrayToPointer = new GetPinnableReference(new LdLoc(v), null);
@ -176,7 +176,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -176,7 +176,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
((Branch)block.Instructions.Last()).TargetBlock = targetBlock;
modified = true;
}
else if (IsCustomRefPinPattern(block, out ILInstruction ldlocMem, out var callGPR, out v, out var stlocPtr,
else if (IsCustomRefPinPattern(block, out ILInstruction? ldlocMem, out var callGPR, out v, out var stlocPtr,
out targetBlock, out var nullBlock, out var notNullBlock))
{
context.Step("CustomRefPinPattern", block);
@ -432,7 +432,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -432,7 +432,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
}
}
condition = condition.UnwrapConv(ConversionKind.Truncate);
if (condition.MatchLdLen(StackType.I, out ILInstruction array))
if (condition.MatchLdLen(StackType.I, out ILInstruction? array))
{
// OK
}
@ -451,7 +451,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -451,7 +451,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
}
if (!array.MatchLdLoc(v))
return false;
if (!trueInst.MatchBranch(out Block notNullAndNotEmptyBlock))
if (!trueInst.MatchBranch(out Block? notNullAndNotEmptyBlock))
return false;
if (notNullAndNotEmptyBlock.Parent != block.Parent)
return false;
@ -468,7 +468,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -468,7 +468,7 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
// }
if (block.Instructions.Count != 2)
return false;
if (!block.Instructions[0].MatchStLoc(out var p2, out ILInstruction value))
if (!block.Instructions[0].MatchStLoc(out var p2, out ILInstruction? value))
return false;
if (p != p2)
{
@ -950,8 +950,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow @@ -950,8 +950,8 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
}
pinnedRegion.Init = new GetPinnableReference(pinnedRegion.Init, null);
ILVariable otherVar;
ILInstruction otherVarInit;
ILVariable? otherVar;
ILInstruction? otherVarInit;
// In optimized builds, the 'nativeVar' may end up being a stack slot,
// and only gets assigned to a real variable after the offset adjustment.
if (nativeVar.Kind == VariableKind.StackSlot && nativeVar.LoadCount == 1

2
ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs

@ -132,7 +132,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -132,7 +132,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
internal static bool LdObjToLdLoc(LdObj 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)

6
ICSharpCode.Decompiler/IL/Transforms/IndexRangeTransform.cs

@ -275,8 +275,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -275,8 +275,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
void TransformSlicing(bool sliceLengthWasMisdetectedAsStartOffset = false)
{
ILVariable sliceLengthVar;
ILInstruction sliceLengthVarInit;
ILVariable? sliceLengthVar;
ILInstruction? sliceLengthVarInit;
if (sliceLengthWasMisdetectedAsStartOffset)
{
// Special case: when slicing without a start point, the slice length calculation is mis-detected as the start offset,
@ -303,7 +303,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -303,7 +303,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (!(sliceLengthVar.IsSingleDefinition && sliceLengthVar.LoadCount == 1))
return;
if (!MatchSliceLength(sliceLengthVarInit, out IndexKind endIndexKind, out ILInstruction endIndexLoad, containerLengthVar, ref containerVar, startOffsetVar))
if (!MatchSliceLength(sliceLengthVarInit, out IndexKind endIndexKind, out ILInstruction? endIndexLoad, containerLengthVar, ref containerVar, startOffsetVar))
return;
if (!CheckContainerLengthVariableUseCount(containerLengthVar, startIndexKind, endIndexKind))
{

4
ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs

@ -262,7 +262,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -262,7 +262,7 @@ namespace ICSharpCode.Decompiler.Metadata
return version.ToString();
}
internal static (Version version, DirectoryInfo directory) ConvertToVersion(DirectoryInfo directory)
internal static (Version? version, DirectoryInfo? directory) ConvertToVersion(DirectoryInfo directory)
{
string RemoveTrailingVersionInfo()
{
@ -289,7 +289,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -289,7 +289,7 @@ namespace ICSharpCode.Decompiler.Metadata
public static string? FindDotNetExeDirectory()
{
string dotnetExeName = (Environment.OSVersion.Platform == PlatformID.Unix) ? "dotnet" : "dotnet.exe";
foreach (var item in Environment.GetEnvironmentVariable("PATH").Split(Path.PathSeparator))
foreach (var item in Environment.GetEnvironmentVariable("PATH")!.Split(Path.PathSeparator))
{
try
{

2
ICSharpCode.Decompiler/TypeSystem/ApplyAttributeTypeVisitor.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -48,7 +48,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
bool[]? dynamicAttributeData = null;
bool hasNativeIntegersAttribute = (options & TypeSystemOptions.NativeIntegersWithoutAttribute) != 0;
bool[]? nativeIntegersAttributeData = null;
string[]? tupleElementNames = null;
string?[]? tupleElementNames = null;
Nullability nullability;
Nullability[]? nullableAttributeData = null;
if ((options & TypeSystemOptions.NullabilityAnnotations) != 0)

4
ICSharpCode.Decompiler/TypeSystem/DecompilerTypeSystem.cs

@ -245,7 +245,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -245,7 +245,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
// Load referenced assemblies and type-forwarder references.
// This is necessary to make .NET Core/PCL binaries work better.
var referencedAssemblies = new List<MetadataFile>();
var assemblyReferenceQueue = new Queue<(bool IsAssembly, MetadataFile MainModule, object Reference, Task<MetadataFile> ResolveTask)>();
var assemblyReferenceQueue = new Queue<(bool IsAssembly, MetadataFile MainModule, object Reference, Task<MetadataFile?> ResolveTask)>();
var comparer = KeyComparer.Create(((bool IsAssembly, MetadataFile MainModule, object Reference) reference) =>
reference.IsAssembly ? "A:" + ((IAssemblyReference)reference.Reference).FullName :
"M:" + reference.Reference);
@ -348,7 +348,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -348,7 +348,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
{
// Immediately start loading the referenced module as we add the entry to the queue.
// This allows loading multiple modules in parallel.
Task<MetadataFile> asm;
Task<MetadataFile?> asm;
if (isAssembly)
{
asm = assemblyResolver.ResolveAsync((IAssemblyReference)reference);

2
ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataEvent.cs

@ -99,7 +99,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -99,7 +99,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
{
if (method == null)
return EmptyList<IMember>.Instance;
return method.ExplicitlyImplementedInterfaceMembers.Select(m => ((IMethod)m).AccessorOwner).Where(m => m != null);
return method.ExplicitlyImplementedInterfaceMembers.Select(m => ((IMethod)m).AccessorOwner).OfType<IMember>();
}
public ITypeDefinition DeclaringTypeDefinition => AnyAccessor?.DeclaringTypeDefinition;

2
ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataProperty.cs

@ -188,7 +188,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -188,7 +188,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
{
if (method == null)
return EmptyList<IMember>.Instance;
return method.ExplicitlyImplementedInterfaceMembers.Select(m => ((IMethod)m).AccessorOwner).Where(m => m != null);
return method.ExplicitlyImplementedInterfaceMembers.Select(m => ((IMethod)m).AccessorOwner).OfType<IMember>();
}
public ITypeDefinition DeclaringTypeDefinition => AnyAccessor?.DeclaringTypeDefinition;

2
ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs

@ -160,7 +160,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -160,7 +160,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
return type ?? new UnknownType(fullTypeName, IsReferenceType(reader, handle, rawTypeKind));
}
public IType? GetTypeFromSerializedName(string name)
public IType GetTypeFromSerializedName(string name)
{
if (name == null)
{

2
ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs

@ -83,7 +83,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -83,7 +83,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
if (type == null)
throw new ArgumentNullException(nameof(type));
return type.GetAllBaseTypes().Select(t => t.GetDefinition()).Where(d => d != null).Distinct();
return type.GetAllBaseTypes().Select(t => t.GetDefinition()).OfType<ITypeDefinition>().Distinct();
}
/// <summary>

2
ICSharpCode.ILSpyX/Abstractions/ILanguage.cs

@ -27,7 +27,7 @@ namespace ICSharpCode.ILSpyX.Abstractions @@ -27,7 +27,7 @@ namespace ICSharpCode.ILSpyX.Abstractions
{
bool ShowMember(IEntity member);
CodeMappingInfo GetCodeMappingInfo(MetadataFile module, EntityHandle member);
string GetEntityName(MetadataFile module, System.Reflection.Metadata.EntityHandle handle, bool fullName, bool omitGenerics);
string? GetEntityName(MetadataFile module, System.Reflection.Metadata.EntityHandle handle, bool fullName, bool omitGenerics);
string GetTooltip(IEntity entity);
string TypeToString(IType type, bool includeNamespace);

2
ILSpy.ReadyToRun/ReadyToRunLanguage.cs

@ -216,7 +216,7 @@ namespace ICSharpCode.ILSpy.ReadyToRun @@ -216,7 +216,7 @@ namespace ICSharpCode.ILSpy.ReadyToRun
}
}
public override RichText GetRichTextTooltip(IEntity entity)
public override RichText? GetRichTextTooltip(IEntity entity)
{
return Languages.ILLanguage.GetRichTextTooltip(entity);
}

4
ILSpy/Analyzers/AnalyzerEntityTreeNode.cs

@ -22,8 +22,8 @@ using System.Windows; @@ -22,8 +22,8 @@ using System.Windows;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpyX;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
using ICSharpCode.ILSpyX.TreeView;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.Analyzers
{
@ -32,7 +32,7 @@ namespace ICSharpCode.ILSpy.Analyzers @@ -32,7 +32,7 @@ namespace ICSharpCode.ILSpy.Analyzers
/// </summary>
public abstract class AnalyzerEntityTreeNode : AnalyzerTreeNode, IMemberTreeNode
{
public abstract IEntity Member { get; }
public abstract IEntity? Member { get; }
public override void ActivateItem(IPlatformRoutedEventArgs e)
{

2
ILSpy/Analyzers/TreeNodes/AnalyzedEventTreeNode.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
this.LazyLoading = true;
}
public override IEntity Member => analyzedEvent;
public override IEntity? Member => analyzedEvent;
public override object Icon => EventTreeNode.GetIcon(analyzedEvent);

2
ILSpy/Analyzers/TreeNodes/AnalyzedFieldTreeNode.cs

@ -52,6 +52,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -52,6 +52,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
}
}
public override IEntity Member => analyzedField;
public override IEntity? Member => analyzedField;
}
}

2
ILSpy/Analyzers/TreeNodes/AnalyzedMethodTreeNode.cs

@ -54,6 +54,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -54,6 +54,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
}
}
public override IEntity Member => analyzedMethod;
public override IEntity? Member => analyzedMethod;
}
}

2
ILSpy/Analyzers/TreeNodes/AnalyzedPropertyTreeNode.cs

@ -62,6 +62,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -62,6 +62,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
}
}
public override IEntity Member => analyzedProperty;
public override IEntity? Member => analyzedProperty;
}
}

2
ILSpy/Analyzers/TreeNodes/AnalyzedTypeTreeNode.cs

@ -52,6 +52,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes @@ -52,6 +52,6 @@ namespace ICSharpCode.ILSpy.Analyzers.TreeNodes
}
}
public override IEntity Member => analyzedType;
public override IEntity? Member => analyzedType;
}
}

11
ILSpy/App.xaml.cs

@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition.Hosting;
using System.Diagnostics;
using System.IO;
using System.Linq;
@ -34,17 +35,15 @@ using ICSharpCode.ILSpy.AppEnv; @@ -34,17 +35,15 @@ using ICSharpCode.ILSpy.AppEnv;
using ICSharpCode.ILSpy.Options;
using ICSharpCode.ILSpyX.Analyzers;
using ICSharpCode.ILSpyX.Settings;
using ICSharpCode.ILSpyX.TreeView;
using Medo.Application;
using Microsoft.VisualStudio.Composition;
using TomsToolbox.Wpf.Styles;
using ICSharpCode.ILSpyX.TreeView;
using TomsToolbox.Composition;
using TomsToolbox.Wpf.Composition;
using System.ComponentModel.Composition.Hosting;
using TomsToolbox.Wpf.Styles;
namespace ICSharpCode.ILSpy
{
@ -115,7 +114,7 @@ namespace ICSharpCode.ILSpy @@ -115,7 +114,7 @@ namespace ICSharpCode.ILSpy
}
}
private static void SingleInstance_NewInstanceDetected(object sender, NewInstanceEventArgs e)
private static void SingleInstance_NewInstanceDetected(object? sender, NewInstanceEventArgs e)
{
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
ICSharpCode.ILSpy.MainWindow.Instance.HandleSingleInstanceCommandLineArguments(e.Args);
@ -210,7 +209,7 @@ namespace ICSharpCode.ILSpy @@ -210,7 +209,7 @@ namespace ICSharpCode.ILSpy
base.OnStartup(e);
}
void DotNet40_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
void DotNet40_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
{
// On .NET 4.0, an unobserved exception in a task terminates the process unless we mark it as observed
e.SetObserved();

4
ILSpy/AvalonEdit/TextMarkerService.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.AvalonEdit @@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.AvalonEdit
/// </summary>
sealed class TextMarkerService : DocumentColorizingTransformer, IBackgroundRenderer, ITextMarkerService
{
TextSegmentCollection<TextMarker> markers;
TextSegmentCollection<TextMarker>? markers;
TextView textView;
public TextMarkerService(TextView textView)
@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.AvalonEdit @@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.AvalonEdit
OnDocumentChanged(null, null);
}
void OnDocumentChanged(object sender, EventArgs e)
void OnDocumentChanged(object? sender, EventArgs? e)
{
if (textView.Document != null)
markers = new TextSegmentCollection<TextMarker>(textView.Document);

2
ILSpy/Commands/CommandWrapper.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy @@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy
return command;
}
public event EventHandler CanExecuteChanged {
public event EventHandler? CanExecuteChanged {
add { wrappedCommand.CanExecuteChanged += value; }
remove { wrappedCommand.CanExecuteChanged -= value; }
}

4
ILSpy/Commands/DelegateCommand.cs

@ -12,7 +12,7 @@ namespace ICSharpCode.ILSpy.Commands @@ -12,7 +12,7 @@ namespace ICSharpCode.ILSpy.Commands
private readonly Action action;
private readonly Func<bool> canExecute;
public event EventHandler CanExecuteChanged {
public event EventHandler? CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Commands @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Commands
private readonly Action<T> action;
private readonly Func<T, bool> canExecute;
public event EventHandler CanExecuteChanged {
public event EventHandler? CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}

2
ILSpy/Commands/IProtocolHandler.cs

@ -25,6 +25,6 @@ namespace ICSharpCode.ILSpy @@ -25,6 +25,6 @@ namespace ICSharpCode.ILSpy
{
public interface IProtocolHandler
{
ILSpyTreeNode Resolve(string protocol, MetadataFile module, Handle handle, out bool newTabPage);
ILSpyTreeNode? Resolve(string protocol, MetadataFile module, Handle handle, out bool newTabPage);
}
}

6
ILSpy/Commands/SimpleCommand.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.ILSpy @@ -24,7 +24,7 @@ namespace ICSharpCode.ILSpy
{
public abstract class SimpleCommand : ICommand
{
public event EventHandler CanExecuteChanged {
public event EventHandler? CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
@ -41,12 +41,12 @@ namespace ICSharpCode.ILSpy @@ -41,12 +41,12 @@ namespace ICSharpCode.ILSpy
{
private bool isChecked;
public event EventHandler CanExecuteChanged {
public event EventHandler? CanExecuteChanged {
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
void ICommand.Execute(object? parameter)
{

2
ILSpy/Controls/SearchBox.cs

@ -110,7 +110,7 @@ namespace ICSharpCode.ILSpy.Controls @@ -110,7 +110,7 @@ namespace ICSharpCode.ILSpy.Controls
wl.Visibility = HasText ? Visibility.Hidden : Visibility.Visible;
}
void timer_Tick(object sender, EventArgs e)
void timer_Tick(object? sender, EventArgs e)
{
timer.Stop();
timer = null;

2
ILSpy/Controls/TreeView/SharpTreeNodeView.cs

@ -103,7 +103,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -103,7 +103,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
}
void Node_PropertyChanged(object sender, PropertyChangedEventArgs e)
void Node_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsEditing")
{

2
ILSpy/Controls/TreeView/SharpTreeView.cs

@ -171,7 +171,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -171,7 +171,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
}
}
void flattener_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
void flattener_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
// Deselect nodes that are being hidden, if any remain in the tree
if (e.Action == NotifyCollectionChangedAction.Remove && Items.Count > 0)

14
ILSpy/Controls/TreeView/SharpTreeViewItemAutomationPeer.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -32,7 +32,7 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
: base(owner)
{
SharpTreeViewItem.DataContextChanged += OnDataContextChanged;
SharpTreeNode node = SharpTreeViewItem.DataContext as SharpTreeNode;
SharpTreeNode? node = SharpTreeViewItem.DataContext as SharpTreeNode;
if (node == null)
return;
@ -61,18 +61,18 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -61,18 +61,18 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
public ExpandCollapseState ExpandCollapseState {
get {
SharpTreeNode node = SharpTreeViewItem.DataContext as SharpTreeNode;
SharpTreeNode? node = SharpTreeViewItem.DataContext as SharpTreeNode;
if (node == null || !node.ShowExpander)
return ExpandCollapseState.LeafNode;
return node.IsExpanded ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed;
}
}
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != "IsExpanded")
return;
SharpTreeNode node = sender as SharpTreeNode;
SharpTreeNode? node = sender as SharpTreeNode;
if (node == null || node.Children.Count == 0)
return;
bool newValue = node.IsExpanded;
@ -83,12 +83,12 @@ namespace ICSharpCode.ILSpy.Controls.TreeView @@ -83,12 +83,12 @@ namespace ICSharpCode.ILSpy.Controls.TreeView
newValue ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed);
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
private void OnDataContextChanged(object? sender, DependencyPropertyChangedEventArgs e)
{
SharpTreeNode oldNode = e.OldValue as SharpTreeNode;
SharpTreeNode? oldNode = e.OldValue as SharpTreeNode;
if (oldNode != null)
oldNode.PropertyChanged -= OnPropertyChanged;
SharpTreeNode newNode = e.NewValue as SharpTreeNode;
SharpTreeNode? newNode = e.NewValue as SharpTreeNode;
if (newNode != null)
newNode.PropertyChanged += OnPropertyChanged;
}

4
ILSpy/Docking/DockWorkspace.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.ILSpy.Docking @@ -52,7 +52,7 @@ namespace ICSharpCode.ILSpy.Docking
MessageBus<CurrentAssemblyListChangedEventArgs>.Subscribers += (sender, e) => CurrentAssemblyList_Changed(sender, e);
}
private void CurrentAssemblyList_Changed(object sender, NotifyCollectionChangedEventArgs e)
private void CurrentAssemblyList_Changed(object? sender, NotifyCollectionChangedEventArgs e)
{
if (e.OldItems == null)
{
@ -163,7 +163,7 @@ namespace ICSharpCode.ILSpy.Docking @@ -163,7 +163,7 @@ namespace ICSharpCode.ILSpy.Docking
}
}
void LayoutSerializationCallback(object sender, LayoutSerializationCallbackEventArgs e)
void LayoutSerializationCallback(object? sender, LayoutSerializationCallbackEventArgs e)
{
switch (e.Model)
{

2
ILSpy/Docking/PaneCollection.cs

@ -30,7 +30,7 @@ namespace ICSharpCode.ILSpy.Docking @@ -30,7 +30,7 @@ namespace ICSharpCode.ILSpy.Docking
{
private ObservableCollection<T> observableCollection = new ObservableCollection<T>();
public event NotifyCollectionChangedEventHandler CollectionChanged;
public event NotifyCollectionChangedEventHandler? CollectionChanged;
public PaneCollection()
{

4
ILSpy/LanguageSettings.cs

@ -173,9 +173,9 @@ namespace ICSharpCode.ILSpy @@ -173,9 +173,9 @@ namespace ICSharpCode.ILSpy
}
}
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
if (PropertyChanged != null)
{

2
ILSpy/Languages/Language.cs

@ -364,7 +364,7 @@ namespace ICSharpCode.ILSpy @@ -364,7 +364,7 @@ namespace ICSharpCode.ILSpy
/// Converts a member signature to a string.
/// This is used for displaying the tooltip on a member reference.
/// </summary>
public virtual RichText GetRichTextTooltip(IEntity entity)
public virtual RichText? GetRichTextTooltip(IEntity entity)
{
return GetTooltip(entity);
}

10
ILSpy/MainWindow.xaml.cs

@ -132,7 +132,7 @@ namespace ICSharpCode.ILSpy @@ -132,7 +132,7 @@ namespace ICSharpCode.ILSpy
this.Loaded += MainWindow_Loaded;
}
private void DockWorkspace_ActiveTabPageChanged(object sender, EventArgs e)
private void DockWorkspace_ActiveTabPageChanged(object? sender, EventArgs e)
{
DockWorkspace dock = DockWorkspace.Instance;
@ -350,7 +350,7 @@ namespace ICSharpCode.ILSpy @@ -350,7 +350,7 @@ namespace ICSharpCode.ILSpy
ToolsChanged(dock.ToolPanes, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
TabsChanged(dock.TabPages, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
void ToolsChanged(object sender, NotifyCollectionChangedEventArgs e)
void ToolsChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
int endIndex = windowMenuItem.Items.IndexOf(separatorBeforeDocuments);
int startIndex = windowMenuItem.Items.IndexOf(separatorBeforeTools) + 1;
@ -429,7 +429,7 @@ namespace ICSharpCode.ILSpy @@ -429,7 +429,7 @@ namespace ICSharpCode.ILSpy
}
}
void TabsChanged(object sender, NotifyCollectionChangedEventArgs e)
void TabsChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
int endIndex = windowMenuItem.Items.Count;
int startIndex = windowMenuItem.Items.IndexOf(separatorBeforeDocuments) + 1;
@ -498,7 +498,7 @@ namespace ICSharpCode.ILSpy @@ -498,7 +498,7 @@ namespace ICSharpCode.ILSpy
}
}
static void TabPageChanged(object sender, PropertyChangedEventArgs e)
static void TabPageChanged(object? sender, PropertyChangedEventArgs e)
{
var windowMenuItem = Instance.mainMenu.Items.OfType<MenuItem>().First(m => (string)m.Tag == nameof(Properties.Resources._Window));
foreach (MenuItem menuItem in windowMenuItem.Items.OfType<MenuItem>())
@ -965,7 +965,7 @@ namespace ICSharpCode.ILSpy @@ -965,7 +965,7 @@ namespace ICSharpCode.ILSpy
#endif
}
void assemblyList_Assemblies_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
void assemblyList_Assemblies_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Reset)
{

4
ILSpy/Metadata/Helpers.cs

@ -89,13 +89,13 @@ namespace ICSharpCode.ILSpy.Metadata @@ -89,13 +89,13 @@ namespace ICSharpCode.ILSpy.Metadata
return view;
}
internal static void View_AutoGeneratedColumns(object sender, EventArgs e)
internal static void View_AutoGeneratedColumns(object? sender, EventArgs e)
{
((DataGrid)sender).AutoGeneratedColumns -= View_AutoGeneratedColumns;
((DataGrid)sender).AutoGeneratingColumn -= View_AutoGeneratingColumn;
}
internal static void View_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
internal static void View_AutoGeneratingColumn(object? sender, DataGridAutoGeneratingColumnEventArgs e)
{
var binding = new Binding(e.PropertyName) { Mode = BindingMode.OneWay };
e.Column = GetColumn();

4
ILSpy/Metadata/MetaDataGrid.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
this.hoverLogic.MouseHoverStopped += HoverLogic_MouseHoverStopped;
}
private void HoverLogic_MouseHoverStopped(object sender, System.Windows.Input.MouseEventArgs e)
private void HoverLogic_MouseHoverStopped(object? sender, System.Windows.Input.MouseEventArgs e)
{
// Non-popup tooltips get closed as soon as the mouse starts moving again
if (toolTip != null)
@ -53,7 +53,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -53,7 +53,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
}
private void HoverLogic_MouseHover(object sender, System.Windows.Input.MouseEventArgs e)
private void HoverLogic_MouseHover(object? sender, System.Windows.Input.MouseEventArgs e)
{
var position = e.GetPosition(this);
var hit = VisualTreeHelper.HitTest(this, position);

2
ILSpy/Options/DecompilerSettingsViewModel.cs

@ -92,7 +92,7 @@ namespace ICSharpCode.ILSpy.Options @@ -92,7 +92,7 @@ namespace ICSharpCode.ILSpy.Options
public DecompilerSettingsItemViewModel[] Settings { get; }
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
private void Item_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(DecompilerSettingsItemViewModel.IsEnabled))
{

4
ILSpy/Options/DisplaySettings.cs

@ -42,14 +42,14 @@ namespace ICSharpCode.ILSpy.Options @@ -42,14 +42,14 @@ namespace ICSharpCode.ILSpy.Options
}
#region INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

4
ILSpy/Options/MiscSettingsViewModel.cs

@ -119,14 +119,14 @@ namespace ICSharpCode.ILSpy.Options @@ -119,14 +119,14 @@ namespace ICSharpCode.ILSpy.Options
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChanged?.Invoke(this, e);
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

2
ILSpy/Search/SearchPane.xaml.cs

@ -203,7 +203,7 @@ namespace ICSharpCode.ILSpy.Search @@ -203,7 +203,7 @@ namespace ICSharpCode.ILSpy.Search
listBox.SelectedIndex = 0;
}
void UpdateResults(object sender, EventArgs e)
void UpdateResults(object? sender, EventArgs e)
{
if (currentSearch == null)
return;

4
ILSpy/SessionSettings.cs

@ -69,9 +69,9 @@ namespace ICSharpCode.ILSpy @@ -69,9 +69,9 @@ namespace ICSharpCode.ILSpy
this.DockLayout = new DockLayoutSettings(doc.Element("DockLayout"));
}
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = null)
void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
var args = new PropertyChangedEventArgs(propertyName);

2
ILSpy/TextView/BracketHighlightRenderer.cs

@ -33,7 +33,7 @@ namespace ICSharpCode.ILSpy.TextView @@ -33,7 +33,7 @@ namespace ICSharpCode.ILSpy.TextView
/// Searches for a matching bracket from the given offset to the start of the document.
/// </summary>
/// <returns>A BracketSearchResult that contains the positions and lengths of the brackets. Return null if there is nothing to highlight.</returns>
BracketSearchResult SearchBracket(IDocument document, int offset);
BracketSearchResult? SearchBracket(IDocument document, int offset);
}
public class DefaultBracketSearcher : IBracketSearcher

6
ILSpy/Themes/WindowStyleManagerBehavior.cs

@ -65,7 +65,7 @@ namespace ICSharpCode.ILSpy.Themes @@ -65,7 +65,7 @@ namespace ICSharpCode.ILSpy.Themes
SettingsService.Instance.DisplaySettings.PropertyChanged -= DisplaySettings_PropertyChanged;
}
private void Color_Changed(object sender, EventArgs e)
private void Color_Changed(object? sender, EventArgs e)
{
ApplyThemeToWindowCaption();
}
@ -83,7 +83,7 @@ namespace ICSharpCode.ILSpy.Themes @@ -83,7 +83,7 @@ namespace ICSharpCode.ILSpy.Themes
MessageBox.Show(Properties.Resources.SettingsChangeRestartRequired);
}
private void DisplaySettings_PropertyChanged(object sender, PropertyChangedEventArgs e)
private void DisplaySettings_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(DisplaySettings.StyleWindowTitleBar))
{
@ -114,7 +114,7 @@ namespace ICSharpCode.ILSpy.Themes @@ -114,7 +114,7 @@ namespace ICSharpCode.ILSpy.Themes
}
else
{
void Initialized(object o, EventArgs eventArgs)
void Initialized(object? o, EventArgs eventArgs)
{
ApplyThemeToWindowCaption();
window.SourceInitialized -= Initialized;

4
ILSpy/TreeNodes/AssemblyListTreeNode.cs

@ -26,8 +26,8 @@ using ICSharpCode.Decompiler.Metadata; @@ -26,8 +26,8 @@ using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.Decompiler.Util;
using ICSharpCode.ILSpyX;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
using ICSharpCode.ILSpyX.TreeView;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes
{
@ -57,7 +57,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -57,7 +57,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
this.Children.Clear();
this.Children.AddRange(collection.GetAssemblies().Select(a => new AssemblyTreeNode(a)));
collection.CollectionChanged += delegate (object sender, NotifyCollectionChangedEventArgs e) {
collection.CollectionChanged += delegate (object? sender, NotifyCollectionChangedEventArgs e) {
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:

4
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -29,8 +29,8 @@ using ICSharpCode.Decompiler; @@ -29,8 +29,8 @@ using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Util;
using ICSharpCode.ILSpyX.Abstractions;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
using ICSharpCode.ILSpyX.TreeView;
using ICSharpCode.ILSpyX.TreeView.PlatformAbstractions;
namespace ICSharpCode.ILSpy.TreeNodes
{
@ -128,7 +128,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -128,7 +128,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
protected virtual void LanguageSettings_Changed(object sender, EventArgs e)
protected virtual void LanguageSettings_Changed(object? sender, EventArgs e)
{
RaisePropertyChanged(nameof(Text));
if (IsVisible)

2
ILSpy/Updates/NotifyOfUpdatesStrategy.cs

@ -87,7 +87,7 @@ namespace ICSharpCode.ILSpy.Updates @@ -87,7 +87,7 @@ namespace ICSharpCode.ILSpy.Updates
}
}
public static Task<string> CheckForUpdatesAsync(ILSpySettings spySettings)
public static Task<string?> CheckForUpdatesAsync(ILSpySettings spySettings)
{
UpdateSettings s = new UpdateSettings(spySettings);
return CheckForUpdateInternal(s);

4
ILSpy/Updates/UpdateSettings.cs

@ -78,9 +78,9 @@ namespace ICSharpCode.ILSpy.Updates @@ -78,9 +78,9 @@ namespace ICSharpCode.ILSpy.Updates
ILSpySettings.SaveSettings(updateSettings);
}
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
void OnPropertyChanged(string propertyName)
void OnPropertyChanged(string? propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

4
ILSpy/ViewModels/PaneModel.cs

@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -39,7 +39,7 @@ namespace ICSharpCode.ILSpy.ViewModels
this.model.PropertyChanged += Model_PropertyChanged;
}
private void Model_PropertyChanged(object sender, PropertyChangedEventArgs e)
private void Model_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(model.IsCloseable))
{
@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy.ViewModels
}
}
public event EventHandler CanExecuteChanged;
public event EventHandler? CanExecuteChanged;
public bool CanExecute(object? parameter)
{

4
ILSpy/ViewModels/ViewModelBase.cs

@ -23,9 +23,9 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -23,9 +23,9 @@ namespace ICSharpCode.ILSpy.ViewModels
{
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged;
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
protected void RaisePropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

Loading…
Cancel
Save