public static string GetPropertyRef(IMember property, IEmitter emitter, bool isSetter = false, bool noOverload = false, bool ignoreInterface = false) { var attrName = emitter.GetEntityNameFromAttr(property, isSetter); if (!string.IsNullOrEmpty(attrName)) { return attrName; } var name = emitter.GetEntityName(property, true, ignoreInterface); if (!noOverload) { var overloads = OverloadsCollection.Create(emitter, property, isSetter); name = overloads.HasOverloads ? overloads.GetOverloadName() : name; noOverload = !overloads.HasOverloads; } if (Helpers.IsFieldProperty(property, emitter)) { return noOverload ? emitter.GetEntityName(property, false) : name; } return (isSetter ? "set" : "get") + name; }
public static string GetPropertyRef(IMember property, IEmitter emitter, bool isSetter = false, bool noOverload = false, bool ignoreInterface = false, bool withoutTypeParams = false, bool skipPrefix = false) { var attrName = emitter.GetEntityNameFromAttr(property, isSetter); if (!string.IsNullOrEmpty(attrName)) { return(Helpers.AddInterfacePrefix(property, emitter, ignoreInterface, attrName, isSetter)); } string name = null; bool isFieldProperty = Helpers.IsFieldProperty(property, emitter); if (isFieldProperty) { return(emitter.GetEntityName(property, false, ignoreInterface)); } if (!noOverload) { var overloads = OverloadsCollection.Create(emitter, property, isSetter); return(overloads.GetOverloadName(ignoreInterface, skipPrefix ? null : GetSetOrGet(isSetter), withoutTypeParams)); } name = emitter.GetEntityName(property, true, ignoreInterface); return(skipPrefix ? name : GetSetOrGet(isSetter, name)); }
public static string GetPropertyRef(IMember property, IEmitter emitter, bool isSetter = false, bool noOverload = false, bool ignoreInterface = false) { if (property.DeclaringTypeDefinition != null && emitter.Validator.IsIgnoreType(property.DeclaringTypeDefinition)) { var attrName = emitter.GetEntityNameFromAttr(property, isSetter); if (!string.IsNullOrEmpty(attrName)) { return(attrName); } } string name = emitter.GetEntityName(property, true, ignoreInterface); if (property.SymbolKind == SymbolKind.Indexer && name == "Item") { name = ""; } else { if (!noOverload) { var overloads = OverloadsCollection.Create(emitter, property, isSetter); name = overloads.HasOverloads ? overloads.GetOverloadName() : name; noOverload = !overloads.HasOverloads; } if (Helpers.IsFieldProperty(property, emitter)) { return(noOverload ? emitter.GetEntityName(property, false) : name); } } return((isSetter ? "set" : "get") + name); }
public static string GetPropertyRef(PropertyDeclaration property, IEmitter emitter, bool isSetter = false, bool noOverload = false, bool ignoreInterface = false) { ResolveResult resolveResult = emitter.Resolver.ResolveNode(property, emitter) as MemberResolveResult; if (resolveResult != null && ((MemberResolveResult)resolveResult).Member != null) { return(GetPropertyRef(((MemberResolveResult)resolveResult).Member, emitter, isSetter, noOverload, ignoreInterface)); } var name = emitter.GetEntityName(property, true, ignoreInterface); if (!noOverload) { var overloads = OverloadsCollection.Create(emitter, property, isSetter); name = overloads.HasOverloads ? overloads.GetOverloadName() : name; noOverload = !overloads.HasOverloads; } if (Helpers.IsFieldProperty(property, emitter)) { return(noOverload ? emitter.GetEntityName(property, false) : name); } return((isSetter ? "set" : "get") + name); }
public static string GetPropertyRef(PropertyDeclaration property, IEmitter emitter, bool isSetter = false, bool noOverload = false, bool ignoreInterface = false, bool withoutTypeParams = false) { ResolveResult resolveResult = emitter.Resolver.ResolveNode(property, emitter) as MemberResolveResult; if (resolveResult != null && ((MemberResolveResult)resolveResult).Member != null) { return(GetPropertyRef(((MemberResolveResult)resolveResult).Member, emitter, isSetter, noOverload, ignoreInterface, withoutTypeParams)); } string name; bool isFieldProperty = Helpers.IsFieldProperty(property, emitter); if (isFieldProperty) { return(emitter.GetEntityName(property, false, ignoreInterface)); } if (!noOverload) { var overloads = OverloadsCollection.Create(emitter, property, isSetter); return(overloads.GetOverloadName(ignoreInterface, GetSetOrGet(isSetter), withoutTypeParams)); } name = emitter.GetEntityName(property, true, ignoreInterface); return(GetSetOrGet(isSetter, name)); }
private OverloadsCollection(IEmitter emitter, PropertyDeclaration propDeclaration, bool isSetter) { this.Emitter = emitter; this.Name = propDeclaration.Name; this.JsName = Helpers.GetPropertyRef(propDeclaration, emitter, isSetter, true, true); this.Inherit = !propDeclaration.HasModifier(Modifiers.Static); this.Static = propDeclaration.HasModifier(Modifiers.Static); this.CancelChangeCase = !Helpers.IsFieldProperty(propDeclaration, emitter); this.IsSetter = isSetter; this.Member = this.FindMember(propDeclaration); this.TypeDefinition = this.Member.DeclaringTypeDefinition; this.Type = this.Member.DeclaringType; this.InitMembers(); this.Emitter.OverloadsCache[propDeclaration.GetHashCode().ToString()] = this; }
private OverloadsCollection(IEmitter emitter, IMember member, bool isSetter = false, bool includeInline = false, bool isField = false) { if (member is IMethod) { var method = (IMethod)member; this.Inherit = !method.IsConstructor && !method.IsStatic; this.Static = method.IsStatic; this.Constructor = method.IsConstructor; } else if (member is IEntity) { var entity = (IEntity)member; this.Inherit = !entity.IsStatic; this.Static = entity.IsStatic; } this.Emitter = emitter; this.Name = member.Name; this.IsField = isField; if (member is IProperty) { this.CancelChangeCase = !Helpers.IsFieldProperty(member, emitter); this.JsName = Helpers.GetPropertyRef(member, emitter, isSetter, true, true); this.AltJsName = Helpers.GetPropertyRef(member, emitter, !isSetter, true, true); var p = (IProperty)member; this.FieldJsName = Helpers.IsAutoProperty(p) ? (Helpers.IsFieldProperty(p, this.Emitter) ? this.Emitter.GetEntityName(p) : Helpers.GetPropertyRef(p, this.Emitter, true, true, true, false, true)) : null; } else if (member is IEvent) { this.CancelChangeCase = true; this.JsName = Helpers.GetEventRef(member, emitter, isSetter, true, true); this.AltJsName = Helpers.GetEventRef(member, emitter, !isSetter, true, true); this.FieldJsName = Helpers.GetEventRef(member, emitter, true, true, true, false, true); } else { this.JsName = this.Emitter.GetEntityName(member, false, true); } this.IncludeInline = includeInline; this.Member = member; this.TypeDefinition = this.Member.DeclaringTypeDefinition; this.Type = this.Member.DeclaringType; this.IsSetter = isSetter; this.InitMembers(); this.Emitter.OverloadsCacheMembers[new Tuple <IMember, bool, bool>(member, isSetter, includeInline)] = this; }
private OverloadsCollection(IEmitter emitter, IMember member, bool isSetter = false, bool includeInline = false) { if (member is IMethod) { var method = (IMethod)member; this.Inherit = !method.IsConstructor && !method.IsStatic; this.Static = method.IsStatic; this.Constructor = method.IsConstructor; } else if (member is IEntity) { var entity = (IEntity)member; this.Inherit = !entity.IsStatic; this.Static = entity.IsStatic; } this.Emitter = emitter; this.Name = member.Name; if (member is IProperty) { this.CancelChangeCase = !Helpers.IsFieldProperty(member, emitter); this.JsName = Helpers.GetPropertyRef(member, emitter, isSetter, true, true); this.AltJsName = Helpers.GetPropertyRef(member, emitter, !isSetter, true, true); } else if (member is IEvent) { this.CancelChangeCase = true; this.JsName = Helpers.GetEventRef(member, emitter, isSetter, true, true); this.AltJsName = Helpers.GetEventRef(member, emitter, !isSetter, true, true); } else { this.JsName = this.Emitter.GetEntityName(member, false, true); } this.IncludeInline = includeInline; this.Member = member; this.TypeDefinition = this.Member.DeclaringTypeDefinition; this.Type = this.Member.DeclaringType; this.IsSetter = isSetter; this.InitMembers(); string key = (member.MemberDefinition != null ? member.MemberDefinition.GetHashCode().ToString() : member.GetHashCode().ToString()) + isSetter.GetHashCode().ToString(); this.Emitter.OverloadsCache[key] = this; }
private OverloadsCollection(IEmitter emitter, PropertyDeclaration propDeclaration, bool isSetter) { this.Emitter = emitter; this.Name = propDeclaration.Name; this.JsName = Helpers.GetPropertyRef(propDeclaration, emitter, isSetter, true, true); this.AltJsName = Helpers.GetPropertyRef(propDeclaration, emitter, !isSetter, true, true); this.FieldJsName = propDeclaration.Getter != null && propDeclaration.Getter.Body.IsNull ? emitter.GetEntityName(propDeclaration) : null; this.Inherit = !propDeclaration.HasModifier(Modifiers.Static); this.Static = propDeclaration.HasModifier(Modifiers.Static); this.CancelChangeCase = !Helpers.IsFieldProperty(propDeclaration, emitter); this.IsSetter = isSetter; this.Member = this.FindMember(propDeclaration); var p = (IProperty)this.Member; this.FieldJsName = Helpers.IsAutoProperty(p) ? (Helpers.IsFieldProperty(p, this.Emitter) ? this.Emitter.GetEntityName(p) : Helpers.GetPropertyRef(p, this.Emitter, true, true, true, false, true)) : null; this.TypeDefinition = this.Member.DeclaringTypeDefinition; this.Type = this.Member.DeclaringType; this.InitMembers(); this.Emitter.OverloadsCacheNodes[new Tuple <AstNode, bool>(propDeclaration, isSetter)] = this; }
public static bool IsFieldProperty(PropertyDeclaration property, IEmitter emitter) { ResolveResult resolveResult = emitter.Resolver.ResolveNode(property, emitter) as MemberResolveResult; if (resolveResult != null && ((MemberResolveResult)resolveResult).Member != null) { return(Helpers.IsFieldProperty(((MemberResolveResult)resolveResult).Member, emitter)); } string name = "Bridge.FieldProperty"; string name1 = name + "Attribute"; foreach (var i in property.Attributes) { foreach (var j in i.Attributes) { if (j.Type.ToString() == name || j.Type.ToString() == name1) { return(true); } resolveResult = emitter.Resolver.ResolveNode(j, emitter); if (resolveResult != null && resolveResult.Type != null && resolveResult.Type.FullName == name1) { return(true); } } } if (!emitter.AssemblyInfo.AutoPropertyToField) { return(false); } var typeDef = emitter.GetTypeDefinition(); var propDef = typeDef.Properties.FirstOrDefault(p => p.Name == property.Name); return(Helpers.IsAutoProperty(propDef)); }
public static bool IsFieldProperty(PropertyDeclaration property, IEmitter emitter) { ResolveResult resolveResult = emitter.Resolver.ResolveNode(property, emitter) as MemberResolveResult; if (resolveResult != null && ((MemberResolveResult)resolveResult).Member != null) { return(Helpers.IsFieldProperty(((MemberResolveResult)resolveResult).Member, emitter)); } if (AttributeHelper.HasFieldAttribute(property, emitter)) { return(true); } if (!emitter.AssemblyInfo.AutoPropertyToField) { return(false); } var typeDef = emitter.GetTypeDefinition(); var propDef = typeDef.Properties.FirstOrDefault(p => p.Name == property.Name); return(Helpers.IsAutoProperty(propDef)); }
protected virtual List <IProperty> GetPropertyOverloads(List <IProperty> list = null, ITypeDefinition typeDef = null) { bool isTop = list == null; list = list ?? new List <IProperty>(); typeDef = typeDef ?? this.TypeDefinition; if (typeDef != null) { var bridgeType = this.Emitter.BridgeTypes.Get(typeDef); var monoTypeDef = bridgeType != null ? bridgeType.TypeDefinition : null; var properties = typeDef.Properties.Where(p => { if (p.IsExplicitInterfaceImplementation) { return(false); } var canGet = p.CanGet && p.Getter != null; var canSet = p.CanSet && p.Setter != null; if (monoTypeDef != null) { var monoProp = monoTypeDef.Properties.FirstOrDefault(mp => mp.Name == p.Name); if (monoProp != null) { canGet = monoProp.GetMethod != null; canSet = monoProp.SetMethod != null; } } if (!this.IncludeInline) { var inline = canGet ? this.Emitter.GetInline(p.Getter) : null; if (!string.IsNullOrWhiteSpace(inline)) { return(false); } inline = canSet ? this.Emitter.GetInline(p.Setter) : null; if (!string.IsNullOrWhiteSpace(inline)) { return(false); } if (p.IsIndexer && canGet && p.Getter.Attributes.Any(a => a.AttributeType.FullName == "Bridge.ExternalAttribute")) { return(false); } } bool eq = false; bool?equalsByGetter = null; if (p.IsStatic == this.Static) { var getterIgnore = canGet && this.Emitter.Validator.IsExternalType(p.Getter); var setterIgnore = canSet && this.Emitter.Validator.IsExternalType(p.Setter); var getterName = canGet ? Helpers.GetPropertyRef(p, this.Emitter, false, true, true) : null; var setterName = canSet ? Helpers.GetPropertyRef(p, this.Emitter, true, true, true) : null; var fieldName = Helpers.IsAutoProperty(p) ? (Helpers.IsFieldProperty(p, this.Emitter) ? this.Emitter.GetEntityName(p) : Helpers.GetPropertyRef(p, this.Emitter, true, true, true, false, true)) : null; if (!getterIgnore && getterName != null && (getterName == this.JsName || getterName == this.AltJsName || getterName == this.FieldJsName)) { eq = true; equalsByGetter = true; } else if (!setterIgnore && setterName != null && (setterName == this.JsName || setterName == this.AltJsName || setterName == this.FieldJsName)) { eq = true; equalsByGetter = false; } else if (fieldName != null && (fieldName == this.JsName || fieldName == this.AltJsName || fieldName == this.FieldJsName)) { eq = true; } } if (eq) { if (p.IsOverride && !this.IsTemplateOverride(p)) { return(false); } if (equalsByGetter.HasValue && this.Member is IMethod && this.AltJsName == null) { this.AltJsName = Helpers.GetPropertyRef(p, this.Emitter, equalsByGetter.Value, true, true); } return(true); } return(false); }); list.AddRange(properties); if (this.Inherit) { var baseTypeDefinitions = typeDef.DirectBaseTypes.Where(t => t.Kind == typeDef.Kind || (typeDef.Kind == TypeKind.Struct && t.Kind == TypeKind.Class)); foreach (var baseTypeDef in baseTypeDefinitions) { var result = this.GetPropertyOverloads(list, baseTypeDef.GetDefinition()); list.AddRange(result); } } } return(isTop ? list.Distinct().ToList() : list); }