From: Fang Xiaohui Date: Fri, 25 Mar 2022 08:44:36 +0000 (+0800) Subject: [XamlBuild] Remove the reference of Tizen.NUI.XamlBuild in NUITizenGallery X-Git-Tag: submit/tizen_6.5/20220328.151201~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=05831f3b443d50780e4aeff3345dbac7964ef241;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [XamlBuild] Remove the reference of Tizen.NUI.XamlBuild in NUITizenGallery --- diff --git a/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll b/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll index f7fec5e..2d55ad4 100644 Binary files a/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll and b/pkg/Tizen.NET.API9/xamlbuild/Tizen.NUI.XamlBuild.dll differ diff --git a/src/Tizen.NUI.XamlBuild/src/internal/Xaml/MarkupExtensions/BindingExtension.cs b/src/Tizen.NUI.XamlBuild/src/internal/Xaml/MarkupExtensions/BindingExtension.cs index 84c5628..3888d6a 100755 --- a/src/Tizen.NUI.XamlBuild/src/internal/Xaml/MarkupExtensions/BindingExtension.cs +++ b/src/Tizen.NUI.XamlBuild/src/internal/Xaml/MarkupExtensions/BindingExtension.cs @@ -20,6 +20,7 @@ using Tizen.NUI.Binding; using Tizen.NUI.EXaml; using Mono.Cecil; using Tizen.NUI.EXaml.Build.Tasks; +using Tizen.NUI.Xaml.Build.Tasks; namespace Tizen.NUI.Xaml { @@ -27,6 +28,7 @@ namespace Tizen.NUI.Xaml [AcceptEmptyServiceProvider] internal sealed class BindingExtension : IMarkupExtension { + public XmlType XmlType { get; set; } public string Path { get; set; } = Tizen.NUI.Binding.Binding.SelfPath; public BindingMode Mode { get; set; } = BindingMode.Default; @@ -52,8 +54,8 @@ namespace Tizen.NUI.Xaml { if (TypedBinding == null) { - var newTypeRef = module.ImportReference(typeof(Tizen.NUI.Binding.Binding)); - return new EXamlCreateObject(context, null, newTypeRef, new object[] { Path, ModeInEXaml, Converter, ConverterParameter, StringFormat, Source }); + var typeRef = XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.OnlyGetType, module, null); + return new EXamlCreateObject(context, null, typeRef, new object[] { Path, ModeInEXaml, Converter, ConverterParameter, StringFormat, Source }); } else { diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateArrayObject.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateArrayObject.cs index 2b3bdad..0cdc353 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateArrayObject.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateArrayObject.cs @@ -51,7 +51,7 @@ namespace Tizen.NUI.EXaml string ret = String.Format("({0} ({1} {2}))\n", eXamlContext.GetValueString((int)EXamlOperationType.CreateArrayObject), - eXamlContext.GetValueString(eXamlContext.GetTypeIndex(Type)), + eXamlContext.GetValueString(eXamlContext.GetTypeIndex(Type.Resolve())), itemsString); return ret; diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateObject.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateObject.cs index 682a0d8..ec4983c 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateObject.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXaml/EXamlCreateObject/EXamlCreateObject.cs @@ -166,11 +166,6 @@ namespace Tizen.NUI.EXaml public EXamlCreateObject(EXamlContext context, object instance, TypeReference type, object[] @params = null) : base(context) { - if (null == type?.Resolve()) - { - throw new Exception("Type can't be null when create object"); - } - Instance = instance; Type = type; diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlCreateObjectVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlCreateObjectVisitor.cs index eeb7493..8a39d41 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlCreateObjectVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlCreateObjectVisitor.cs @@ -67,7 +67,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks public void Visit(ElementNode node, INode parentNode) { - var typeref = Module.ImportReference(node.XmlType.GetTypeReference(Module, node)); + var typeref = Module.ImportReference(node.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, Module, node)); if (IsXaml2009LanguagePrimitive(node)) { @@ -143,7 +143,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks if (factoryMethodInfo == null) { - var typeExtensionRef = Module.ImportReference(node.XmlType.GetTypeExtensionReference(Module, node)); + var typeExtensionRef = Module.ImportReference(node.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.OnlyGetTypeExtension, Module, node)); typeExtensionRef = typeExtensionRef?.ResolveCached(); if (null != typeExtensionRef) @@ -286,10 +286,9 @@ namespace Tizen.NUI.EXaml.Build.Tasks if (typeref.FullName == "Tizen.NUI.Xaml.ArrayExtension") { typeref = Module.ImportReference(typeof(ArrayExtension)); - typedef = typeref.ResolveCached(); } - var accordingType = this.GetType().Assembly.GetType(typedef.FullName); + var accordingType = this.GetType().Assembly.GetType(typeref.FullName); if (null != accordingType && accordingType != typeof(Binding.Setter)) { @@ -632,7 +631,6 @@ namespace Tizen.NUI.EXaml.Build.Tasks case "System.TimeSpan": if (hasValue && TimeSpan.TryParse(valueString, CultureInfo.InvariantCulture, out TimeSpan outspan)) { - ret = outspan; } else @@ -678,7 +676,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks if ("System.Type" == valueType.FullName) { - var typeRef = XmlTypeExtensions.GetTypeReference(valueNode.Value as string, Module, node as BaseNode); + var typeRef = XmlTypeExtensions.GetTypeReference(valueNode.Value as string, Module, node as BaseNode, XmlTypeExtensions.ModeOfGetType.Both); context.Values[node] = new EXamlCreateObject(context, typeRef); } else diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlExpandMarkupsVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlExpandMarkupsVisitor.cs index dc153af..b34d925 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlExpandMarkupsVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlExpandMarkupsVisitor.cs @@ -182,7 +182,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks try { type = new XmlType(namespaceuri, name + "Extension", null); - type.GetTypeReference(contextProvider.Context.Module, null); + type.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, contextProvider.Context.Module, null); } catch (XamlParseException) { diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlSetPropertiesVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlSetPropertiesVisitor.cs index 5a990ac..7536020 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlSetPropertiesVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/EXamlSetPropertiesVisitor.cs @@ -65,10 +65,15 @@ namespace Tizen.NUI.EXaml.Build.Tasks public bool IsResourceDictionary(ElementNode node) { var parentVar = Context.Values[node] as EXamlCreateObject; - return null != parentVar - && - (parentVar.GetType().FullName == "Tizen.NUI.Binding.ResourceDictionary" - || parentVar.GetType().Resolve().BaseType?.FullName == "Tizen.NUI.Binding.ResourceDictionary"); + + if (null != parentVar && !parentVar.GetType().IsLocalType()) + { + return parentVar.GetType().FullName == "Tizen.NUI.Binding.ResourceDictionary" + || + parentVar.GetType().Resolve().BaseType?.FullName == "Tizen.NUI.Binding.ResourceDictionary"; + } + + return false; } ModuleDefinition Module { get; } @@ -286,15 +291,22 @@ namespace Tizen.NUI.EXaml.Build.Tasks internal static string GetContentProperty(TypeReference typeRef) { - var typeDef = typeRef.ResolveCached(); - var attributes = typeDef.CustomAttributes; - var attr = - attributes.FirstOrDefault(cad => ContentPropertyAttribute.ContentPropertyTypes.Contains(cad.AttributeType.FullName)); - if (attr != null) - return attr.ConstructorArguments[0].Value as string; - if (typeDef.BaseType == null) - return null; - return GetContentProperty(typeDef.BaseType); + if (typeRef.IsLocalType()) + { + return typeRef.GetContentPropertyNameOfLocalType(); + } + else + { + var typeDef = typeRef.ResolveCached(); + var attributes = typeDef.CustomAttributes; + var attr = + attributes.FirstOrDefault(cad => ContentPropertyAttribute.ContentPropertyTypes.Contains(cad.AttributeType.FullName)); + if (attr != null) + return attr.ConstructorArguments[0].Value as string; + if (typeDef.BaseType == null) + return null; + return GetContentProperty(typeDef.BaseType); + } } public static object ProvideValue(EXamlCreateObject instance, EXamlContext context, @@ -315,9 +327,10 @@ namespace Tizen.NUI.EXaml.Build.Tasks else if (instance.GetType().ImplementsGenericInterface("Tizen.NUI.Xaml.IMarkupExtension`1", out markupExtension, out genericArguments)) { var nodeValue = context.Values[node] as EXamlCreateObject; - if (nodeValue?.Instance is BindingExtension) + if (nodeValue?.Instance is BindingExtension bindingExtension) { - var newValue = (nodeValue.Instance as BindingExtension).ProvideValue(context, module); + bindingExtension.XmlType = new XmlType(node.XmlType.NamespaceUri, "Binding", node.XmlType.TypeArguments); + var newValue = bindingExtension.ProvideValue(context, module); return newValue; } else if (nodeValue?.Instance is DynamicResourceExtension) @@ -436,12 +449,42 @@ namespace Tizen.NUI.EXaml.Build.Tasks return properties; } + private static bool SetPropertyValueToLocalType(EXamlCreateObject parent, XmlName propertyName, INode valueNode, EXamlContext context) + { + if (parent.Instance is Tizen.NUI.Xaml.Build.Tasks.ArrayExtension arrayExtension) + { + if ("Type" == propertyName.LocalName) + { + var value = context.Values[valueNode] as EXamlCreateObject; + if (null != value) + { + arrayExtension.Type = value.Instance as TypeReference; + parent.IsValid = false; + } + } + else if ("Items" == propertyName.LocalName) + { + arrayExtension.Items = context.Values[valueNode]; + parent.IsValid = false; + } + + return true; + } + + return false; + } + public static void SetPropertyValue(EXamlCreateObject parent, XmlName propertyName, INode valueNode, EXamlContext context, IXmlLineInfo iXmlLineInfo) { var module = context.Module; var localName = propertyName.LocalName; bool attached; + if (SetPropertyValueToLocalType(parent, propertyName, valueNode, context)) + { + return; + } + var bpRef = GetBindablePropertyReference(parent, propertyName.NamespaceURI, ref localName, out attached, context, iXmlLineInfo); //If the target is an event, connect @@ -667,7 +710,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks if (implicitOperator != null) return true; - return valueInstance.GetType().InheritsFromOrImplements(XamlTask.bindingNameSpace + ".BindingBase"); + return valueInstance.GetType().InheritsFromOrImplements(module.ImportReference((XamlCTask.bindingAssemblyName, XamlCTask.bindingNameSpace, "BindingBase"))); } static void SetBinding(EXamlCreateObject parent, MemberReference bpRef, IElementNode elementNode, IXmlLineInfo iXmlLineInfo, EXamlContext context) @@ -816,6 +859,11 @@ namespace Tizen.NUI.EXaml.Build.Tasks { return true; } + + if ("System.Type" == valueTypeRef.FullName && "Mono.Cecil.TypeReference" == propertyType.FullName) + { + return true; + } } return false; @@ -967,6 +1015,11 @@ namespace Tizen.NUI.EXaml.Build.Tasks static Dictionary> resourceNamesInUse = new Dictionary>(); static bool CanAddToResourceDictionary(EXamlCreateObject parent, TypeReference collectionType, IElementNode node, IXmlLineInfo lineInfo, EXamlContext context) { + if (collectionType.IsLocalType()) + { + return false; + } + if ( collectionType.FullName != "Tizen.NUI.Binding.ResourceDictionary" && collectionType.ResolveCached().BaseType?.FullName != "Tizen.NUI.Binding.ResourceDictionary") return false; @@ -1087,7 +1140,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks { var typename = localname.Substring(0, dotIdx); localname = localname.Substring(dotIdx + 1); - elementType = new XmlType(namespaceURI, typename, null).GetTypeReference(context.Module, lineInfo); + elementType = new XmlType(namespaceURI, typename, null).GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, context.Module, lineInfo); return true; } return false; @@ -1096,7 +1149,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks static void SetDataTemplate(ElementNode parentNode, ElementNode rootnode, EXamlContext parentContext, IXmlLineInfo xmlLineInfo) { - var typeref = parentContext.Module.ImportReference(rootnode.XmlType.GetTypeReference(parentContext.Module, rootnode)); + var typeref = parentContext.Module.ImportReference(rootnode.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, parentContext.Module, rootnode)); var visitorContext = new EXamlContext(typeref.ResolveCached(), typeref.Module); rootnode.Accept(new XamlNodeVisitor((node, parent) => node.Parent = parent), null); @@ -1110,7 +1163,7 @@ namespace Tizen.NUI.EXaml.Build.Tasks var eXamlString = visitorContext.GenerateEXamlString(); - var parentTyperef = parentContext.Module.ImportReference(parentNode.XmlType.GetTypeReference(parentContext.Module, parentNode)); + var parentTyperef = parentContext.Module.ImportReference(parentNode.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, parentContext.Module, parentNode)); if (parentContext.Values[parentNode] is EXamlCreateObject eXamlObject) { diff --git a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/Utility/EXamlUtility.cs b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/Utility/EXamlUtility.cs index fb108d3..ee4ac84 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/Utility/EXamlUtility.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/EXamlBuild/Utility/EXamlUtility.cs @@ -29,6 +29,17 @@ namespace Tizen.NUI.EXaml { return typeReference1 == typeReference2; } + else if (typeReference1.IsArray || typeReference2.IsArray) + { + if (typeReference1.IsArray != typeReference2.IsArray) + { + return false; + } + else + { + return typeReference1.Resolve() == typeReference2.Resolve(); + } + } else if (typeReference1.Resolve() != typeReference2.Resolve()) { return false; @@ -62,7 +73,6 @@ namespace Tizen.NUI.EXaml return false; } } - else { return true; diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/BindablePropertyConverter.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/BindablePropertyConverter.cs index 772301c..c4cc2c4 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/BindablePropertyConverter.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/BindablePropertyConverter.cs @@ -78,7 +78,7 @@ namespace Tizen.NUI.Xaml.Core.XamlC if (typeName == null || propertyName == null) throw new XamlParseException($"Cannot convert \"{value}\" into {typeof(BindableProperty)}", node); - var typeRef = XmlTypeExtensions.GetTypeReference(typeName, module, node); + var typeRef = XmlTypeExtensions.GetTypeReference(typeName, module, node, XmlTypeExtensions.ModeOfGetType.Both); if (typeRef == null) throw new XamlParseException($"Can't resolve {typeName}", node); bpRef = GetBindablePropertyFieldReference(typeRef, propertyName, module); diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/TypeTypeConverter.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/TypeTypeConverter.cs index 4c9df8d..b61dae2 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/TypeTypeConverter.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledConverters/TypeTypeConverter.cs @@ -47,7 +47,7 @@ namespace Tizen.NUI.Xaml.Core.XamlC else xmlType = new XmlType(node.NamespaceResolver.LookupNamespace(""), split[0], null); - var typeRef = xmlType.GetTypeReference(module, (IXmlLineInfo)node, true); + var typeRef = xmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, module, (IXmlLineInfo)node, true); if (typeRef == null) goto error; diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/StaticExtension.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/StaticExtension.cs index 59b97ff..c15bfe3 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/StaticExtension.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/StaticExtension.cs @@ -45,7 +45,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks var typename = member.Substring(0, dotIdx); var membername = member.Substring(dotIdx + 1); - var typeRef = module.ImportReference(XmlTypeExtensions.GetTypeReference(typename, module, node as BaseNode)); + var typeRef = module.ImportReference(XmlTypeExtensions.GetTypeReference(typename, module, node as BaseNode, XmlTypeExtensions.ModeOfGetType.Both)); var fieldRef = GetFieldReference(typeRef, membername, module); var propertyDef = GetPropertyDefinition(typeRef, membername, module); @@ -117,7 +117,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks var typename = member.Substring(0, dotIdx); var membername = member.Substring(dotIdx + 1); - var typeRef = module.ImportReference(XmlTypeExtensions.GetTypeReference(typename, module, node as BaseNode)); + var typeRef = module.ImportReference(XmlTypeExtensions.GetTypeReference(typename, module, node as BaseNode, XmlTypeExtensions.ModeOfGetType.Both)); var fieldRef = GetFieldReference(typeRef, membername, module); var propertyDef = GetPropertyDefinition(typeRef, membername, module); diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/TypeExtension.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/TypeExtension.cs index af96136..8e7f26a 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/TypeExtension.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CompiledMarkupExtensions/TypeExtension.cs @@ -51,7 +51,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks node.CollectionItems.Clear(); } - var typeref = module.ImportReference(XmlTypeExtensions.GetTypeReference(valueNode.Value as string, module, node as BaseNode)); + var typeref = module.ImportReference(XmlTypeExtensions.GetTypeReference(valueNode.Value as string, module, node as BaseNode, XmlTypeExtensions.ModeOfGetType.Both)); context.TypeExtensions[node] = typeref ?? throw new XamlParseException($"Can't resolve type `{valueNode.Value}'.", node as IXmlLineInfo); @@ -82,11 +82,11 @@ namespace Tizen.NUI.Xaml.Build.Tasks node.CollectionItems.Clear(); } - var typeref = module.ImportReference(XmlTypeExtensions.GetTypeReference(valueNode.Value as string, module, node as BaseNode)); + var typeref = module.ImportReference(XmlTypeExtensions.GetTypeReference(valueNode.Value as string, module, node as BaseNode, XmlTypeExtensions.ModeOfGetType.Both)); context.TypeExtensions[node] = typeref ?? throw new XamlParseException($"Can't resolve type `{valueNode.Value}'.", node as IXmlLineInfo); - return new EXamlCreateObject(context, typeref, module.ImportReference(typeof(TypeReference))); + return new EXamlCreateObject(context, typeref, module.ImportReference(typeof(System.Type))) { IsValid = false,}; } } } diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CreateObjectVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CreateObjectVisitor.cs index 0573524..d963f22 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CreateObjectVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/CreateObjectVisitor.cs @@ -65,7 +65,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks public void Visit(ElementNode node, INode parentNode) { - var typeref = Module.ImportReference(node.XmlType.GetTypeReference(Module, node)); + var typeref = Module.ImportReference(node.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, Module, node)); TypeDefinition typedef = typeref.ResolveCached(); if (IsXaml2009LanguagePrimitive(node)) @@ -138,7 +138,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks md.MatchXArguments(node, typeref, Module, Context)); if (factoryMethodInfo == null) { - var typeExtensionRef = Module.ImportReference(node.XmlType.GetTypeExtensionReference(Module, node)); + var typeExtensionRef = Module.ImportReference(node.XmlType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.OnlyGetTypeExtension, Module, node)); typeExtensionRef = typeExtensionRef?.ResolveCached(); if (null != typeExtensionRef?.Resolve()) @@ -358,7 +358,6 @@ namespace Tizen.NUI.Xaml.Build.Tasks foreach (var prop in node.Properties) if (!node.SkipProperties.Contains(prop.Key)) node.SkipProperties.Add(prop.Key); - node.CollectionItems.Clear(); return; } diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/ExpandMarkupsVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/ExpandMarkupsVisitor.cs index 2b8c851..840b1ad 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/ExpandMarkupsVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/ExpandMarkupsVisitor.cs @@ -181,7 +181,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks try { type = new XmlType(namespaceuri, name + "Extension", null); - type.GetTypeReference(contextProvider.Context.Module, null); + type.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, contextProvider.Context.Module, null); } catch (XamlParseException) { diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/SetPropertiesVisitor.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/SetPropertiesVisitor.cs index 1aed1d0..15863d8 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/SetPropertiesVisitor.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/SetPropertiesVisitor.cs @@ -156,7 +156,11 @@ namespace Tizen.NUI.Xaml.Build.Tasks bool isAdded = false; - if (CanAddToResourceDictionary(parentVar, parentVar.VariableType, node, node, Context)) + if (parentVar.VariableType.IsArray) + { + isAdded = true; + } + else if (CanAddToResourceDictionary(parentVar, parentVar.VariableType, node, node, Context)) { Context.IL.Emit(Ldloc, parentVar); Context.IL.Append(AddToResourceDictionary(node, node, Context)); @@ -434,7 +438,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks var dtXType = new XmlType(namespaceuri, dataType, null); - var tSourceRef = dtXType.GetTypeReference(module, (IXmlLineInfo)node); + var tSourceRef = dtXType.GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, module, (IXmlLineInfo)node); if (tSourceRef == null) yield break; //throw @@ -1421,7 +1425,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks { var typename = localname.Substring(0, dotIdx); localname = localname.Substring(dotIdx + 1); - elementType = new XmlType(namespaceURI, typename, null).GetTypeReference(context.Body.Method.Module, lineInfo); + elementType = new XmlType(namespaceURI, typename, null).GetTypeReference(XmlTypeExtensions.ModeOfGetType.Both, context.Body.Method.Module, lineInfo); return true; } return false; diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/TypeReferenceExtensions.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/TypeReferenceExtensions.cs index 914afc4..d0a3b24 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/TypeReferenceExtensions.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/TypeReferenceExtensions.cs @@ -240,6 +240,11 @@ namespace Tizen.NUI.Xaml.Build.Tasks { return true; } + else if (typeRef.IsLocalType()) + { + //Avoid to resolve the type reference of XamlBuild + return false; + } else { var typeDef = typeRef.ResolveCached(); @@ -376,6 +381,11 @@ namespace Tizen.NUI.Xaml.Build.Tasks public static IEnumerable> GetMethods(this TypeReference typeRef, Func predicate, ModuleDefinition module) { + if (typeRef.IsLocalType()) + { + yield break; + } + var typeDef = typeRef.ResolveCached(); foreach (var method in typeDef.Methods.Where(md => predicate(md, typeRef))) yield return new Tuple(method, typeRef); @@ -459,6 +469,26 @@ namespace Tizen.NUI.Xaml.Build.Tasks return self.GetElementType().MakeGenericInstanceType(args.ToArray()); } + public static string GetContentPropertyNameOfLocalType(this TypeReference typeReference) + { + if ("Tizen.NUI.Xaml.Build.Tasks.ArrayExtension" == typeReference.FullName) + { + return "Items"; + } + + return null; + } + + public static bool IsLocalType(this TypeReference typeReference) + { + if ("Tizen.NUI.Xaml.Build.Tasks.ArrayExtension" == typeReference.FullName) + { + return true; + } + + return false; + } + static Dictionary resolves = new Dictionary(); public static TypeDefinition ResolveCached(this TypeReference typeReference) { diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlCTask.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlCTask.cs index 62cade4..8827aff 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlCTask.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XamlCTask.cs @@ -509,7 +509,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks if (null != e.StackTrace) { - LoggingHelper.LogMessage(Low, e.StackTrace); + LoggingHelper.LogError(e.StackTrace); } return false; diff --git a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XmlTypeExtensions.cs b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XmlTypeExtensions.cs index 8941805..d3265f3 100755 --- a/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XmlTypeExtensions.cs +++ b/src/Tizen.NUI.XamlBuild/src/public/XamlBuild/XmlTypeExtensions.cs @@ -26,15 +26,22 @@ namespace Tizen.NUI.Xaml.Build.Tasks { static class XmlTypeExtensions { + internal enum ModeOfGetType + { + OnlyGetType, + OnlyGetTypeExtension, + Both + } + static internal IList s_xmlnsDefinitions; static void GatherXmlnsDefinitionAttributes() { //this could be extended to look for [XmlnsDefinition] in all assemblies - s_xmlnsDefinitions = XamlTask.s_xmlnsDefinitions.OrderByDescending(a => a.Level).ToList(); ; + s_xmlnsDefinitions = XamlTask.s_xmlnsDefinitions.OrderByDescending(a => a.Level).ToList(); } - public static TypeReference GetTypeReference(string xmlType, ModuleDefinition module, BaseNode node) + public static TypeReference GetTypeReference(string xmlType, ModuleDefinition module, BaseNode node, ModeOfGetType mode) { var split = xmlType.Split(':'); if (split.Length > 2) @@ -49,15 +56,15 @@ namespace Tizen.NUI.Xaml.Build.Tasks name = split[0]; } var namespaceuri = node.NamespaceResolver.LookupNamespace(prefix) ?? ""; - return GetTypeReference(new XmlType(namespaceuri, name, null), module, node as IXmlLineInfo); + return GetTypeReference(new XmlType(namespaceuri, name, null), mode, module, node as IXmlLineInfo); } - public static TypeReference GetTypeReference(string namespaceURI, string typename, ModuleDefinition module, IXmlLineInfo xmlInfo) + public static TypeReference GetTypeReference(string namespaceURI, string typename, ModuleDefinition module, IXmlLineInfo xmlInfo, ModeOfGetType info) { - return new XmlType(namespaceURI, typename, null).GetTypeReference(module, xmlInfo); + return new XmlType(namespaceURI, typename, null).GetTypeReference(info, module, xmlInfo); } - public static TypeReference GetTypeReference(this XmlType xmlType, ModuleDefinition module, IXmlLineInfo xmlInfo, bool fromAllAssembly = false) + public static TypeReference GetTypeReference(this XmlType xmlType, ModeOfGetType mode, ModuleDefinition module, IXmlLineInfo xmlInfo, bool fromAllAssembly = false) { if (s_xmlnsDefinitions == null) GatherXmlnsDefinitionAttributes(); @@ -106,106 +113,22 @@ namespace Tizen.NUI.Xaml.Build.Tasks }); } - lookupNames.Add(elementName); - lookupNames.Add(elementName + "Extension"); - - for (var i = 0; i < lookupNames.Count; i++) - { - var name = lookupNames[i]; - if (name.Contains(":")) - name = name.Substring(name.LastIndexOf(':') + 1); - if (typeArguments != null) - name += "`" + typeArguments.Count; //this will return an open generic Type - lookupNames[i] = name; - } - - TypeReference type = null; - foreach (var asm in lookupAssemblies) + switch (mode) { - if (type != null) + case ModeOfGetType.OnlyGetType: + lookupNames.Add(elementName); break; - foreach (var name in lookupNames) - { - if (type != null) - break; - - var clrNamespace = asm.ClrNamespace; - var typeName = name.Replace('+', '/'); //Nested types - var idx = typeName.LastIndexOf('.'); - if (idx >= 0) { - clrNamespace += '.' + typeName.Substring(0, typeName.LastIndexOf('.')); - typeName = typeName.Substring(typeName.LastIndexOf('.') + 1); - } - type = module.GetTypeDefinition((asm.AssemblyName, clrNamespace, typeName)); - } - } - - if (type != null && typeArguments != null && type.HasGenericParameters) - { - type = - module.ImportReference(type) - .MakeGenericInstanceType(typeArguments.Select(x => GetTypeReference(x, module, xmlInfo)).ToArray()); - } - - if (type == null) - throw new XamlParseException(string.Format("Type {0} not found in xmlns {1}", elementName, namespaceURI), xmlInfo); - - return module.ImportReference(type); - } - - public static TypeReference GetTypeExtensionReference(this XmlType xmlType, ModuleDefinition module, IXmlLineInfo xmlInfo, bool fromAllAssembly = false) - { - if (s_xmlnsDefinitions == null) - GatherXmlnsDefinitionAttributes(); - - var namespaceURI = xmlType.NamespaceUri; - var elementName = xmlType.Name; - var typeArguments = xmlType.TypeArguments; - - if (elementName.Contains("-")) - { - elementName = elementName.Replace('-', '+'); - } - - var lookupAssemblies = new List(); - var lookupNames = new List(); - - if (true == fromAllAssembly) - { - foreach (var xmlnsDef in s_xmlnsDefinitions) - { - lookupAssemblies.Add(xmlnsDef); - } - } - else - { - foreach (var xmlnsDef in s_xmlnsDefinitions) - { - if (xmlnsDef.XmlNamespace != namespaceURI) - continue; - lookupAssemblies.Add(xmlnsDef); - } - } - - if (lookupAssemblies.Count == 0) - { - string ns; - string typename; - string asmstring; - string targetPlatform; + case ModeOfGetType.OnlyGetTypeExtension: + lookupNames.Add(elementName + "Extension"); + break; - XmlnsHelper.ParseXmlns(namespaceURI, out typename, out ns, out asmstring, out targetPlatform); - asmstring = asmstring ?? module.Assembly.Name.Name; - if (ns != null) - lookupAssemblies.Add(new XmlnsDefinitionAttribute(namespaceURI, ns, 0) - { - AssemblyName = asmstring - }); + case ModeOfGetType.Both: + lookupNames.Add(elementName); + lookupNames.Add(elementName + "Extension"); + break; } - lookupNames.Add(elementName + "Extension"); - for (var i = 0; i < lookupNames.Count; i++) { var name = lookupNames[i]; @@ -229,17 +152,11 @@ namespace Tizen.NUI.Xaml.Build.Tasks var clrNamespace = asm.ClrNamespace; var typeName = name.Replace('+', '/'); //Nested types var idx = typeName.LastIndexOf('.'); - if (idx >= 0) - { + if (idx >= 0) { clrNamespace += '.' + typeName.Substring(0, typeName.LastIndexOf('.')); typeName = typeName.Substring(typeName.LastIndexOf('.') + 1); } type = module.GetTypeDefinition((asm.AssemblyName, clrNamespace, typeName)); - - if (null == type) - { - type = module.GetTypeDefinition((module.Assembly.Name.Name, clrNamespace, typeName)); - } } } @@ -247,7 +164,7 @@ namespace Tizen.NUI.Xaml.Build.Tasks { type = module.ImportReference(type) - .MakeGenericInstanceType(typeArguments.Select(x => GetTypeReference(x, module, xmlInfo)).ToArray()); + .MakeGenericInstanceType(typeArguments.Select(x => GetTypeReference(x, mode, module, xmlInfo)).ToArray()); } if (type == null) diff --git a/src/Tizen.NUI/src/internal/EXaml/Operation/CreateArrayObject.cs b/src/Tizen.NUI/src/internal/EXaml/Operation/CreateArrayObject.cs index 9f8746e..0d17015 100755 --- a/src/Tizen.NUI/src/internal/EXaml/Operation/CreateArrayObject.cs +++ b/src/Tizen.NUI/src/internal/EXaml/Operation/CreateArrayObject.cs @@ -42,8 +42,8 @@ namespace Tizen.NUI.EXaml public void Do() { - var type = globalDataList.GatheredTypes[typeIndex]; - var array = Array.CreateInstance(type, null == items ? 0 : items.Count); + var type = typeIndex < 0 ? GetBaseType.GetBaseTypeByIndex(typeIndex) : globalDataList.GatheredTypes[typeIndex]; + IList array = Array.CreateInstance(type, null == items ? 0 : items.Count); if (null != items) { @@ -51,7 +51,11 @@ namespace Tizen.NUI.EXaml { if (items[i] is Instance instance) { - ((IList)array)[i] = globalDataList.GatheredInstances[instance.Index]; + array[i] = globalDataList.GatheredInstances[instance.Index]; + } + else + { + array[i] = items[i]; } } } diff --git a/test/NUITizenGallery/Examples/CarouselTest/CarouselViewFocusTestPage.xaml b/test/NUITizenGallery/Examples/CarouselTest/CarouselViewFocusTestPage.xaml old mode 100644 new mode 100755 index d9c35b2..0d910e4 --- a/test/NUITizenGallery/Examples/CarouselTest/CarouselViewFocusTestPage.xaml +++ b/test/NUITizenGallery/Examples/CarouselTest/CarouselViewFocusTestPage.xaml @@ -15,7 +15,7 @@ > + HeightSpecification="{Static LayoutParamPolicies.MatchParent}"> diff --git a/test/NUITizenGallery/Examples/MenuTest/MenuTestMenu.xaml.cs b/test/NUITizenGallery/Examples/MenuTest/MenuTestMenu.xaml.cs old mode 100644 new mode 100755 index 40a2fd8..8859a0e --- a/test/NUITizenGallery/Examples/MenuTest/MenuTestMenu.xaml.cs +++ b/test/NUITizenGallery/Examples/MenuTest/MenuTestMenu.xaml.cs @@ -27,12 +27,11 @@ namespace NUITizenGallery InitializeComponent(); // FIXME: For now, menuItem1, 2, 3, 4 handles are not found by FindByName. - /* + menuItem1.Clicked += MenuItem1Clicked; menuItem2.Clicked += MenuItem2Clicked; menuItem3.Clicked += MenuItem3Clicked; menuItem4.Clicked += MenuItem4Clicked; - */ } private void MenuItem1Clicked(object sender, ClickedEventArgs args) diff --git a/test/NUITizenGallery/NUITizenGallery.csproj b/test/NUITizenGallery/NUITizenGallery.csproj index 2b12966..9b78267 100755 --- a/test/NUITizenGallery/NUITizenGallery.csproj +++ b/test/NUITizenGallery/NUITizenGallery.csproj @@ -465,16 +465,16 @@ - - - - - True + 2 + True + + +