コード例 #1
0
        public virtual string GetEntityName(IEntity member, bool forcePreserveMemberCase = false, bool ignoreInterface = false)
        {
            bool preserveMemberChange = !this.IsNativeMember(member.FullName) ? this.AssemblyInfo.PreserveMemberCase : false;

            if (member is IMember && this.IsMemberConst((IMember)member) /* || member.DeclaringType.Kind == TypeKind.Anonymous*/)
            {
                preserveMemberChange = true;
            }
            var    attr     = Helpers.GetInheritedAttribute(member, Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute");
            bool   isIgnore = member.DeclaringTypeDefinition != null && this.Validator.IsIgnoreType(member.DeclaringTypeDefinition);
            string name     = member.Name;

            if (member is IMethod && ((IMethod)member).IsConstructor)
            {
                name = "constructor";
            }

            if (attr != null)
            {
                var value = attr.PositionalArguments.First().ConstantValue;
                if (value is string)
                {
                    name = value.ToString();
                    if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) || Helpers.IsReservedWord(name)))
                    {
                        name = Helpers.ChangeReservedWord(name);
                    }
                    return(name);
                }

                preserveMemberChange = !(bool)value;
            }

            name = !preserveMemberChange && !forcePreserveMemberCase?Object.Net.Utilities.StringUtils.ToLowerCamelCase(name) : name;

            if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) || Helpers.IsReservedWord(name)))
            {
                name = Helpers.ChangeReservedWord(name);
            }

            return(name);
        }
コード例 #2
0
        public virtual string GetEntityNameFromAttr(IEntity member, bool setter = false)
        {
            var prop = member as IProperty;

            if (prop != null)
            {
                member = setter ? prop.Setter : prop.Getter;
            }
            else
            {
                var e = member as IEvent;
                if (e != null)
                {
                    member = setter ? e.AddAccessor : e.RemoveAccessor;
                }
            }

            if (member == null)
            {
                return(null);
            }

            var    attr     = Helpers.GetInheritedAttribute(member, Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute");
            bool   isIgnore = member.DeclaringTypeDefinition != null && this.Validator.IsIgnoreType(member.DeclaringTypeDefinition);
            string name;

            if (attr != null)
            {
                var value = attr.PositionalArguments.First().ConstantValue;
                if (value is string)
                {
                    name = value.ToString();
                    if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) || Helpers.IsReservedWord(name)))
                    {
                        name = Helpers.ChangeReservedWord(name);
                    }
                    return(name);
                }
            }

            return(null);
        }
コード例 #3
0
        public virtual string GetEntityName(IEntity member, bool cancelChangeCase = false, bool ignoreInterface = false)
        {
            bool changeCase = !this.IsNativeMember(member.FullName) ? this.ChangeCase : true;

            if (member is IMember && this.IsMemberConst((IMember)member))
            {
                changeCase = false;
            }
            var    attr     = member.Attributes.FirstOrDefault(a => a.AttributeType.FullName == Translator.Bridge_ASSEMBLY + ".NameAttribute");
            bool   isIgnore = member.DeclaringTypeDefinition != null && this.Validator.IsIgnoreType(member.DeclaringTypeDefinition);
            string name     = member.Name;

            if (member is IMethod && ((IMethod)member).IsConstructor)
            {
                name = "constructor";
            }

            if (attr != null)
            {
                var value = attr.PositionalArguments.First().ConstantValue;
                if (value is string)
                {
                    name = value.ToString();
                    if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) || Helpers.IsReservedWord(name)))
                    {
                        name = "$" + name;
                    }
                    return(name);
                }

                changeCase = (bool)value;
            }

            name = changeCase && !cancelChangeCase?Object.Net.Utilities.StringUtils.ToLowerCamelCase(name) : name;

            if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) || Helpers.IsReservedWord(name)))
            {
                name = "$" + name;
            }

            return(name);
        }
