Skip to content

Commit 90857c8

Browse files
haugjanhazzik
haugjan
authored andcommitted
NH-2963 - Exception when map an IList(Of T) by Code in VB.NET
1 parent 16def58 commit 90857c8

File tree

4 files changed

+43
-8
lines changed

4 files changed

+43
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
3+
Namespace Issues.NH2963
4+
Public Class Entity
5+
Private _childs As IList(Of String)
6+
7+
Public Property Childs As IList(Of String)
8+
Get
9+
Return _childs
10+
End Get
11+
Set
12+
_childs = value
13+
End Set
14+
End Property
15+
End Class
16+
End Namespace
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Imports NHibernate.Mapping.ByCode
2+
Imports NUnit.Framework
3+
4+
Namespace Issues.NH2963
5+
<TestFixture()>
6+
Public Class Fixture
7+
<Test>
8+
Public Sub GenericDecodeMemberAccessExpressionForCollectionAsEnumerableShouldReturnMemberOfDeclaringClass()
9+
TypeExtensions.DecodeMemberAccessExpression (Of Entity, IEnumerable(Of String))(Function(mc) mc.Childs)
10+
End Sub
11+
12+
<Test>
13+
Public Sub GenericDecodeMemberAccessExpressionOfForCollectionAsEnumerableShouldReturnMemberOfDeclaringClass()
14+
TypeExtensions.DecodeMemberAccessExpressionOf (Of Entity, IEnumerable(Of String))(Function(mc) mc.Childs)
15+
End Sub
16+
End Class
17+
End Namespace

src/NHibernate.Test.VisualBasic/NHibernate.Test.VisualBasic.vbproj

+2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
<Import Include="System.Xml.Linq" />
7272
</ItemGroup>
7373
<ItemGroup>
74+
<Compile Include="Issues\NH2963\Entity.vb" />
75+
<Compile Include="Issues\NH2963\Fixture.vb" />
7476
<Compile Include="Issues\NH0000\Entity.vb" />
7577
<Compile Include="Issues\NH0000\Fixture.vb" />
7678
<Compile Include="Issues\IssueTestCase.vb" />

src/NHibernate/Mapping/ByCode/TypeExtensions.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static System.Type GetPropertyOrFieldType(this MemberInfo propertyOrField
5151
return ((FieldInfo) propertyOrField).FieldType;
5252
}
5353
throw new ArgumentOutOfRangeException("propertyOrField",
54-
"Expected PropertyInfo or FieldInfo; found :" + propertyOrField.MemberType);
54+
"Expected PropertyInfo or FieldInfo; found :" + propertyOrField.MemberType);
5555
}
5656

5757
public static MemberInfo DecodeMemberAccessExpression<TEntity>(Expression<Func<TEntity, object>> expression)
@@ -63,7 +63,7 @@ public static MemberInfo DecodeMemberAccessExpression<TEntity>(Expression<Func<T
6363
return ((MemberExpression) ((UnaryExpression) expression.Body).Operand).Member;
6464
}
6565
throw new Exception(string.Format("Invalid expression type: Expected ExpressionType.MemberAccess, Found {0}",
66-
expression.Body.NodeType));
66+
expression.Body.NodeType));
6767
}
6868
return ((MemberExpression) expression.Body).Member;
6969
}
@@ -86,7 +86,7 @@ public static MemberInfo DecodeMemberAccessExpressionOf<TEntity>(Expression<Func
8686
else
8787
{
8888
throw new Exception(string.Format("Invalid expression type: Expected ExpressionType.MemberAccess, Found {0}",
89-
expression.Body.NodeType));
89+
expression.Body.NodeType));
9090
}
9191
}
9292
else
@@ -110,12 +110,12 @@ public static MemberInfo DecodeMemberAccessExpression<TEntity, TProperty>(Expres
110110
{
111111
if (expression.Body.NodeType != ExpressionType.MemberAccess)
112112
{
113-
if ((expression.Body.NodeType == ExpressionType.Convert) && (expression.Body.Type == typeof (object)))
113+
if ((expression.Body.NodeType == ExpressionType.Convert) && (expression.Body.Type == typeof(TProperty)))
114114
{
115115
return ((MemberExpression) ((UnaryExpression) expression.Body).Operand).Member;
116116
}
117117
throw new Exception(string.Format("Invalid expression type: Expected ExpressionType.MemberAccess, Found {0}",
118-
expression.Body.NodeType));
118+
expression.Body.NodeType));
119119
}
120120
return ((MemberExpression) expression.Body).Member;
121121
}
@@ -132,14 +132,14 @@ public static MemberInfo DecodeMemberAccessExpressionOf<TEntity, TProperty>(Expr
132132
MemberInfo memberOfDeclaringType;
133133
if (expression.Body.NodeType != ExpressionType.MemberAccess)
134134
{
135-
if ((expression.Body.NodeType == ExpressionType.Convert) && (expression.Body.Type == typeof (object)))
135+
if ((expression.Body.NodeType == ExpressionType.Convert) && (expression.Body.Type == typeof(TProperty)))
136136
{
137137
memberOfDeclaringType = ((MemberExpression) ((UnaryExpression) expression.Body).Operand).Member;
138138
}
139139
else
140140
{
141141
throw new Exception(string.Format("Invalid expression type: Expected ExpressionType.MemberAccess, Found {0}",
142-
expression.Body.NodeType));
142+
expression.Body.NodeType));
143143
}
144144
}
145145
else
@@ -333,7 +333,7 @@ public static MemberInfo GetFirstPropertyOfType(this System.Type propertyContain
333333
}
334334

335335
public static MemberInfo GetFirstPropertyOfType(this System.Type propertyContainerType, System.Type propertyType, BindingFlags bindingFlags,
336-
Func<PropertyInfo, bool> acceptPropertyClauses)
336+
Func<PropertyInfo, bool> acceptPropertyClauses)
337337
{
338338
if (acceptPropertyClauses == null)
339339
{

0 commit comments

Comments
 (0)