Skip to content

Commit e97c86f

Browse files
Handle implicit object creation expressions
1 parent a5c44c7 commit e97c86f

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

CheckedExceptions/CheckedExceptionsAnalyzer.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public override void Initialize(AnalysisContext context)
113113
// Register additional actions for method calls, object creations, etc.
114114
context.RegisterSyntaxNodeAction(AnalyzeMethodCall, SyntaxKind.InvocationExpression);
115115
context.RegisterSyntaxNodeAction(AnalyzeObjectCreation, SyntaxKind.ObjectCreationExpression);
116+
context.RegisterSyntaxNodeAction(AnalyzeImplicitObjectCreation, SyntaxKind.ImplicitObjectCreationExpression);
116117
context.RegisterSyntaxNodeAction(AnalyzeIdentifier, SyntaxKind.IdentifierName);
117118
context.RegisterSyntaxNodeAction(AnalyzeMemberAccess, SyntaxKind.SimpleMemberAccessExpression);
118119
context.RegisterSyntaxNodeAction(AnalyzeAwait, SyntaxKind.AwaitExpression);
@@ -810,6 +811,23 @@ private void AnalyzeObjectCreation(SyntaxNodeAnalysisContext context)
810811
AnalyzeMemberExceptions(context, objectCreation, constructorSymbol, settings);
811812
}
812813

814+
815+
/// <summary>
816+
/// Analyzes implicit object creation expressions to determine if exceptions are handled or declared.
817+
/// </summary>
818+
private void AnalyzeImplicitObjectCreation(SyntaxNodeAnalysisContext context)
819+
{
820+
var settings = GetAnalyzerSettings(context.Options);
821+
822+
var objectCreation = (ImplicitObjectCreationExpressionSyntax)context.Node;
823+
824+
var constructorSymbol = context.SemanticModel.GetSymbolInfo(objectCreation).Symbol as IMethodSymbol;
825+
if (constructorSymbol is null)
826+
return;
827+
828+
AnalyzeMemberExceptions(context, objectCreation, constructorSymbol, settings);
829+
}
830+
813831
/// <summary>
814832
/// Analyzes member access expressions (e.g., property accessors) for exception handling.
815833
/// </summary>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace Test.Cases.Constructors;
2+
3+
public class ImplicitObjectCreationTest
4+
{
5+
[Throws(typeof(InvalidOperationException))]
6+
public ImplicitObjectCreationTest()
7+
{
8+
throw new InvalidOperationException("Constructor exception.");
9+
}
10+
11+
public static void Test()
12+
{
13+
ImplicitObjectCreationTest foo = new();
14+
}
15+
}

0 commit comments

Comments
 (0)