Exemplo n.º 1
0
        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);
        }