Skip to content

Commit 2c63052

Browse files
author
Alexander Dolin
committed
Fix JetBrains.Annotations.NotNullAttribute for properties.
1 parent e983d47 commit 2c63052

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

Framework/PostSharp.Samples.ResharperAnnotations/JetBrains.Annotations.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,37 @@ public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
4848
{
4949
var target = targetElement;
5050

51-
var targetMethod = target as MethodInfo;
52-
53-
54-
if (targetMethod != null)
51+
if (target is MethodInfo targetMethod)
5552
{
5653
if (targetMethod.IsAbstract || targetMethod.DeclaringType.Namespace.StartsWith("JetBrains."))
54+
{
55+
yield break;
56+
}
57+
else if (targetMethod.IsSpecialName && targetMethod.Name.StartsWith("set_"))
58+
{
59+
target = targetMethod.DeclaringType.GetProperty(targetMethod.Name.Substring(4),
60+
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
61+
}
62+
else if (targetMethod.IsSpecialName && targetMethod.Name.StartsWith("get_"))
63+
{
5764
yield break;
65+
}
66+
else
67+
{
68+
target = targetMethod.ReturnParameter;
5869

59-
target = targetMethod.ReturnParameter;
70+
}
6071
}
61-
else
72+
else if (target is ParameterInfo targetParameter)
6273
{
63-
var targetParameter = (ParameterInfo)target;
6474
var targetMember = (MethodBase)targetParameter.Member;
6575
if (targetMember.IsAbstract || targetMember.DeclaringType.Namespace.StartsWith("JetBrains."))
6676
yield break;
6777
}
78+
else if (!(target is PropertyInfo))
79+
{
80+
yield break;
81+
}
6882

6983
yield return new AspectInstance(target, new ObjectConstruction(typeof(PostSharp.Patterns.Contracts.NotNullAttribute)), null );
7084
}

Framework/PostSharp.Samples.ResharperAnnotations/Program.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ interface IProgram
77

88
[JetBrains.Annotations.NotNull]
99
string Foo([JetBrains.Annotations.NotNull] string bar);
10+
11+
[JetBrains.Annotations.NotNull]
12+
string FooFoo { get; set; }
1013
}
1114

1215
class Program : IProgram
@@ -33,12 +36,32 @@ static void Main(string[] args)
3336
{
3437
Console.WriteLine(e.Message);
3538
}
39+
40+
try
41+
{
42+
p.FooFoo = null;
43+
}
44+
catch (Exception e)
45+
{
46+
Console.WriteLine(e.Message);
47+
}
48+
49+
try
50+
{
51+
p.FooFoo = "";
52+
}
53+
catch (Exception e)
54+
{
55+
Console.WriteLine(e.Message);
56+
}
3657
}
3758

3859
public string Foo(string bar)
3960
{
4061
return null;
4162
}
63+
64+
public string FooFoo { get; set; }
4265
}
4366

4467

0 commit comments

Comments
 (0)