You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2016/08/18 16:36:18 UTC
ignite git commit: IGNITE-3696 .NET: Fix QueryEntity Java type
mapping to handle nullable types.
Repository: ignite
Updated Branches:
refs/heads/master 6899e06fb -> 9fad9c92d
IGNITE-3696 .NET: Fix QueryEntity Java type mapping to handle nullable types.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9fad9c92
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9fad9c92
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9fad9c92
Branch: refs/heads/master
Commit: 9fad9c92d5c65b5940e7b78d12829f5b39e5115c
Parents: 6899e06
Author: Pavel Tupitsyn <pt...@apache.org>
Authored: Thu Aug 18 19:36:07 2016 +0300
Committer: Pavel Tupitsyn <pt...@apache.org>
Committed: Thu Aug 18 19:36:07 2016 +0300
----------------------------------------------------------------------
.../Apache.Ignite.Core.Tests.csproj | 3 +-
.../Binary/JavaTypeMappingTest.cs | 142 +++++++++++++++++++
.../Binary/TypeResolverTest.cs | 107 ++++++++++++++
.../Query/CacheQueriesCodeConfigurationTest.cs | 12 ++
.../TypeResolverTest.cs | 107 --------------
.../Apache.Ignite.Core/Impl/Binary/JavaTypes.cs | 24 +++-
6 files changed, 283 insertions(+), 112 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
index c4dcbae..647d82d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
@@ -58,6 +58,8 @@
<ItemGroup>
<Compile Include="Binary\BinaryReaderWriterTest.cs" />
<Compile Include="Binary\IO\BinaryStreamsTest.cs" />
+ <Compile Include="Binary\JavaTypeMappingTest.cs" />
+ <Compile Include="Binary\TypeResolverTest.cs" />
<Compile Include="Cache\Affinity\AffinityKeyTest.cs" />
<Compile Include="Cache\Affinity\AffinityTopologyVersionTest.cs" />
<Compile Include="Cache\CacheResultTest.cs" />
@@ -177,7 +179,6 @@
<Compile Include="Services\ServiceProxyTest.cs" />
<Compile Include="Services\ServicesAsyncWrapper.cs" />
<Compile Include="TestRunner.cs" />
- <Compile Include="TypeResolverTest.cs" />
<Compile Include="WindowsServiceTest.cs" />
</ItemGroup>
<ItemGroup>
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/JavaTypeMappingTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/JavaTypeMappingTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/JavaTypeMappingTest.cs
new file mode 100644
index 0000000..35d9a2e
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/JavaTypeMappingTest.cs
@@ -0,0 +1,142 @@
+\ufeff/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Tests.Binary
+{
+ using System;
+ using Apache.Ignite.Core.Impl.Binary;
+ using NUnit.Framework;
+
+ /// <summary>
+ /// Tests the type mapping between .NET and Java.
+ /// </summary>
+ public class JavaTypeMappingTest
+ {
+ /// <summary>
+ /// Tests .NET to Java type mapping.
+ /// </summary>
+ [Test]
+ public void TestDotNetToJavaMapping()
+ {
+ Assert.AreEqual("java.lang.Boolean", JavaTypes.GetJavaTypeName(typeof(bool)));
+ Assert.AreEqual("java.lang.Boolean", JavaTypes.GetJavaTypeName(typeof(bool?)));
+
+ Assert.AreEqual("java.lang.Byte", JavaTypes.GetJavaTypeName(typeof(byte)));
+ Assert.AreEqual("java.lang.Byte", JavaTypes.GetJavaTypeName(typeof(byte?)));
+ Assert.AreEqual("java.lang.Byte", JavaTypes.GetJavaTypeName(typeof(sbyte)));
+ Assert.AreEqual("java.lang.Byte", JavaTypes.GetJavaTypeName(typeof(sbyte?)));
+
+ Assert.AreEqual("java.lang.Short", JavaTypes.GetJavaTypeName(typeof(short)));
+ Assert.AreEqual("java.lang.Short", JavaTypes.GetJavaTypeName(typeof(short?)));
+ Assert.AreEqual("java.lang.Short", JavaTypes.GetJavaTypeName(typeof(ushort)));
+ Assert.AreEqual("java.lang.Short", JavaTypes.GetJavaTypeName(typeof(ushort?)));
+
+ Assert.AreEqual("java.lang.Integer", JavaTypes.GetJavaTypeName(typeof(int)));
+ Assert.AreEqual("java.lang.Integer", JavaTypes.GetJavaTypeName(typeof(int?)));
+ Assert.AreEqual("java.lang.Integer", JavaTypes.GetJavaTypeName(typeof(uint)));
+ Assert.AreEqual("java.lang.Integer", JavaTypes.GetJavaTypeName(typeof(uint?)));
+
+ Assert.AreEqual("java.lang.Long", JavaTypes.GetJavaTypeName(typeof(long)));
+ Assert.AreEqual("java.lang.Long", JavaTypes.GetJavaTypeName(typeof(long?)));
+ Assert.AreEqual("java.lang.Long", JavaTypes.GetJavaTypeName(typeof(ulong)));
+ Assert.AreEqual("java.lang.Long", JavaTypes.GetJavaTypeName(typeof(ulong?)));
+
+ Assert.AreEqual("java.lang.Float", JavaTypes.GetJavaTypeName(typeof(float)));
+ Assert.AreEqual("java.lang.Float", JavaTypes.GetJavaTypeName(typeof(float?)));
+
+ Assert.AreEqual("java.lang.Double", JavaTypes.GetJavaTypeName(typeof(double)));
+ Assert.AreEqual("java.lang.Double", JavaTypes.GetJavaTypeName(typeof(double?)));
+
+ Assert.AreEqual("java.math.BigDecimal", JavaTypes.GetJavaTypeName(typeof(decimal)));
+ Assert.AreEqual("java.math.BigDecimal", JavaTypes.GetJavaTypeName(typeof(decimal?)));
+
+ Assert.AreEqual("java.lang.Character", JavaTypes.GetJavaTypeName(typeof(char)));
+ Assert.AreEqual("java.lang.Character", JavaTypes.GetJavaTypeName(typeof(char?)));
+
+ Assert.AreEqual("java.lang.String", JavaTypes.GetJavaTypeName(typeof(string)));
+
+ Assert.AreEqual("java.sql.Timestamp", JavaTypes.GetJavaTypeName(typeof(DateTime)));
+ Assert.AreEqual("java.sql.Timestamp", JavaTypes.GetJavaTypeName(typeof(DateTime?)));
+
+ Assert.AreEqual("java.util.UUID", JavaTypes.GetJavaTypeName(typeof(Guid)));
+ Assert.AreEqual("java.util.UUID", JavaTypes.GetJavaTypeName(typeof(Guid?)));
+ }
+
+ /// <summary>
+ /// Tests the Java to .NET type mapping.
+ /// </summary>
+ [Test]
+ public void TestJavaToDotNetMapping()
+ {
+ Assert.AreEqual(typeof(bool), JavaTypes.GetDotNetType("java.lang.Boolean"));
+ Assert.AreEqual(typeof(byte), JavaTypes.GetDotNetType("java.lang.Byte"));
+ Assert.AreEqual(typeof(short), JavaTypes.GetDotNetType("java.lang.Short"));
+ Assert.AreEqual(typeof(int), JavaTypes.GetDotNetType("java.lang.Integer"));
+ Assert.AreEqual(typeof(long), JavaTypes.GetDotNetType("java.lang.Long"));
+ Assert.AreEqual(typeof(float), JavaTypes.GetDotNetType("java.lang.Float"));
+ Assert.AreEqual(typeof(double), JavaTypes.GetDotNetType("java.lang.Double"));
+ Assert.AreEqual(typeof(decimal), JavaTypes.GetDotNetType("java.math.BigDecimal"));
+ Assert.AreEqual(typeof(char), JavaTypes.GetDotNetType("java.lang.Character"));
+ Assert.AreEqual(typeof(string), JavaTypes.GetDotNetType("java.lang.String"));
+ Assert.AreEqual(typeof(DateTime), JavaTypes.GetDotNetType("java.sql.Timestamp"));
+ Assert.AreEqual(typeof(Guid), JavaTypes.GetDotNetType("java.util.UUID"));
+
+ }
+
+ /// <summary>
+ /// Tests the indirect mapping check.
+ /// </summary>
+ [Test]
+ public void TestIndirectMappingCheck()
+ {
+ Assert.AreEqual(typeof(bool), JavaTypes.GetDirectlyMappedType(typeof(bool)));
+ Assert.AreEqual(typeof(bool?), JavaTypes.GetDirectlyMappedType(typeof(bool?)));
+ Assert.AreEqual(typeof(byte), JavaTypes.GetDirectlyMappedType(typeof(byte)));
+ Assert.AreEqual(typeof(byte?), JavaTypes.GetDirectlyMappedType(typeof(byte?)));
+ Assert.AreEqual(typeof(char), JavaTypes.GetDirectlyMappedType(typeof(char)));
+ Assert.AreEqual(typeof(char?), JavaTypes.GetDirectlyMappedType(typeof(char?)));
+ Assert.AreEqual(typeof(DateTime), JavaTypes.GetDirectlyMappedType(typeof(DateTime)));
+ Assert.AreEqual(typeof(DateTime?), JavaTypes.GetDirectlyMappedType(typeof(DateTime?)));
+ Assert.AreEqual(typeof(decimal), JavaTypes.GetDirectlyMappedType(typeof(decimal)));
+ Assert.AreEqual(typeof(decimal?), JavaTypes.GetDirectlyMappedType(typeof(decimal?)));
+ Assert.AreEqual(typeof(double), JavaTypes.GetDirectlyMappedType(typeof(double)));
+ Assert.AreEqual(typeof(double?), JavaTypes.GetDirectlyMappedType(typeof(double?)));
+ Assert.AreEqual(typeof(float), JavaTypes.GetDirectlyMappedType(typeof(float)));
+ Assert.AreEqual(typeof(float?), JavaTypes.GetDirectlyMappedType(typeof(float?)));
+ Assert.AreEqual(typeof(Guid), JavaTypes.GetDirectlyMappedType(typeof(Guid)));
+ Assert.AreEqual(typeof(Guid?), JavaTypes.GetDirectlyMappedType(typeof(Guid?)));
+ Assert.AreEqual(typeof(int), JavaTypes.GetDirectlyMappedType(typeof(int)));
+ Assert.AreEqual(typeof(int?), JavaTypes.GetDirectlyMappedType(typeof(int?)));
+ Assert.AreEqual(typeof(long), JavaTypes.GetDirectlyMappedType(typeof(long)));
+ Assert.AreEqual(typeof(long?), JavaTypes.GetDirectlyMappedType(typeof(long?)));
+ Assert.AreEqual(typeof(byte), JavaTypes.GetDirectlyMappedType(typeof(sbyte)));
+ Assert.AreEqual(typeof(byte), JavaTypes.GetDirectlyMappedType(typeof(sbyte?)));
+ Assert.AreEqual(typeof(short), JavaTypes.GetDirectlyMappedType(typeof(short)));
+ Assert.AreEqual(typeof(short?), JavaTypes.GetDirectlyMappedType(typeof(short?)));
+ Assert.AreEqual(typeof(string), JavaTypes.GetDirectlyMappedType(typeof(string)));
+ Assert.AreEqual(typeof(int), JavaTypes.GetDirectlyMappedType(typeof(uint)));
+ Assert.AreEqual(typeof(int), JavaTypes.GetDirectlyMappedType(typeof(uint?)));
+ Assert.AreEqual(typeof(long), JavaTypes.GetDirectlyMappedType(typeof(ulong)));
+ Assert.AreEqual(typeof(long), JavaTypes.GetDirectlyMappedType(typeof(ulong?)));
+ Assert.AreEqual(typeof(short), JavaTypes.GetDirectlyMappedType(typeof(ushort)));
+ Assert.AreEqual(typeof(short), JavaTypes.GetDirectlyMappedType(typeof(ushort?)));
+
+ // Arbitrary type.
+ Assert.AreEqual(typeof(JavaTypeMappingTest), JavaTypes.GetDirectlyMappedType(typeof(JavaTypeMappingTest)));
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/TypeResolverTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/TypeResolverTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/TypeResolverTest.cs
new file mode 100644
index 0000000..7d37584
--- /dev/null
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/TypeResolverTest.cs
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.Ignite.Core.Tests.Binary
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Reflection;
+ using Apache.Ignite.Core.Impl.Binary;
+ using Apache.Ignite.Core.Tests.TestDll;
+ using NUnit.Framework;
+
+ /// <summary>
+ /// <see cref="TypeResolver"/> tests.
+ /// </summary>
+ public class TypeResolverTest
+ {
+ /// <summary>
+ /// Tests generic type resolve.
+ /// </summary>
+ [Test]
+ public void TestGenerics()
+ {
+ var testTypes = new[]
+ {
+ typeof (TestGenericBinarizable<int>),
+ typeof (TestGenericBinarizable<string>),
+ typeof (TestGenericBinarizable<TestGenericBinarizable<int>>),
+ typeof (TestGenericBinarizable<List<Tuple<int, string>>>),
+ typeof (TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>),
+ typeof (List<TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>>),
+ typeof (TestGenericBinarizable<int, string>),
+ typeof (TestGenericBinarizable<int, TestGenericBinarizable<string>>),
+ typeof (TestGenericBinarizable<int, string, Type>),
+ typeof (TestGenericBinarizable<int, string, TestGenericBinarizable<int, string, Type>>)
+ };
+
+ foreach (var type in testTypes)
+ {
+ // Without assembly
+ var resolvedType = new TypeResolver().ResolveType(type.FullName);
+ Assert.AreEqual(type.FullName, resolvedType.FullName);
+
+ // With assembly
+ resolvedType = new TypeResolver().ResolveType(type.FullName, type.Assembly.FullName);
+ Assert.AreEqual(type.FullName, resolvedType.FullName);
+
+ // Assembly-qualified
+ resolvedType = new TypeResolver().ResolveType(type.AssemblyQualifiedName);
+ Assert.AreEqual(type.FullName, resolvedType.FullName);
+ }
+ }
+
+ /// <summary>
+ /// Tests loading a type from referenced assembly that is not yet loaded.
+ /// </summary>
+ [Test]
+ public void TestReferencedAssemblyLoading()
+ {
+ const string dllName = "Apache.Ignite.Core.Tests.TestDll";
+
+ const string typeName = "Apache.Ignite.Core.Tests.TestDll.TestClass";
+
+ // Check that the dll is not yet loaded
+ Assert.IsFalse(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName)));
+
+ // Check that the dll is referenced by current assembly
+ Assert.IsTrue(Assembly.GetExecutingAssembly().GetReferencedAssemblies()
+ .Any(x => x.FullName.StartsWith(dllName)));
+
+ // Check resolver
+ var type = new TypeResolver().ResolveType(typeName);
+
+ Assert.IsNotNull(type);
+ Assert.AreEqual(typeName, type.FullName);
+ Assert.IsNotNull(Activator.CreateInstance(type));
+
+ // At this moment the dll should be loaded
+ Assert.IsTrue(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName)));
+ }
+
+ /// <summary>
+ /// Unused method that forces C# compiler to include TestDll assembly reference.
+ /// Without this, compiler will remove the reference as unused.
+ /// However, since it is never called, TestDll does not get loaded.
+ /// </summary>
+ public void UnusedMethod()
+ {
+ Assert.IsNotNull(typeof(TestClass));
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheQueriesCodeConfigurationTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheQueriesCodeConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheQueriesCodeConfigurationTest.cs
index d5f98ac..7cb999f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheQueriesCodeConfigurationTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Query/CacheQueriesCodeConfigurationTest.cs
@@ -150,6 +150,11 @@ namespace Apache.Ignite.Core.Tests.Cache.Query
Assert.AreEqual(2, cursor.GetAll().Single().Key);
}
+ using (var cursor = cache.Query(new SqlQuery(typeof(AttributeQueryPerson), "salary > ?", 10)))
+ {
+ Assert.AreEqual(2, cursor.GetAll().Single().Key);
+ }
+
using (var cursor = cache.Query(new SqlQuery(typeof(AttributeQueryPerson), "Country = ?", "USA")))
{
Assert.AreEqual(1, cursor.GetAll().Single().Key);
@@ -186,6 +191,7 @@ namespace Apache.Ignite.Core.Tests.Cache.Query
{
Name = name;
Age = age;
+ Salary = age;
}
/// <summary>
@@ -214,6 +220,12 @@ namespace Apache.Ignite.Core.Tests.Cache.Query
/// </value>
[QuerySqlField]
public AttributeQueryAddress Address { get; set; }
+
+ /// <summary>
+ /// Gets or sets the salary.
+ /// </summary>
+ [QuerySqlField]
+ public decimal? Salary { get; set; }
}
/// <summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TypeResolverTest.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TypeResolverTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TypeResolverTest.cs
deleted file mode 100644
index a95ecd7..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TypeResolverTest.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests
-{
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using Apache.Ignite.Core.Impl.Binary;
- using Apache.Ignite.Core.Tests.TestDll;
- using NUnit.Framework;
-
- /// <summary>
- /// <see cref="TypeResolver"/> tests.
- /// </summary>
- public class TypeResolverTest
- {
- /// <summary>
- /// Tests generic type resolve.
- /// </summary>
- [Test]
- public void TestGenerics()
- {
- var testTypes = new[]
- {
- typeof (TestGenericBinarizable<int>),
- typeof (TestGenericBinarizable<string>),
- typeof (TestGenericBinarizable<TestGenericBinarizable<int>>),
- typeof (TestGenericBinarizable<List<Tuple<int, string>>>),
- typeof (TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>),
- typeof (List<TestGenericBinarizable<List<TestGenericBinarizable<List<Tuple<int, string>>>>>>),
- typeof (TestGenericBinarizable<int, string>),
- typeof (TestGenericBinarizable<int, TestGenericBinarizable<string>>),
- typeof (TestGenericBinarizable<int, string, Type>),
- typeof (TestGenericBinarizable<int, string, TestGenericBinarizable<int, string, Type>>)
- };
-
- foreach (var type in testTypes)
- {
- // Without assembly
- var resolvedType = new TypeResolver().ResolveType(type.FullName);
- Assert.AreEqual(type.FullName, resolvedType.FullName);
-
- // With assembly
- resolvedType = new TypeResolver().ResolveType(type.FullName, type.Assembly.FullName);
- Assert.AreEqual(type.FullName, resolvedType.FullName);
-
- // Assembly-qualified
- resolvedType = new TypeResolver().ResolveType(type.AssemblyQualifiedName);
- Assert.AreEqual(type.FullName, resolvedType.FullName);
- }
- }
-
- /// <summary>
- /// Tests loading a type from referenced assembly that is not yet loaded.
- /// </summary>
- [Test]
- public void TestReferencedAssemblyLoading()
- {
- const string dllName = "Apache.Ignite.Core.Tests.TestDll";
-
- const string typeName = "Apache.Ignite.Core.Tests.TestDll.TestClass";
-
- // Check that the dll is not yet loaded
- Assert.IsFalse(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName)));
-
- // Check that the dll is referenced by current assembly
- Assert.IsTrue(Assembly.GetExecutingAssembly().GetReferencedAssemblies()
- .Any(x => x.FullName.StartsWith(dllName)));
-
- // Check resolver
- var type = new TypeResolver().ResolveType(typeName);
-
- Assert.IsNotNull(type);
- Assert.AreEqual(typeName, type.FullName);
- Assert.IsNotNull(Activator.CreateInstance(type));
-
- // At this moment the dll should be loaded
- Assert.IsTrue(AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith(dllName)));
- }
-
- /// <summary>
- /// Unused method that forces C# compiler to include TestDll assembly reference.
- /// Without this, compiler will remove the reference as unused.
- /// However, since it is never called, TestDll does not get loaded.
- /// </summary>
- public void UnusedMethod()
- {
- Assert.IsNotNull(typeof(TestClass));
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fad9c92/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
----------------------------------------------------------------------
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
index 109d55f..7d71280 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/JavaTypes.cs
@@ -45,8 +45,7 @@ namespace Apache.Ignite.Core.Impl.Binary
{typeof (string), "java.lang.String"},
{typeof (decimal), "java.math.BigDecimal"},
{typeof (Guid), "java.util.UUID"},
- {typeof (DateTime), "java.sql.Timestamp"},
- {typeof (DateTime?), "java.sql.Timestamp"},
+ {typeof (DateTime), "java.sql.Timestamp"}
};
/** */
@@ -70,6 +69,9 @@ namespace Apache.Ignite.Core.Impl.Binary
if (type == null)
return null;
+ // Unwrap nullable.
+ type = Nullable.GetUnderlyingType(type) ?? type;
+
string res;
return NetToJava.TryGetValue(type, out res) ? res : null;
@@ -83,8 +85,9 @@ namespace Apache.Ignite.Core.Impl.Binary
if (type == null)
return;
- Type directType;
- if (!IndirectMappingTypes.TryGetValue(type, out directType))
+ var directType = GetDirectlyMappedType(type);
+
+ if (directType == type)
return;
log.Warn("{0}: Type '{1}' maps to Java type '{2}' using unchecked conversion. " +
@@ -94,6 +97,19 @@ namespace Apache.Ignite.Core.Impl.Binary
}
/// <summary>
+ /// Gets the compatible type that maps directly to Java.
+ /// </summary>
+ public static Type GetDirectlyMappedType(Type type)
+ {
+ // Unwrap nullable.
+ var unwrapType = Nullable.GetUnderlyingType(type) ?? type;
+
+ Type directType;
+
+ return IndirectMappingTypes.TryGetValue(unwrapType, out directType) ? directType : type;
+ }
+
+ /// <summary>
/// Gets .NET type that corresponds to specified Java type name.
/// </summary>
/// <param name="javaTypeName">Name of the java type.</param>