コード例 #1
0
 // Token: 0x060000F4 RID: 244 RVA: 0x000042E8 File Offset: 0x000024E8
 public override bool Equals(object obj)
 {
     ScriptObjectBuilder.ResourceEntry resourceEntry = (ScriptObjectBuilder.ResourceEntry)obj;
     return(string.Compare(this.RefKey, resourceEntry.RefKey, true, CultureInfo.CurrentCulture) == 0);
 }
コード例 #2
0
        // Token: 0x060000E8 RID: 232 RVA: 0x00003C2C File Offset: 0x00001E2C
        private static List <ScriptObjectBuilder.ResourceEntry> GetScriptReferencesInternal(Type type, Stack <Type> typeReferenceStack)
        {
            if (typeReferenceStack.Contains(type))
            {
                throw new InvalidOperationException("Circular reference detected.");
            }
            List <ScriptObjectBuilder.ResourceEntry> list;

            if (ScriptObjectBuilder.cache.TryGetValue(type, out list))
            {
                return(list);
            }
            typeReferenceStack.Push(type);
            List <ScriptObjectBuilder.ResourceEntry> result;

            try
            {
                lock (ScriptObjectBuilder.sync)
                {
                    if (!ScriptObjectBuilder.cache.TryGetValue(type, out list))
                    {
                        list = new List <ScriptObjectBuilder.ResourceEntry>();
                        List <RequiredScriptAttribute> list2 = new List <RequiredScriptAttribute>();
                        foreach (RequiredScriptAttribute item in type.GetCustomAttributes(typeof(RequiredScriptAttribute), true))
                        {
                            list2.Add(item);
                        }
                        list2.Sort((RequiredScriptAttribute left, RequiredScriptAttribute right) => left.LoadOrder.CompareTo(right.LoadOrder));
                        foreach (RequiredScriptAttribute requiredScriptAttribute in list2)
                        {
                            if (requiredScriptAttribute.ExtenderType != null)
                            {
                                list.AddRange(ScriptObjectBuilder.GetScriptReferencesInternal(requiredScriptAttribute.ExtenderType, typeReferenceStack));
                            }
                        }
                        int num = 0;
                        List <ScriptObjectBuilder.ResourceEntry> list3 = new List <ScriptObjectBuilder.ResourceEntry>();
                        Type type2 = type;
                        while (type2 != null && type2 != typeof(object))
                        {
                            object[] customAttributes2 = Attribute.GetCustomAttributes(type2, typeof(ClientScriptResourceAttribute), false);
                            num -= customAttributes2.Length;
                            foreach (ClientScriptResourceAttribute clientScriptResourceAttribute in customAttributes2)
                            {
                                ScriptObjectBuilder.ResourceEntry item2 = new ScriptObjectBuilder.ResourceEntry(clientScriptResourceAttribute.ResourcePath, type2, num + clientScriptResourceAttribute.LoadOrder);
                                if (!list.Contains(item2) && !list3.Contains(item2))
                                {
                                    list3.Add(item2);
                                }
                            }
                            type2 = type2.BaseType;
                        }
                        list3.Sort((ScriptObjectBuilder.ResourceEntry l, ScriptObjectBuilder.ResourceEntry r) => l.Order.CompareTo(r.Order));
                        list.AddRange(list3);
                        ScriptObjectBuilder.cache.Add(type, list);
                    }
                    result = list;
                }
            }
            finally
            {
                typeReferenceStack.Pop();
            }
            return(result);
        }