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); }
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); }
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); }
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 }); }
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); }
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); }
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); }