| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using dnlib.DotNet;using HybridCLR.Editor.Meta;using UnityEditor;using UnityEngine;using IAssemblyResolver = HybridCLR.Editor.Meta.IAssemblyResolver;namespace HybridCLR.Editor.Link{    public class Analyzer    {        private readonly IAssemblyResolver _resolver;        public Analyzer(IAssemblyResolver resolver)        {            _resolver = resolver;        }        public HashSet<TypeRef> CollectRefs(List<string> rootAssemblies)        {            var assCollector = new AssemblyCache(_resolver);            var rootAssemblyNames = new HashSet<string>(rootAssemblies);            var typeRefs = new HashSet<TypeRef>(TypeEqualityComparer.Instance);            foreach (var rootAss in rootAssemblies)            {                var dnAss = assCollector.LoadModule(rootAss, false);                foreach (var type in dnAss.GetTypeRefs())                {                    if (type.DefinitionAssembly == null)                    {                        Debug.LogWarning($"assembly:{dnAss.Name} TypeRef {type.FullName} has no DefinitionAssembly");                        continue;                    }                    if (!rootAssemblyNames.Contains(type.DefinitionAssembly.Name.ToString()))                    {                        typeRefs.Add(type);                    }                }            }            return typeRefs;        }    }}
 |