public static string GetEntityJsName(IMethod me2) { IMethod me; if (me2.IsConstructor && me2.DeclaringType.Kind == TypeKind.TypeParameter)//happens when invoking new T(); { me = me2; } else { me = (IMethod)me2.MemberDefinition; } var name = me.Name; if (name != null) { if (name == ".ctor") { name = "ctor"; } else if (name == ".cctor") { name = "cctor"; } } var att = me.GetMetadata <JsMethodAttribute>(true); if (att != null && att.Name != null) { name = att.Name; } else if (me.DeclaringType.Kind == TypeKind.Delegate && me.Name == "Invoke") { return(""); } else if (me.DeclaringType.IsGenericMethodArgument()) //happens when invoking new T() in method MyMethod<T>(); { name = GetEntityJsName(me.DeclaringType); } //else if (me.DeclaringType.IsGenericTypeParameter()) //happens when invoking new T() in class List<T>; //{ // name = EntityTypeRefToMember(me.DeclaringType); //} else { var owner = me.GetOwner(); if (owner != null && owner is IProperty) { var pe = (IProperty)owner; if (pe.SymbolKind == SymbolKind.Indexer && Sk.UseNativeIndexer(pe)) { return(""); } name = GetEntityJsName(pe); if (me.IsGetter()) { name = "get_" + name; } else { name = "set_" + name; } } } // 前面有地方被统一修改 if (me.DeclaringType.FullName == "System.Enum") { if (name == "ToString" || name == "toString") { name = "System.Enum.GetName"; } } if (Sk.NewInterfaceImplementation) { name = SkJs.GetMethodPrefix(me) + name; } if (!Sk.UseNativeOverloads(me)) { if (me.TypeParameters.IsNotNullOrEmpty()) { name += "$" + me.TypeParameters.Count; } name += SkJs.GetOverloadedMethodSuffix(me); } return(name); }