[NUI] Sync dalihub and Samsung TizenFX (#338)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / Xaml / MarkupExtensions / StaticResourceExtension.cs
index 9218b4c..d2ad139 100755 (executable)
@@ -42,41 +42,44 @@ namespace Tizen.NUI.Xaml
             var pi = valueProvider.TargetProperty as PropertyInfo;
             var propertyType = bp?.ReturnType ?? pi?.PropertyType;
             if (propertyType == null) {
-                if (resource.GetType().GetTypeInfo().IsGenericType && (resource.GetType().GetGenericTypeDefinition() == typeof(OnPlatform<>) || resource.GetType().GetGenericTypeDefinition() == typeof(OnIdiom<>))) {
-                    // This is only there to support our backward compat story with pre 2.3.3 compiled Xaml project who was not providing TargetProperty
-                    var method = resource.GetType().GetRuntimeMethod("op_Implicit", new[] { resource.GetType() });
-                    resource = method.Invoke(null, new[] { resource });
+                if (resource != null) {
+                    if (resource.GetType().GetTypeInfo().IsGenericType && (resource.GetType().GetGenericTypeDefinition() == typeof(OnPlatform<>) || resource.GetType().GetGenericTypeDefinition() == typeof(OnIdiom<>))) {
+                        // This is only there to support our backward compat story with pre 2.3.3 compiled Xaml project who was not providing TargetProperty
+                        var method = resource.GetType().GetRuntimeMethod("op_Implicit", new[] { resource.GetType() });
+                        resource = method.Invoke(null, new[] { resource });
+                    }
                 }
                 return resource;
             }
             if (propertyType.IsAssignableFrom(resource?.GetType()))
                 return resource;
-            var implicit_op =  resource.GetType().GetImplicitConversionOperator(fromType: resource.GetType(), toType: propertyType)
-                            ?? propertyType.GetImplicitConversionOperator(fromType: resource.GetType(), toType: propertyType);
+            var implicit_op =  resource?.GetType().GetImplicitConversionOperator(fromType: resource?.GetType(), toType: propertyType)
+                            ?? propertyType.GetImplicitConversionOperator(fromType: resource?.GetType(), toType: propertyType);
             if (implicit_op != null)
                 return implicit_op.Invoke(resource, new [] { resource });
 
-            //Special case for https://bugzilla.xamarin.com/show_bug.cgi?id=59818
-            //On OnPlatform, check for an opImplicit from the targetType
-            if (   Device.Flags != null
-                && Device.Flags.Contains("xamlDoubleImplicitOpHack")
-                && resource.GetType().GetTypeInfo().IsGenericType
-                && (resource.GetType().GetGenericTypeDefinition() == typeof(OnPlatform<>))) {
-                var tType = resource.GetType().GenericTypeArguments[0];
-                var opImplicit = tType.GetImplicitConversionOperator(fromType: tType, toType: propertyType)
-                                ?? propertyType.GetImplicitConversionOperator(fromType: tType, toType: propertyType);
+            if (resource != null) { 
+                //Special case for https://bugzilla.xamarin.com/show_bug.cgi?id=59818
+                //On OnPlatform, check for an opImplicit from the targetType
+                if (   Device.Flags != null
+                    && Device.Flags.Contains("xamlDoubleImplicitOpHack")
+                    && resource.GetType().GetTypeInfo().IsGenericType
+                    && (resource.GetType().GetGenericTypeDefinition() == typeof(OnPlatform<>))) {
+                    var tType = resource.GetType().GenericTypeArguments[0];
+                    var opImplicit = tType.GetImplicitConversionOperator(fromType: tType, toType: propertyType)
+                                    ?? propertyType.GetImplicitConversionOperator(fromType: tType, toType: propertyType);
 
-                if (opImplicit != null) {
-                    //convert the OnPlatform<T> to T
-                    var opPlatformImplicitConversionOperator = resource.GetType().GetImplicitConversionOperator(fromType: resource.GetType(), toType: tType);
-                    resource = opPlatformImplicitConversionOperator?.Invoke(null, new[] { resource });
+                    if (opImplicit != null) {
+                        //convert the OnPlatform<T> to T
+                        var opPlatformImplicitConversionOperator = resource?.GetType().GetImplicitConversionOperator(fromType: resource?.GetType(), toType: tType);
+                        resource = opPlatformImplicitConversionOperator?.Invoke(null, new[] { resource });
 
-                    //and convert to toType
-                    resource = opImplicit.Invoke(null, new[] { resource });
-                    return resource;
+                        //and convert to toType
+                        resource = opImplicit.Invoke(null, new[] { resource });
+                        return resource;
+                    }
                 }
             }
-
             return resource;
         }
 
@@ -88,4 +91,4 @@ namespace Tizen.NUI.Xaml
             return resource;
         }
     }
-}
\ No newline at end of file
+}