diff --git a/Assets/Tests/Editor/HotReload/UnityCLILoop.Tests.Editor.HotReload.asmdef b/Assets/Tests/Editor/HotReload/UnityCLILoop.Tests.Editor.HotReload.asmdef
index 8d6e83246..8fc81a1e4 100644
--- a/Assets/Tests/Editor/HotReload/UnityCLILoop.Tests.Editor.HotReload.asmdef
+++ b/Assets/Tests/Editor/HotReload/UnityCLILoop.Tests.Editor.HotReload.asmdef
@@ -16,7 +16,8 @@
"GUID:384dc39e13234d8aae3b1b1c44c9507e",
"GUID:1e3293e9639242278dcb27724b34beb4",
"GUID:5390a0826a36841e7a977485f863d05f",
- "GUID:24d448abf7c10486d9578018b3a3c54b"
+ "GUID:24d448abf7c10486d9578018b3a3c54b",
+ "GUID:b6ba53c1f946045358f72c7981f7b425"
],
"includePlatforms": [
"Editor"
diff --git a/Packages/src/Editor/FirstPartyTools/Common/ScriptPath/AssemblyInfo.cs b/Packages/src/Editor/FirstPartyTools/Common/ScriptPath/AssemblyInfo.cs
index ee1a792cc..f43d5dc7b 100644
--- a/Packages/src/Editor/FirstPartyTools/Common/ScriptPath/AssemblyInfo.cs
+++ b/Packages/src/Editor/FirstPartyTools/Common/ScriptPath/AssemblyInfo.cs
@@ -1,6 +1,7 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.Shared.Editor")]
+[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor")]
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.Editor")]
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.Patching.Editor")]
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.PausePoint.Editor")]
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers.meta
new file mode 100644
index 000000000..3d407b453
--- /dev/null
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: da68a32195687424d8a0795ef42575ca
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs
new file mode 100644
index 000000000..c41f708fb
--- /dev/null
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs
@@ -0,0 +1,5 @@
+using System.Runtime.CompilerServices;
+
+// Only the tests see these internals: the hot-reload application assembly uses this module
+// through its entry point alone, and the compiler keeps it away from the parts behind it.
+[assembly: InternalsVisibleTo("UnityCLILoop.Tests.Editor.HotReload")]
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs.meta
new file mode 100644
index 000000000..4e286f3dd
--- /dev/null
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/AssemblyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 63cf750119fad4af2aac29cf7eacf8c5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteBackfill.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteBackfill.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteBackfill.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteBackfill.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteBackfill.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteBackfill.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteBackfill.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteBackfill.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteHit.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteHit.cs
similarity index 70%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteHit.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteHit.cs
index 0a0dce1d3..f961dceb0 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteHit.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteHit.cs
@@ -3,15 +3,16 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
///
/// One compiled instruction that references a target method, reported under its logical owner.
///
- internal sealed class HotReloadCallSiteHit
+ public sealed class HotReloadCallSiteHit
{
public string CallerAssemblyName;
public HotReloadMetadataTypeName CallerTypeMetadataName;
public string CallerMethodName;
public string[] CallerParameterTypeFullNames;
- public int CallerGenericArity;
+ // Hot-reload code outside the analysis does not read these two.
+ internal int CallerGenericArity;
public string CallerMethodKey;
public string TargetMethodKey;
- public bool IsFunctionPointerLoad;
+ internal bool IsFunctionPointerLoad;
}
}
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteHit.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteHit.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteHit.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteHit.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteLoadBudget.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteLoadBudget.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteLoadBudget.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteLoadBudget.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteLoadBudget.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteLoadBudget.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteLoadBudget.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteLoadBudget.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteScanner.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteScanner.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteScanner.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteScanner.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteScanner.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteScanner.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCallSiteScanner.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCallSiteScanner.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteCache.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteCache.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteCache.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteCache.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteCache.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteCache.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteCache.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteCache.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteIndex.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteIndex.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteIndex.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteIndex.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteIndex.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteIndex.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallSiteIndex.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallSiteIndex.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallers.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallers.cs
similarity index 95%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallers.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallers.cs
index 05375c5bd..3649ac063 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallers.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallers.cs
@@ -12,7 +12,7 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
/// assemblies it read cached between runs. What a run could not read is read in the background
/// after it. Begin every run with .
///
- internal sealed class HotReloadCompiledCallers
+ public sealed class HotReloadCompiledCallers
{
private readonly HotReloadCompiledCallSiteCache _cache;
private readonly HotReloadCallSiteBackfill _backfill;
@@ -43,7 +43,9 @@ public static HotReloadCompiledCallers CreateProduction()
///
/// Finds the compiled call and ldftn sites that reference any of ,
- /// reading every compiled assembly it needs.
+ /// reading every compiled assembly it needs. Call it only while a run begun with
+ /// is open: outside one, a read on another thread may evict and
+ /// dispose a cached assembly this is still reading.
///
public List FindCallSites(string projectRoot, HotReloadCompiledMethodIdentity[] targets)
{
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallers.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallers.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallers.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallers.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallersRun.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallersRun.cs
similarity index 98%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallersRun.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallersRun.cs
index 0d2083720..3bee28e34 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallersRun.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallersRun.cs
@@ -12,7 +12,7 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
/// One run of the compiled-caller analysis: the cached compiled assemblies stay cached until it
/// ends. End it with once the run finished normally; dispose it on every exit.
///
- internal sealed class HotReloadCompiledCallersRun : IDisposable
+ public sealed class HotReloadCompiledCallersRun : IDisposable
{
private readonly IDisposable _hold;
private readonly HotReloadCallSiteBackfill _backfill;
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallersRun.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallersRun.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledCallersRun.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledCallersRun.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledMethodIdentity.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledMethodIdentity.cs
similarity index 70%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledMethodIdentity.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledMethodIdentity.cs
index 65876c820..068ae56f2 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledMethodIdentity.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledMethodIdentity.cs
@@ -5,13 +5,15 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
///
/// Identity of a compiled method to search for (assembly + type + name + arity + parameter types).
///
- internal readonly struct HotReloadCompiledMethodIdentity
+ public readonly struct HotReloadCompiledMethodIdentity
{
- public readonly string AssemblyName;
- public readonly HotReloadMetadataTypeName TypeMetadataName;
- public readonly string MethodName;
- public readonly string[] ParameterTypeFullNames;
- public readonly int GenericArity;
+ // Only the analysis behind the entry point reads these; hot-reload code outside it only
+ // builds this value and passes it in.
+ internal readonly string AssemblyName;
+ internal readonly HotReloadMetadataTypeName TypeMetadataName;
+ internal readonly string MethodName;
+ internal readonly string[] ParameterTypeFullNames;
+ internal readonly int GenericArity;
public HotReloadCompiledMethodIdentity(
string assemblyName,
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledMethodIdentity.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledMethodIdentity.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadCompiledMethodIdentity.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadCompiledMethodIdentity.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerClosure.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerClosure.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerClosure.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerClosure.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerClosure.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerClosure.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerClosure.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerClosure.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteBuilder.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteBuilder.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteBuilder.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteBuilder.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteBuilder.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteBuilder.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteBuilder.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteBuilder.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteEnricher.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteEnricher.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteEnricher.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteEnricher.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteEnricher.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteEnricher.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteEnricher.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteEnricher.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteRequest.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteRequest.cs
similarity index 64%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteRequest.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteRequest.cs
index b58b3316e..115d887ed 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteRequest.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteRequest.cs
@@ -6,7 +6,7 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
/// One method a one-shot lifecycle note is asked for: the compiled identity its callers are
/// searched by and the name the note shows.
///
- internal sealed class HotReloadOneShotCallerNoteRequest
+ public sealed class HotReloadOneShotCallerNoteRequest
{
public HotReloadOneShotCallerNoteRequest(HotReloadCompiledMethodIdentity identity, string method)
{
@@ -16,8 +16,10 @@ public HotReloadOneShotCallerNoteRequest(HotReloadCompiledMethodIdentity identit
Method = method;
}
- public HotReloadCompiledMethodIdentity Identity { get; }
+ // Only the analysis behind the entry point reads these; hot-reload code outside it only
+ // builds this value and passes it in.
+ internal HotReloadCompiledMethodIdentity Identity { get; }
- public string Method { get; }
+ internal string Method { get; }
}
}
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteRequest.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteRequest.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadOneShotCallerNoteRequest.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadOneShotCallerNoteRequest.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadReferencedMethodIndex.cs b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadReferencedMethodIndex.cs
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadReferencedMethodIndex.cs
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadReferencedMethodIndex.cs
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/HotReloadReferencedMethodIndex.cs.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadReferencedMethodIndex.cs.meta
similarity index 100%
rename from Packages/src/Editor/FirstPartyTools/HotReload/HotReloadReferencedMethodIndex.cs.meta
rename to Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/HotReloadReferencedMethodIndex.cs.meta
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef
new file mode 100644
index 000000000..c8892dcb1
--- /dev/null
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef
@@ -0,0 +1,22 @@
+{
+ "name": "UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor",
+ "rootNamespace": "io.github.hatayama.UnityCliLoop.FirstPartyTools",
+ "references": [
+ "GUID:1e3293e9639242278dcb27724b34beb4",
+ "GUID:fc3fd32eddbee40e39c2d76dc184957b",
+ "GUID:24d448abf7c10486d9578018b3a3c54b"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Mono.Cecil.dll"
+ ],
+ "autoReferenced": false,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef.meta b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef.meta
new file mode 100644
index 000000000..8901d9e05
--- /dev/null
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/CompiledCallers/UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b6ba53c1f946045358f72c7981f7b425
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/Shared/AssemblyInfo.cs b/Packages/src/Editor/FirstPartyTools/HotReload/Shared/AssemblyInfo.cs
index 1cadc4918..b56310d3a 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/Shared/AssemblyInfo.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/Shared/AssemblyInfo.cs
@@ -6,6 +6,9 @@
// The introduced-type aggregate builds on this shared kernel.
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.IntroducedType.Editor")]
+// The compiled-caller analysis builds on this shared kernel.
+[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.CompiledCallers.Editor")]
+
// The application assembly composes this part; the split is internal to the hot-reload tool.
[assembly: InternalsVisibleTo("UnityCLILoop.FirstPartyTools.HotReload.Editor")]
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/Shared/HotReloadTypeNames.cs b/Packages/src/Editor/FirstPartyTools/HotReload/Shared/HotReloadTypeNames.cs
index e5d0f5b46..59dc1ae29 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/Shared/HotReloadTypeNames.cs
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/Shared/HotReloadTypeNames.cs
@@ -12,8 +12,9 @@ namespace io.github.hatayama.UnityCliLoop.FirstPartyTools
/// Why a type and not a string: metadata, reflection and display names differ only in the
/// separator of a nested type, so a value that crosses from one world to the other silently
/// stops matching. Holding the world in the type makes the crossing a call, not a habit.
+ /// Public because the compiled-caller analysis exposes it in the types of its entry point.
///
- internal readonly struct HotReloadMetadataTypeName : IEquatable
+ public readonly struct HotReloadMetadataTypeName : IEquatable
{
public string Value { get; }
@@ -87,8 +88,10 @@ public override string ToString()
///
/// A type name in reflection form, the spelling Type.FullName produces, where a nested type
/// reads Outer+Inner.
+ /// Public because HotReloadMetadataTypeName, which the compiled-caller analysis exposes,
+ /// returns it from ToReflectionName.
///
- internal readonly struct HotReloadReflectionTypeName : IEquatable
+ public readonly struct HotReloadReflectionTypeName : IEquatable
{
public string Value { get; }
diff --git a/Packages/src/Editor/FirstPartyTools/HotReload/UnityCLILoop.FirstPartyTools.HotReload.Editor.asmdef b/Packages/src/Editor/FirstPartyTools/HotReload/UnityCLILoop.FirstPartyTools.HotReload.Editor.asmdef
index 641c99af2..370e79149 100644
--- a/Packages/src/Editor/FirstPartyTools/HotReload/UnityCLILoop.FirstPartyTools.HotReload.Editor.asmdef
+++ b/Packages/src/Editor/FirstPartyTools/HotReload/UnityCLILoop.FirstPartyTools.HotReload.Editor.asmdef
@@ -8,7 +8,8 @@
"GUID:0b83f8a313f54fdea6fcf945d7fd0615",
"GUID:384dc39e13234d8aae3b1b1c44c9507e",
"GUID:1e3293e9639242278dcb27724b34beb4",
- "GUID:24d448abf7c10486d9578018b3a3c54b"
+ "GUID:24d448abf7c10486d9578018b3a3c54b",
+ "GUID:b6ba53c1f946045358f72c7981f7b425"
],
"includePlatforms": [
"Editor"