三国卡牌客户端基础资源仓库
hch
2 天以前 e250c3a8790dd521922244b5443a2aac7da89acf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;
        }
    }
}