コード例 #4
0
ファイル: Inspector.Visitor.cs プロジェクト: idannik/Bridge
        public override void VisitEnumMemberDeclaration(EnumMemberDeclaration enumMemberDeclaration)
        {
            Expression initializer         = enumMemberDeclaration.Initializer;
            var        member              = this.Resolver.ResolveNode(enumMemberDeclaration, null) as MemberResolveResult;
            var        initializerIsString = false;

            if (member != null)
            {
                var validator = new Validator();
                var enumMode  = validator.EnumEmitMode(member.Member.DeclaringTypeDefinition);

                if (enumMode >= 3 && enumMode < 7)
                {
                    initializerIsString = true;
                    string enumStringName = member.Member.Name;
                    var    attr           = Helpers.GetInheritedAttribute(member.Member, Translator.Bridge_ASSEMBLY + ".NameAttribute");

                    if (attr != null)
                    {
                        var    value = attr.PositionalArguments.First().ConstantValue;
                        string name  = null;
                        if (value is string)
                        {
                            name = value.ToString();
                        }
                        else if (value is bool)
                        {
                            name = (bool)value ? Object.Net.Utilities.StringUtils.ToLowerCamelCase(member.Member.Name) : member.Member.Name;
                        }

                        if (member.Member.IsStatic && Emitter.IsReservedStaticName(name))
                        {
                            name = Helpers.ChangeReservedWord(name);
                        }
                        initializer = new PrimitiveExpression(name);
                    }
                    else
                    {
                        switch (enumMode)
                        {
                        case 3:
                            enumStringName = Object.Net.Utilities.StringUtils.ToLowerCamelCase(member.Member.Name);
                            break;

                        case 4:
                            break;

                        case 5:
                            enumStringName = enumStringName.ToLowerInvariant();
                            break;

                        case 6:
                            enumStringName = enumStringName.ToUpperInvariant();
                            break;
                        }

                        initializer = new PrimitiveExpression(enumStringName);
                    }
                }
            }

            if (!initializerIsString)
            {
                if (enumMemberDeclaration.Initializer.IsNull)
                {
                    dynamic i = this.CurrentType.LastEnumValue;
                    ++i;
                    this.CurrentType.LastEnumValue = i;

                    if (member != null && member.Member.DeclaringTypeDefinition.EnumUnderlyingType.IsKnownType(KnownTypeCode.Int64))
                    {
                        initializer = new PrimitiveExpression(Convert.ToInt64(this.CurrentType.LastEnumValue));
                    }
                    else if (member != null && member.Member.DeclaringTypeDefinition.EnumUnderlyingType.IsKnownType(KnownTypeCode.UInt64))
                    {
                        initializer = new PrimitiveExpression(Convert.ToUInt64(this.CurrentType.LastEnumValue));
                    }
                    else
                    {
                        initializer = new PrimitiveExpression(this.CurrentType.LastEnumValue);
                    }
                }
                else
                {
                    var rr = this.Resolver.ResolveNode(enumMemberDeclaration.Initializer, null) as ConstantResolveResult;
                    if (rr != null)
                    {
                        if (member != null && member.Member.DeclaringTypeDefinition.EnumUnderlyingType.IsKnownType(KnownTypeCode.Int64))
                        {
                            initializer = new PrimitiveExpression(Convert.ToInt64(rr.ConstantValue));
                        }
                        else if (member != null && member.Member.DeclaringTypeDefinition.EnumUnderlyingType.IsKnownType(KnownTypeCode.UInt64))
                        {
                            initializer = new PrimitiveExpression(Convert.ToUInt64(rr.ConstantValue));
                        }
                        else
                        {
                            initializer = new PrimitiveExpression(rr.ConstantValue);
                        }
                        this.CurrentType.LastEnumValue = rr.ConstantValue;
                    }
                }
            }

            this.CurrentType.StaticConfig.Fields.Add(new TypeConfigItem
            {
                Name        = enumMemberDeclaration.Name,
                Entity      = enumMemberDeclaration,
                Initializer = initializer
            });
        }
