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

Crash: Exception when try to fix an local variable #76

Closed BADF00D closed 6 years ago

BADF00D commented 6 years ago

Prerequisites

Description

When I hit 'ctrl .' on an undisposed local variable (reader in source), an Exception is thrown.

Source Code

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo
{
    class Program
    {
        private IDisposable Field;
        private MemoryStream Property { get; } = new MemoryStream();

        public Program()
        {
            Field = new MemoryStream();

            var reader = new StreamReader(new MemoryStream(), Encoding.ASCII, true, 1024,true);

            Observable.Interval(TimeSpan.FromSeconds(1))
                .Do(_ => Console.WriteLine("tick"))
                .Subscribe();
        }
        static void Main(string[] args){}
    }
}

Stacktrace of IntroduceFieldAndDisposeInDisposeMethodCodeFixProvider:

System.ArgumentNullException : Value cannot be null.
Parameter name: right
   at Microsoft.CodeAnalysis.CSharp.SyntaxFactory.AssignmentExpression(SyntaxKind kind,ExpressionSyntax left,SyntaxToken operatorToken,ExpressionSyntax right)
   at async DisposableFixer.CodeFix.IntroduceFieldAndDisposeInDisposeMethodCodeFixProvider.IntroduceFieldAndDisposeInDisposeMethod(<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.ComputePreviewOperationsAsync(<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.PreviewChangesSuggestedAction.CreateAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedActionWithNestedFlavors.GetPreviewChangesFlavor(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedActionWithNestedFlavors.CreateAllFlavors(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Extensions.IExtensionManagerExtensions.PerformFunctionAsync[T](<Unknown Parameters>)

Stacktrace of WrapAnounymousObjectInUsingCodeFixProvider

System.NotSupportedException : Specified method is not supported.
   at async DisposableFixer.CodeFix.WrapAnounymousObjectsInUsingCodeFixProvider.WrapExpressionSyntaxInUsing(<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.ComputePreviewOperationsAsync(<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.PreviewChangesSuggestedAction.CreateAsync(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedActionWithNestedFlavors.GetPreviewChangesFlavor(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Editor.Implementation.Suggestions.SuggestedActionWithNestedFlavors.CreateAllFlavors(<Unknown Parameters>)
   at async Microsoft.CodeAnalysis.Extensions.IExtensionManagerExtensions.PerformFunctionAsync[T](<Unknown Parameters>)

Screenshot

image

BADF00D commented 6 years ago

Will be part of release 1.0.0