Пример #1
0
        private string GetMetaName(IEntity member)
        {
            string name = null;

            if (TransformCtx.GetEntityName != null)
            {
                name = TransformCtx.GetEntityName(member);
            }

            if (name == null)
            {
                switch (member.SymbolKind)
                {
                case SymbolKind.Property: {
                    name = XmlMetaMaker.GetPropertyName((IProperty)member);
                    break;
                }

                case SymbolKind.Method: {
                    name = XmlMetaMaker.GetMethodName((IMethod)member);
                    break;
                }
                }
            }

            if (name != null)
            {
                if (Helpers.IsReservedWord(name))
                {
                    throw new System.Exception("GetMetaName[{0}, {1}, {2}] IsReservedWord".F(name, member.Name, member.DeclaringType.FullName));
                }
            }

            return(name);
        }
Пример #2
0
        public virtual string GetCustomTypeName(TypeDefinition type, IEmitter emitter)
        {
            string name = XmlMetaMaker.GetCustomName(type);

            if (!string.IsNullOrEmpty(name))
            {
                return(name);
            }
            return(null);
        }
Пример #3
0
        public virtual string GetInline(IEntity entity)
        {
            switch (entity.SymbolKind)
            {
            case SymbolKind.Field: {
                IField field = (IField)entity;
                return(XmlMetaMaker.GetFieldInline(field));
            }

            case SymbolKind.Property: {
                IProperty property   = (IProperty)entity;
                bool      isGetOrSet = !IsAssignment;
                return(XmlMetaMaker.GetPropertyInline(property, isGetOrSet));
            }

            case SymbolKind.Method: {
                IMethod method = (IMethod)entity;
                return(XmlMetaMaker.GetMethodInline(method));
            }
            }
            return(null);
        }
Пример #4
0
        public Dictionary <string, string> Translate()
        {
            var logger = this.Log;

            logger.Info("Translating...");

            var config = this.ReadConfig();

            if (config.LoggerLevel.HasValue)
            {
                var l = logger as Bridge.Translator.Logging.Logger;
                if (l != null)
                {
                    l.LoggerLevel = config.LoggerLevel.Value;
                }
            }

            logger.Trace("Read config file: " + Utils.AssemblyConfigHelper.ConfigToString(config));

            if (!string.IsNullOrWhiteSpace(config.Configuration))
            {
                this.Configuration = config.Configuration;
                logger.Trace("Set configuration: " + this.Configuration);
            }

            if (config.DefineConstants != null && config.DefineConstants.Count > 0)
            {
                this.DefineConstants.AddRange(config.DefineConstants);
                this.DefineConstants = this.DefineConstants.Distinct().ToList();

                logger.Trace("Set constants: " + string.Join(",", this.DefineConstants));
            }

            if (this.FolderMode)
            {
                this.ReadFolderFiles();
                logger.Trace("Read folder files");
            }
            else
            {
                this.ReadProjectFile();
                logger.Trace("Read project file");

                if (this.Rebuild || !File.Exists(this.AssemblyLocation))
                {
                    this.BuildAssembly();
                    logger.Trace("Build assembly");
                }
            }

            var references = this.InspectReferences();

            this.References = references;

            this.Plugins = Bridge.Translator.Plugins.GetPlugins(this, config, logger);
            this.Plugins.OnConfigRead(config);

            if (!string.IsNullOrWhiteSpace(config.BeforeBuild))
            {
                try
                {
                    logger.Trace("Running BeforeBuild event");
                    this.RunEvent(config.BeforeBuild);
                }
                catch (Exception exc)
                {
                    var message = "Error: Unable to run beforeBuild event command: " + exc.Message + "\nStack trace:\n" + exc.StackTrace;
                    logger.Error("Exception occurred. Message: " + message);
                    throw new Bridge.Translator.Exception(message);
                }
            }

            logger.Trace("BuildSyntaxTree");
            this.BuildSyntaxTree();
            var resolver = new MemberResolver(this.ParsedSourceFiles, Emitter.ToAssemblyReferences(references));

            this.InspectTypes(resolver, config);

            resolver.CanFreeze = true;
            var emitter = this.CreateEmitter(resolver);

            XmlMetaMaker.Load(XmlMetaFiles, emitter);

            emitter.Translator   = this;
            emitter.AssemblyInfo = this.AssemblyInfo;
            emitter.References   = references;
            emitter.SourceFiles  = this.SourceFiles;
            emitter.Log          = this.Log;
            emitter.Plugins      = this.Plugins;

            this.SortReferences();
            this.Plugins.BeforeEmit(emitter, this);
            this.Outputs = emitter.Emit();
            this.Plugins.AfterEmit(emitter, this);

            logger.Info("Translating done");

            return(this.Outputs);
        }