コード例 #5
0
        public virtual string GetDefinitionName(IEmitter emitter, IMemberDefinition member, bool preserveMemberCase = false)
        {
            if (!preserveMemberCase)
            {
                preserveMemberCase = !this.IsNativeMember(member.FullName) ? this.AssemblyInfo.PreserveMemberCase : false;

                if (member is FieldDefinition && ((FieldDefinition)member).HasConstant && !member.DeclaringType.IsEnum)
                {
                    preserveMemberCase = true;
                }
            }
            string attrName = Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute";
            var    attr     = Helpers.GetInheritedAttribute(emitter, member, attrName);

            bool   isIgnore = this.Validator.IsIgnoreType(member.DeclaringType);
            string name     = member.Name;
            bool   isStatic = false;

            if (member is MethodDefinition)
            {
                var method = (MethodDefinition)member;
                isStatic = method.IsStatic;
                if (method.IsConstructor)
                {
                    name = "constructor";
                }
            }
            else if (member is FieldDefinition)
            {
                isStatic = ((FieldDefinition)member).IsStatic;
            }
            else if (member is PropertyDefinition)
            {
                var prop     = (PropertyDefinition)member;
                var accessor = prop.GetMethod ?? prop.SetMethod;
                isStatic = prop.GetMethod != null ? prop.GetMethod.IsStatic : false;
            }
            else if (member is EventDefinition)
            {
                var ev = (EventDefinition)member;
                isStatic = ev.AddMethod != null ? ev.AddMethod.IsStatic : false;
            }
            if (attr != null)
            {
                var value = attr.ConstructorArguments.First().Value;
                if (value is string)
                {
                    name = value.ToString();
                    if (!isIgnore &&
                        ((isStatic && Emitter.IsReservedStaticName(name)) ||
                         Helpers.IsReservedWord(name)))
                    {
                        name = Helpers.ChangeReservedWord(name);
                    }
                    return(name);
                }

                preserveMemberCase = !(bool)value;
            }

            if (name.Contains("."))
            {
                name = Object.Net.Utilities.StringUtils.RightOfRightmostOf(name, '.');
            }
            name = preserveMemberCase ? name : Object.Net.Utilities.StringUtils.ToLowerCamelCase(name);
            if (!isIgnore &&
                ((isStatic && Emitter.IsReservedStaticName(name)) ||
                 Helpers.IsReservedWord(name)))
            {
                name = Helpers.ChangeReservedWord(name);
            }

            return(name);
        }
