Skip to content

Commit e95a847

Browse files
committed
Fix some CodeFactor issues
1 parent d067e8c commit e95a847

File tree

3 files changed

+105
-83
lines changed

3 files changed

+105
-83
lines changed

src/NHibernate.Test/Linq/NullComparisonTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,6 @@ public void NullEqualityWithNotNullSubSelect()
332332
Expect(q, Does.Not.Contain("is null").IgnoreCase);
333333
}
334334

335-
336335
[Test]
337336
public void NullEquality()
338337
{

src/NHibernate/Linq/Visitors/NullableExpressionDetector.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@ public void SearchForNotNullMemberChecks(BinaryExpression expression)
4141
// Example: o.Status != null && o.Status != "New"
4242
// Example: (o.Status != null && o.OldStatus != null) && (o.Status != o.OldStatus)
4343
// Example: (o.Status != null && o.OldStatus != null) && (o.Status == o.OldStatus)
44-
if (expression.NodeType != ExpressionType.AndAlso ||
45-
expression.Right.NodeType != ExpressionType.NotEqual &&
46-
expression.Right.NodeType != ExpressionType.Equal ||
47-
expression.Left.NodeType != ExpressionType.AndAlso &&
48-
expression.Left.NodeType != ExpressionType.NotEqual)
44+
if (
45+
expression.NodeType != ExpressionType.AndAlso ||
46+
(
47+
expression.Right.NodeType != ExpressionType.NotEqual &&
48+
expression.Right.NodeType != ExpressionType.Equal
49+
) ||
50+
(
51+
expression.Left.NodeType != ExpressionType.AndAlso &&
52+
expression.Left.NodeType != ExpressionType.NotEqual
53+
))
4954
{
5055
return;
5156
}

src/NHibernate/Util/ExpressionsHelper.cs

Lines changed: 95 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -27,78 +27,18 @@ public static MemberInfo DecodeMemberAccessExpression<TEntity, TResult>(Expressi
2727
return ((MemberExpression)expression.Body).Member;
2828
}
2929

30-
internal static string TryGetEntityName(ISessionFactoryImplementor sessionFactory, Expression expression,
31-
out string memberPath, out IType memberType)
30+
internal static string TryGetEntityName(
31+
ISessionFactoryImplementor sessionFactory,
32+
Expression expression,
33+
out string memberPath,
34+
out IType memberType)
3235
{
33-
string entityName = null;
34-
var memberPaths = new Stack<MemberMetadata>();
35-
var currentExpression = expression;
36-
System.Type convertType = null;
37-
bool hasIndexer = false;
38-
while (true)
36+
var memberPaths = TryGetAllMemberMetadata(sessionFactory, expression, out var entityName, out var convertType);
37+
if (memberPaths == null)
3938
{
40-
if (currentExpression is MemberExpression subMemberExpression)
41-
{
42-
memberPaths.Push(new MemberMetadata(subMemberExpression.Member.Name, convertType, hasIndexer));
43-
convertType = null;
44-
hasIndexer = false;
45-
currentExpression = subMemberExpression.Expression;
46-
}
47-
else if (currentExpression is QuerySourceReferenceExpression querySourceReferenceExpression)
48-
{
49-
if (querySourceReferenceExpression.ReferencedQuerySource is IFromClause fromClause)
50-
{
51-
currentExpression = fromClause.FromExpression;
52-
}
53-
else if (querySourceReferenceExpression.ReferencedQuerySource is JoinClause joinClause)
54-
{
55-
currentExpression = joinClause.InnerSequence;
56-
}
57-
else
58-
{
59-
// Unknown ReferencedQuerySource
60-
memberPath = null;
61-
memberType = null;
62-
return null;
63-
}
64-
}
65-
else if (currentExpression is UnaryExpression unaryExpression) // ((BaseEntity)q.Entity).Prop
66-
{
67-
currentExpression = unaryExpression.Operand;
68-
convertType = unaryExpression.Type;
69-
}
70-
else if (currentExpression is NhNominatedExpression nominatedExpression) // ((BaseEntity)q.Entity).Prop
71-
{
72-
currentExpression = nominatedExpression.Expression;
73-
}
74-
else if (currentExpression is ConstantExpression constantExpression)
75-
{
76-
if (!(constantExpression.Value is IEntityNameProvider entityNameProvider))
77-
{
78-
// Not a NhQueryable<T>
79-
memberPath = null;
80-
memberType = null;
81-
return null;
82-
}
83-
84-
entityName = entityNameProvider.EntityName;
85-
break;
86-
}
87-
else if (currentExpression is MethodCallExpression methodCallExpression &&
88-
ListIndexerGenerator.IsMethodSupported(methodCallExpression.Method))
89-
{
90-
currentExpression = methodCallExpression.Object == null
91-
? Enumerable.First(methodCallExpression.Arguments) // q.Children.ElementAt(0)
92-
: methodCallExpression.Object; // q.Children[0]
93-
hasIndexer = true;
94-
}
95-
else
96-
{
97-
// Not supported expressions
98-
memberPath = null;
99-
memberType = null;
100-
return null;
101-
}
39+
memberPath = null;
40+
memberType = null;
41+
return null;
10242
}
10343

10444
entityName = GetEntityName(entityName, convertType, sessionFactory, out var persister);
@@ -213,10 +153,87 @@ internal static string TryGetEntityName(ISessionFactoryImplementor sessionFactor
213153
}
214154
}
215155

216-
private static string GetEntityName(string currentEntityName,
217-
System.Type convertedType,
218-
ISessionFactoryImplementor sessionFactory,
219-
out IEntityPersister persister)
156+
private static Stack<MemberMetadata> TryGetAllMemberMetadata(
157+
ISessionFactoryImplementor sessionFactory,
158+
Expression expression,
159+
out string entityName,
160+
out System.Type convertType)
161+
{
162+
var memberPaths = new Stack<MemberMetadata>();
163+
var currentExpression = expression;
164+
convertType = null;
165+
bool hasIndexer = false;
166+
while (true)
167+
{
168+
if (currentExpression is MemberExpression subMemberExpression)
169+
{
170+
memberPaths.Push(new MemberMetadata(subMemberExpression.Member.Name, convertType, hasIndexer));
171+
convertType = null;
172+
hasIndexer = false;
173+
currentExpression = subMemberExpression.Expression;
174+
}
175+
else if (currentExpression is QuerySourceReferenceExpression querySourceReferenceExpression)
176+
{
177+
if (querySourceReferenceExpression.ReferencedQuerySource is IFromClause fromClause)
178+
{
179+
currentExpression = fromClause.FromExpression;
180+
}
181+
else if (querySourceReferenceExpression.ReferencedQuerySource is JoinClause joinClause)
182+
{
183+
currentExpression = joinClause.InnerSequence;
184+
}
185+
else
186+
{
187+
// Unknown ReferencedQuerySource
188+
entityName = null;
189+
return null;
190+
}
191+
}
192+
else if (currentExpression is UnaryExpression unaryExpression) // ((BaseEntity)q.Entity).Prop
193+
{
194+
currentExpression = unaryExpression.Operand;
195+
convertType = unaryExpression.Type;
196+
}
197+
else if (currentExpression is NhNominatedExpression nominatedExpression) // ((BaseEntity)q.Entity).Prop
198+
{
199+
currentExpression = nominatedExpression.Expression;
200+
}
201+
else if (currentExpression is ConstantExpression constantExpression)
202+
{
203+
if (!(constantExpression.Value is IEntityNameProvider entityNameProvider))
204+
{
205+
// Not a NhQueryable<T>
206+
entityName = null;
207+
return null;
208+
}
209+
210+
entityName = entityNameProvider.EntityName;
211+
break;
212+
}
213+
else if (currentExpression is MethodCallExpression methodCallExpression &&
214+
ListIndexerGenerator.IsMethodSupported(methodCallExpression.Method))
215+
{
216+
currentExpression = methodCallExpression.Object == null
217+
? Enumerable.First(methodCallExpression.Arguments) // q.Children.ElementAt(0)
218+
: methodCallExpression.Object; // q.Children[0]
219+
hasIndexer = true;
220+
}
221+
else
222+
{
223+
// Not supported expressions
224+
entityName = null;
225+
return null;
226+
}
227+
}
228+
229+
return memberPaths;
230+
}
231+
232+
private static string GetEntityName(
233+
string currentEntityName,
234+
System.Type convertedType,
235+
ISessionFactoryImplementor sessionFactory,
236+
out IEntityPersister persister)
220237
{
221238
persister = sessionFactory.TryGetEntityPersister(currentEntityName);
222239
if (persister == null)
@@ -244,9 +261,10 @@ private static string GetEntityName(string currentEntityName,
244261
return GetEntityName(convertedType, sessionFactory, out persister);
245262
}
246263

247-
private static string GetEntityName(System.Type convertedType,
248-
ISessionFactoryImplementor sessionFactory,
249-
out IEntityPersister persister)
264+
private static string GetEntityName(
265+
System.Type convertedType,
266+
ISessionFactoryImplementor sessionFactory,
267+
out IEntityPersister persister)
250268
{
251269
if (convertedType == null)
252270
{

0 commit comments

Comments
 (0)