// Token: 0x060000E3 RID: 227 RVA: 0x000038E4 File Offset: 0x00001AE4 public static IEnumerable <ScriptReference> GetScriptReferences(Type type, bool ignoreStartingTypeReferences) { List <ScriptObjectBuilder.ResourceEntry> scriptReferencesInternal = ScriptObjectBuilder.GetScriptReferencesInternal((ignoreStartingTypeReferences && null != type) ? type.BaseType : type, new Stack <Type>()); return(ScriptObjectBuilder.ScriptReferencesFromResourceEntries(scriptReferencesInternal)); }
// 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); }