コード例 #6
0
ファイル: SyntaxHelper.cs プロジェクト: night-king/Bridge
        public static string GetSymbolName(InvocationExpressionSyntax node, SemanticModel semanticModel)
        {
            var si     = semanticModel.GetSymbolInfo(node.ArgumentList.Arguments[0].Expression);
            var symbol = si.Symbol;

            if (symbol == null && si.CandidateSymbols.Any())
            {
                symbol = si.CandidateSymbols.First();
            }

            var name = (string)semanticModel.GetConstantValue(node).Value;

            if (symbol != null && symbol.Kind != SymbolKind.Namespace)
            {
                bool preserveMemberChange = !(symbol.Kind == SymbolKind.Method || symbol.Kind == SymbolKind.Property);

                int enumMode = -1;

                if (symbol.ContainingType != null && symbol.ContainingType.TypeKind == TypeKind.Enum && symbol is IFieldSymbol)
                {
                    string enumAttr = Translator.Bridge_ASSEMBLY + ".EnumAttribute";
                    enumMode = 7;

                    foreach (var attr in symbol.ContainingType.GetAttributes())
                    {
                        if (attr.AttributeClass != null && attr.AttributeClass.FullyQualifiedName() == enumAttr && attr.ConstructorArguments.Any())
                        {
                            enumMode = (int)attr.ConstructorArguments.First().Value;
                            break;
                        }
                    }
                }

                if (symbol is IFieldSymbol && ((IFieldSymbol)symbol).IsConst)
                {
                    preserveMemberChange = true;
                }

                var  nameAttr = SyntaxHelper.GetInheritedAttribute(symbol, Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute");
                bool isIgnore = symbol.ContainingType != null && SyntaxHelper.IsExternalType(symbol.ContainingType);

                name = symbol.Name;

                if (nameAttr != null)
                {
                    var value = nameAttr.ConstructorArguments.First().Value;
                    if (value is string)
                    {
                        name = value.ToString();
                        if (!isIgnore && symbol.IsStatic && Emitter.IsReservedStaticName(name))
                        {
                            name = Helpers.ChangeReservedWord(name);
                        }
                        return(name);
                    }

                    preserveMemberChange = !(bool)value;
                    enumMode             = -1;
                }

                if (enumMode > 6)
                {
                    switch (enumMode)
                    {
                    case 7:
                        break;

                    case 8:
                        name = name.ToLowerInvariant();
                        break;

                    case 9:
                        name = name.ToUpperInvariant();
                        break;
                    }
                }
                else
                {
                    name = !preserveMemberChange?Object.Net.Utilities.StringUtils.ToLowerCamelCase(name) : name;
                }

                if (!isIgnore && symbol.IsStatic && Emitter.IsReservedStaticName(name))
                {
                    name = Helpers.ChangeReservedWord(name);
                }
            }

            return(name);
        }
コード例 #7
0
ファイル: Emitter.Helpers.cs プロジェクト: Level0r0s/Bridge
        public virtual string GetEntityName(IEntity member, bool forcePreserveMemberCase = false, bool ignoreInterface = false)
        {
            Tuple <IEntity, bool, bool> tuple = new Tuple <IEntity, bool, bool>(member, forcePreserveMemberCase, ignoreInterface);

            string result;

            if (this.entityNameCache.TryGetValue(tuple, out result))
            {
                return(result);
            }

            bool preserveMemberChange = !this.IsNativeMember(member.FullName) ? this.AssemblyInfo.PreserveMemberCase : false;

            int enumMode = -1;

            if (member.DeclaringType.Kind == TypeKind.Enum && member is IField)
            {
                enumMode = this.Validator.EnumEmitMode(member.DeclaringType);
            }

            if (member is IMember && this.IsMemberConst((IMember)member) || member is IEvent)
            {
                preserveMemberChange = true;
            }
            var    attr     = Helpers.GetInheritedAttribute(member, Bridge.Translator.Translator.Bridge_ASSEMBLY + ".NameAttribute");
            bool   isIgnore = member.DeclaringTypeDefinition != null && this.Validator.IsIgnoreType(member.DeclaringTypeDefinition);
            string name     = member.Name;

            if (member is IMethod && ((IMethod)member).IsConstructor)
            {
                name = JS.Funcs.CONSTRUCTOR;
            }

            if (attr != null)
            {
                var value = attr.PositionalArguments.First().ConstantValue;
                if (value is string)
                {
                    name = value.ToString();
                    if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) /*|| Helpers.IsReservedWord(name)*/))
                    {
                        name = Helpers.ChangeReservedWord(name);
                    }
                    this.entityNameCache.Add(tuple, name);
                    return(name);
                }

                preserveMemberChange = !(bool)value;
                enumMode             = -1;
            }

            if (name.Length > 1 && name.ToUpperInvariant() == name)
            {
                preserveMemberChange = true;
            }

            if (enumMode > 6)
            {
                switch (enumMode)
                {
                case 7:
                    break;

                case 8:
                    name = name.ToLowerInvariant();
                    break;

                case 9:
                    name = name.ToUpperInvariant();
                    break;
                }
            }
            else
            {
                name = !preserveMemberChange && !forcePreserveMemberCase?Object.Net.Utilities.StringUtils.ToLowerCamelCase(name) : name;
            }

            if (!isIgnore && ((member.IsStatic && Emitter.IsReservedStaticName(name)) /* || Helpers.IsReservedWord(name)*/))
            {
                name = Helpers.ChangeReservedWord(name);
            }

            this.entityNameCache.Add(tuple, name);
            return(name);
        }