public override bool Execute()
        {
            if (!File.Exists(this.Source.ItemSpec))
            {
                Log.LogError(null, null, null, Source, 0, 0, 0, 0, $"file {this.Source} not found");
                return(false);
            }

            try
            {
                this.ReadConfig();

                Log.LogMessage($"Loading xml : {this.Source.ItemSpec}");

                var mapper = new TypeMapper(this.configuration.Mapping);

                var rootGen   = new LayoutRootGenerator(Namespace);
                var layoutGen = new LayoutHolderGenerator(mapper, Namespace);

                rootGen.Generate(this.OutputFile);
                var result = layoutGen.Generate(this.Source.ItemSpec, this.OutputFile);

                if (!result)
                {
                    File.SetLastWriteTime(OutputFile, DateTime.Now);
                    Log.LogMessage($"Skipping generation of {OutputFile} because there is not relevant change in {Source.ItemSpec}.");
                }

                return(true);
            }

            catch (XmlException xe)
            {
                Log.LogMessage("Error (xml): {0}", xe.Message);
                Log.LogError(null, null, null, Source, xe.LineNumber, xe.LinePosition, 0, 0, $"{xe.Message}");

                return(false);
            }
            catch (Exception e)
            {
                Log.LogMessage("Error: {0}", e.Message);
                Log.LogError(null, null, null, Source, 0, 0, 0, 0, $"{e.Message}");
                return(false);
            }
        }
        public override bool Execute()
        {
            if (!File.Exists(this.Source.ItemSpec))
            {
                Log.LogError(null, null, null, Source, 0, 0, 0, 0, $"file {this.Source} not found");
                return(false);
            }

            try
            {
                this.ReadConfig();

                Log.LogMessage($"Loading xml : {this.Source.ItemSpec}");

                var mapper = new TypeMapper(this.configuration.Mapping);

                var rootGen   = new LayoutRootGenerator(Namespace);
                var layoutGen = new LayoutHolderGenerator(mapper, Namespace);

                rootGen.Generate(this.OutputFile);
                layoutGen.Generate(this.Source.ItemSpec, this.OutputFile);

                return(true);
            }

            catch (XmlException xe)
            {
                Log.LogMessage("Error (xml): {0}", xe.Message);
                Log.LogError(null, null, null, Source, xe.LineNumber, xe.LinePosition, 0, 0, $"{xe.Message}");

                return(false);
            }
            catch (Exception e)
            {
                Log.LogMessage("Error: {0}", e.Message);
                Log.LogError(null, null, null, Source, 0, 0, 0, 0, $"{e.Message}");
                return(false);
            }
        }
Example #3
0
        /// <summary>
        /// Searches for all identifier declarations into the given axml.
        /// </summary>
        /// <returns>The declarations.</returns>
        /// <param name="element">Element.</param>
        public static ViewPropertyDeclaration[] ParseDeclarations(XElement element, ITypeMapper mapper)
        {
            var result = new List <ViewPropertyDeclaration>();

            var idatt = element.Attribute(AndroidNamespace + "id");

            if (idatt != null && idatt.Value.StartsWith(IdPrefix, StringComparison.Ordinal))
            {
                var isInclude = element.Name.LocalName == "include";
                var id        = idatt.Value.Substring(IdPrefix.Length);

                string type = null;

                if (isInclude)
                {
                    var layoutatt = element.Attribute("layout");
                    type = LayoutHolderGenerator.CreateClassName(layoutatt.Value.Replace("@layout/", ""));
                }
                else
                {
                    type = mapper.Get(element);
                }

                var source   = idatt.Value;
                var lineinfo = element as IXmlLineInfo;
                var line     = lineinfo?.LineNumber.ToString() ?? "?";
                result.Add(new ViewPropertyDeclaration(type, id, source, line, isInclude));
            }

            foreach (var child in element.Elements())
            {
                var childDeclarations = ParseDeclarations(child, mapper);
                result.AddRange(childDeclarations);
            }

            return(result.ToArray());
        }