|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Threading;
namespace Roslyn.Utilities;
/// <summary>
/// TODO: remove this exception: https://github.com/dotnet/roslyn/issues/40476
///
/// this represents soft crash request compared to hard crash which will bring down VS.
///
/// by soft crash, it means everything same as hard crash except it should use NFW and info bar
/// to inform users about unexpected condition instead of killing VS as traditional crash did.
///
/// in other words, no one should ever try to recover from this exception. but they must try to not hard crash.
///
/// this exception is based on cancellation exception since, in Roslyn code, cancellation exception is so far
/// only safest exception to throw without worrying about crashing VS 99%. there is still 1% case it will bring
/// down VS and those places should be guarded on this exception as we find such place.
///
/// for now, this is an opt-in based. if a feature wants to move to soft crash (ex, OOP), one should catch
/// exception and translate that to this exception and then add handler which report NFW and info bar in their
/// code path and make sure it doesn't bring down VS.
///
/// as we use soft-crash in more places, we should come up with more general framework.
/// </summary>
internal sealed class SoftCrashException : OperationCanceledException
{
public SoftCrashException() : base() { }
public SoftCrashException(string message) : base(message) { }
public SoftCrashException(CancellationToken token) : base(token) { }
public SoftCrashException(string message, Exception innerException) : base(message, innerException) { }
public SoftCrashException(string message, CancellationToken token) : base(message, token) { }
public SoftCrashException(string message, Exception innerException, CancellationToken token) : base(message, innerException, token) { }
}
|