BADF00D / DisposableFixer

This is a Visual Studio Extension and NuGet package that should identify and fix problems as memleaks while using IDisposables.
Other
35 stars 7 forks source link

UndisposedFieldCodeFixProvider crashes #139

Open BADF00D opened 4 years ago

BADF00D commented 4 years ago

Prerequisites

Description

When hitting Ctrl+. on user.Select(u => u.FirstName) the crash occures. Btw FirstName is already disposed and SetValidateNotifyError is an extension method that pipes the given given extended argument.

Source Code

public MainWindowViewModel(IObservable<UserDto> user)
        {
            Func<string, IEnumerable> noneEmptyString = value => string.IsNullOrWhiteSpace(value) ? "Please provide a value" : null;

            DateOfDeath = user.Select(u => u.DateOfDeath)
                .ToPropertyViewModel();
            var isReadOnly = DateOfDeath.Where(dt => dt.HasValue)
                .Select(dt => dt.HasValue)
                .DistinctUntilChanged()
                .Publish()
                .RefCount();

            Name = user.Select(u => u.Name)
                .ToPropertyViewModel(isReadOnly)
                .SetValidateNotifyError(noneEmptyString);
            FirstName = user.Select(u => u.FirstName)
                .ToPropertyViewModel(isReadOnly)
                .SetValidateNotifyError(noneEmptyString);
            DateOfBirth = user.Select(u => u.DateOfBirth)
                .ToPropertyViewModel(Observable.Return(true));

            ResetCommand = ObservableExt
                .AnyOfLatest(Name.ObserveHasChanges, FirstName.ObserveHasChanges, DateOfBirth.ObserveHasChanges, DateOfDeath.ObserveHasChanges)
                .ToReactiveCommand();

            Name.ResetOn(ResetCommand.ToUnit());
        }

Stacktrace

System.ArgumentNullException : Value cannot be null.
Parameter name: syntax
   at Microsoft.CodeAnalysis.CSharp.CSharpSemanticModel.CheckSyntaxNode(CSharpSyntaxNode syntax)
   at Microsoft.CodeAnalysis.CSharp.CSharpSemanticModel.GetTypeInfo(ExpressionSyntax expression,CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.CSharp.CSharpExtensions.GetTypeInfo(SemanticModel semanticModel,ExpressionSyntax expression,CancellationToken cancellationToken)
   at async DisposableFixer.CodeFix.UndisposedMemberCodeFixProvider.CreateDisposeCallInParameterlessDisposeMethod(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.CodeActions.CodeAction.GetChangedSolutionAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.CodeActions.CodeAction.ComputeOperationsAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.CodeActions.CodeAction.GetPreviewOperationsAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedAction.GetPreviewResultAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedActionWithNestedFlavors.<>c__DisplayClass11_0.<GetPreviewAsync>b__0(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Extensions.IExtensionManagerExtensions.PerformFunctionAsync[T](<Unknown Parameters>)

Screenshot