[new] 过滤非aot泛型类及函数
parent
0af6f704b2
commit
aed13e464b
|
@ -37,6 +37,10 @@ namespace HybridCLR.Editor.AOT
|
||||||
|
|
||||||
private readonly HashSet<string> _hotUpdateAssemblyFiles;
|
private readonly HashSet<string> _hotUpdateAssemblyFiles;
|
||||||
|
|
||||||
|
public List<GenericClass> AotGenericTypes { get; } = new List<GenericClass>();
|
||||||
|
|
||||||
|
public List<GenericMethod> AotGenericMethods { get; } = new List<GenericMethod>();
|
||||||
|
|
||||||
public Analyzer(Options options)
|
public Analyzer(Options options)
|
||||||
{
|
{
|
||||||
_assemblyCollector = options.Collector;
|
_assemblyCollector = options.Collector;
|
||||||
|
@ -63,6 +67,16 @@ namespace HybridCLR.Editor.AOT
|
||||||
return _hotUpdateAssemblyFiles.Contains(type.Module.Name);
|
return _hotUpdateAssemblyFiles.Contains(type.Module.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsAotType(TypeDef type)
|
||||||
|
{
|
||||||
|
return !_hotUpdateAssemblyFiles.Contains(type.Module.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsAotGenericMethod(MethodDef method)
|
||||||
|
{
|
||||||
|
return IsAotType(method.DeclaringType) && method.HasGenericParameters;
|
||||||
|
}
|
||||||
|
|
||||||
private void OnNewMethod(GenericMethod method)
|
private void OnNewMethod(GenericMethod method)
|
||||||
{
|
{
|
||||||
if(method == null)
|
if(method == null)
|
||||||
|
@ -179,10 +193,18 @@ namespace HybridCLR.Editor.AOT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void FilterAOTGenericTypeAndMethods()
|
||||||
|
{
|
||||||
|
var cc = new ConstraintContext();
|
||||||
|
AotGenericTypes.AddRange(_genericTypes.Where(type => IsAotType(type.Type)).Select(gc => cc.ApplyConstraints(gc)));
|
||||||
|
AotGenericMethods.AddRange(_genericMethods.Where(method => IsAotGenericMethod(method.Method)).Select(gm => cc.ApplyConstraints(gm)));
|
||||||
|
}
|
||||||
|
|
||||||
public void Run()
|
public void Run()
|
||||||
{
|
{
|
||||||
Prepare();
|
Prepare();
|
||||||
RecursiveCollect();
|
RecursiveCollect();
|
||||||
|
FilterAOTGenericTypeAndMethods();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
using HybridCLR.Editor.Meta;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HybridCLR.Editor.AOT
|
||||||
|
{
|
||||||
|
public class ConstraintContext
|
||||||
|
{
|
||||||
|
public GenericClass ApplyConstraints(GenericClass gc)
|
||||||
|
{
|
||||||
|
return gc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GenericMethod ApplyConstraints(GenericMethod gm)
|
||||||
|
{
|
||||||
|
return gm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 812d81a75b690394bbe16ef5f0bcbc46
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
|
@ -13,7 +13,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
public static class AOTReferenceGeneratorCommand
|
public static class AOTReferenceGeneratorCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
[MenuItem("HybridCLR/Generate/AOTGenericReference", priority = 18)]
|
[MenuItem("HybridCLR/Generate/AOTGenericReference", priority = 102)]
|
||||||
public static void GenerateAOTGenericReference()
|
public static void GenerateAOTGenericReference()
|
||||||
{
|
{
|
||||||
GenerateAOTGenericReference(true);
|
GenerateAOTGenericReference(true);
|
||||||
|
@ -39,7 +39,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
analyzer.Run();
|
analyzer.Run();
|
||||||
|
|
||||||
var writer = new GenericReferenceWriter();
|
var writer = new GenericReferenceWriter();
|
||||||
writer.Write(analyzer.GenericTypes.ToList(), analyzer.GenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
|
writer.Write(analyzer.AotGenericTypes.ToList(), analyzer.AotGenericMethods.ToList(), $"{Application.dataPath}/{gs.outputAOTGenericReferenceFile}");
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,31 +32,31 @@ namespace HybridCLR.Editor.Commands
|
||||||
CompileDll(SettingsUtil.GetHotFixDllsOutputDirByTarget(target), target);
|
CompileDll(SettingsUtil.GetHotFixDllsOutputDirByTarget(target), target);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/CompileDll/ActiveBuildTarget")]
|
[MenuItem("HybridCLR/CompileDll/ActiveBuildTarget", priority = 100)]
|
||||||
public static void CompileDllActiveBuildTarget()
|
public static void CompileDllActiveBuildTarget()
|
||||||
{
|
{
|
||||||
CompileDll(EditorUserBuildSettings.activeBuildTarget);
|
CompileDll(EditorUserBuildSettings.activeBuildTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/CompileDll/Win32")]
|
[MenuItem("HybridCLR/CompileDll/Win32", priority = 200)]
|
||||||
public static void CompileDllWin32()
|
public static void CompileDllWin32()
|
||||||
{
|
{
|
||||||
CompileDll(BuildTarget.StandaloneWindows);
|
CompileDll(BuildTarget.StandaloneWindows);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/CompileDll/Win64")]
|
[MenuItem("HybridCLR/CompileDll/Win64", priority = 201)]
|
||||||
public static void CompileDllWin64()
|
public static void CompileDllWin64()
|
||||||
{
|
{
|
||||||
CompileDll(BuildTarget.StandaloneWindows64);
|
CompileDll(BuildTarget.StandaloneWindows64);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/CompileDll/Android")]
|
[MenuItem("HybridCLR/CompileDll/Android", priority = 202)]
|
||||||
public static void CompileDllAndroid()
|
public static void CompileDllAndroid()
|
||||||
{
|
{
|
||||||
CompileDll(BuildTarget.Android);
|
CompileDll(BuildTarget.Android);
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/CompileDll/IOS")]
|
[MenuItem("HybridCLR/CompileDll/IOS", priority = 203)]
|
||||||
public static void CompileDllIOS()
|
public static void CompileDllIOS()
|
||||||
{
|
{
|
||||||
CompileDll(BuildTarget.iOS);
|
CompileDll(BuildTarget.iOS);
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
public static class LinkGeneratorCommand
|
public static class LinkGeneratorCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
[MenuItem("HybridCLR/Generate/LinkXml", priority = 10)]
|
[MenuItem("HybridCLR/Generate/LinkXml", priority = 100)]
|
||||||
public static void GenerateLinkXml()
|
public static void GenerateLinkXml()
|
||||||
{
|
{
|
||||||
GenerateLinkXml(true);
|
GenerateLinkXml(true);
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
CleanIl2CppBuildCache();
|
CleanIl2CppBuildCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
[MenuItem("HybridCLR/Generate/MethodBridge", priority = 15)]
|
[MenuItem("HybridCLR/Generate/MethodBridge", priority = 101)]
|
||||||
public static void GenerateMethodBridge()
|
public static void GenerateMethodBridge()
|
||||||
{
|
{
|
||||||
GenerateMethodBridge(true);
|
GenerateMethodBridge(true);
|
||||||
|
|
|
@ -12,7 +12,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按照必要的顺序,执行所有生成操作,适合打包前操作
|
/// 按照必要的顺序,执行所有生成操作,适合打包前操作
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[MenuItem("HybridCLR/Generate/All", priority = 30)]
|
[MenuItem("HybridCLR/Generate/All", priority = 200)]
|
||||||
public static void GenerateAll()
|
public static void GenerateAll()
|
||||||
{
|
{
|
||||||
// 顺序随意
|
// 顺序随意
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace HybridCLR.Editor.Commands
|
||||||
public static class ReversePInvokeWrapperGeneratorCommand
|
public static class ReversePInvokeWrapperGeneratorCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
[MenuItem("HybridCLR/Generate/ReversePInvokeWrapper", priority = 20)]
|
[MenuItem("HybridCLR/Generate/ReversePInvokeWrapper", priority = 103)]
|
||||||
public static void GenerateReversePInvokeWrapper()
|
public static void GenerateReversePInvokeWrapper()
|
||||||
{
|
{
|
||||||
string ReversePInvokeWrapperStubFile = $"{SettingsUtil.LocalIl2CppDir}/libil2cpp/hybridclr/metadata/ReversePInvokeMethodStub.cpp";
|
string ReversePInvokeWrapperStubFile = $"{SettingsUtil.LocalIl2CppDir}/libil2cpp/hybridclr/metadata/ReversePInvokeMethodStub.cpp";
|
||||||
|
|
Loading…
Reference in New Issue