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;
- }
- }
- }
|