com.wallstop-studios.dxmessaging 3.0.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +497 -2
  2. package/Editor/Analyzers/BaseCallLogMessageParser.cs.meta +3 -3
  3. package/Editor/Analyzers/BaseCallReportAggregator.cs.meta +3 -3
  4. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +69 -62
  5. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs.meta +3 -3
  6. package/Editor/AssemblyInfo.cs.meta +9 -1
  7. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs.meta +3 -3
  8. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +24 -15
  9. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs.meta +3 -3
  10. package/Editor/CustomEditors/MessagingComponentEditor.cs.meta +9 -1
  11. package/Editor/DxMessagingEditorIdle.cs +62 -0
  12. package/{Runtime/Core/Internal/TypedDispatchLinkIndex.cs.meta → Editor/DxMessagingEditorIdle.cs.meta} +1 -1
  13. package/Editor/DxMessagingEditorInitializer.cs +112 -15
  14. package/Editor/DxMessagingEditorInitializer.cs.meta +9 -1
  15. package/Editor/DxMessagingEditorLog.cs +32 -0
  16. package/Editor/DxMessagingEditorLog.cs.meta +11 -0
  17. package/Editor/DxMessagingMenu.cs.meta +3 -3
  18. package/Editor/DxMessagingSceneBuildProcessor.cs.meta +3 -3
  19. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs +137 -15
  20. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs.meta +3 -3
  21. package/Editor/Settings/DxMessagingSettings.cs +92 -31
  22. package/Editor/Settings/DxMessagingSettings.cs.meta +9 -1
  23. package/Editor/Settings/DxMessagingSettingsProvider.cs.meta +9 -1
  24. package/Editor/SetupCscRsp.cs +539 -304
  25. package/Editor/SetupCscRsp.cs.meta +9 -1
  26. package/Editor/Testing/MessagingComponentEditorHarness.cs +1 -1
  27. package/Editor/Testing/MessagingComponentEditorHarness.cs.meta +9 -1
  28. package/README.md +17 -18
  29. package/{Editor → Runtime}/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +3 -3
  30. package/{Editor → Runtime}/Analyzers/Microsoft.CodeAnalysis.dll.meta +3 -3
  31. package/{Editor → Runtime}/Analyzers/System.Collections.Immutable.dll.meta +3 -3
  32. package/{Editor → Runtime}/Analyzers/System.Reflection.Metadata.dll.meta +3 -3
  33. package/{Editor → Runtime}/Analyzers/System.Runtime.CompilerServices.Unsafe.dll.meta +3 -3
  34. package/Runtime/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
  35. package/Runtime/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +46 -0
  36. package/Runtime/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  37. package/{Editor → Runtime}/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +2 -2
  38. package/Runtime/Analyzers.meta +8 -0
  39. package/Runtime/AssemblyInfo.cs.meta +9 -1
  40. package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs.meta +9 -1
  41. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +9 -1
  42. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs.meta +3 -3
  43. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +2 -4
  44. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs.meta +9 -1
  45. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +9 -1
  46. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +9 -1
  47. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs +56 -0
  48. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs.meta +11 -0
  49. package/Runtime/Core/DataStructure/CyclicBuffer.cs +44 -26
  50. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +9 -1
  51. package/Runtime/Core/Diagnostics/MessageEmissionData.cs.meta +9 -1
  52. package/Runtime/Core/Diagnostics/MessageRegistrationData.cs.meta +9 -1
  53. package/Runtime/Core/Diagnostics/MessageRegistrationType.cs.meta +9 -1
  54. package/Runtime/Core/DxMessagingStaticState.cs.meta +3 -3
  55. package/Runtime/Core/Extensions/EnumExtensions.cs +6 -5
  56. package/Runtime/Core/Extensions/EnumExtensions.cs.meta +9 -1
  57. package/Runtime/Core/Extensions/IListExtensions.cs.meta +9 -1
  58. package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +3 -3
  59. package/Runtime/Core/Extensions/MessageExtensions.cs +0 -60
  60. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +3 -3
  61. package/Runtime/Core/Helper/MessageCache.cs.meta +9 -1
  62. package/Runtime/Core/Helper/MessageHelperIndexer.cs.meta +9 -1
  63. package/Runtime/Core/IMessage.cs.meta +3 -3
  64. package/Runtime/Core/InstanceId.cs +25 -1
  65. package/Runtime/Core/InstanceId.cs.meta +3 -3
  66. package/Runtime/Core/Internal/DxUnsafe.cs +60 -0
  67. package/Runtime/Core/Internal/DxUnsafe.cs.meta +11 -0
  68. package/Runtime/Core/Internal/FlatDispatch.cs +198 -0
  69. package/Runtime/Core/Internal/FlatDispatch.cs.meta +11 -0
  70. package/Runtime/Core/Internal/TypedSlots.cs +47 -21
  71. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +3 -3
  72. package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +3 -3
  73. package/Runtime/Core/MessageBus/IMessageBus.cs +75 -40
  74. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +3 -3
  75. package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +3 -3
  76. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +1 -0
  77. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +3 -3
  78. package/Runtime/Core/MessageBus/Internal/BusSlots.cs +7 -6
  79. package/Runtime/Core/MessageBus/MessageBus.cs +2864 -3413
  80. package/Runtime/Core/MessageBus/MessageBus.cs.meta +3 -3
  81. package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +3 -3
  82. package/Runtime/Core/MessageBus/MessageBusRegistration.cs +207 -0
  83. package/Runtime/Core/MessageBus/MessageBusRegistration.cs.meta +11 -0
  84. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +187 -14
  85. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +3 -3
  86. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +3 -3
  87. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +3 -3
  88. package/Runtime/Core/MessageHandler.cs +2206 -1510
  89. package/Runtime/Core/MessageHandler.cs.meta +3 -3
  90. package/Runtime/Core/MessageRegistrationHandle.cs.meta +3 -3
  91. package/Runtime/Core/MessageRegistrationToken.cs +1667 -812
  92. package/Runtime/Core/MessageRegistrationToken.cs.meta +3 -3
  93. package/Runtime/Core/Messages/GlobalStringMessage.cs.meta +9 -1
  94. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +3 -3
  95. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +3 -3
  96. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +3 -3
  97. package/Runtime/Core/Messages/ReflexiveMessage.cs.meta +9 -1
  98. package/Runtime/Core/Messages/SourcedStringMessage.cs.meta +3 -3
  99. package/Runtime/Core/Messages/StringMessage.cs.meta +9 -1
  100. package/Runtime/Core/MessagingDebug.cs.meta +3 -3
  101. package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +3 -3
  102. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +3 -3
  103. package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +3 -3
  104. package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +9 -1
  105. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +3 -3
  106. package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +9 -1
  107. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +3 -3
  108. package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +9 -1
  109. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +3 -3
  110. package/Runtime/Unity/MessageAwareComponent.cs +46 -1
  111. package/Runtime/Unity/MessageAwareComponent.cs.meta +3 -3
  112. package/Runtime/Unity/MessageBusProviderHandle.cs.meta +3 -3
  113. package/Runtime/Unity/MessagingComponent.cs +43 -10
  114. package/Runtime/Unity/MessagingComponent.cs.meta +3 -3
  115. package/Runtime/Unity/MessagingComponentInstaller.cs.meta +3 -3
  116. package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +3 -3
  117. package/Runtime/WallstopStudios.DxMessaging.asmdef +1 -1
  118. package/Samples~/DI/README.md +7 -7
  119. package/Samples~/DI/Reflex/SampleInstaller.cs.meta +3 -3
  120. package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +3 -3
  121. package/Samples~/DI/Zenject/SampleInstaller.cs.meta +3 -3
  122. package/Samples~/Mini Combat/Boot.cs.meta +3 -3
  123. package/Samples~/Mini Combat/Enemy.cs.meta +3 -3
  124. package/Samples~/Mini Combat/Messages.cs.meta +3 -3
  125. package/Samples~/Mini Combat/Player.cs.meta +3 -3
  126. package/Samples~/Mini Combat/UIOverlay.cs.meta +3 -3
  127. package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs.meta +3 -3
  128. package/Samples~/UI Buttons + Inspector/Messages.cs.meta +3 -3
  129. package/Samples~/UI Buttons + Inspector/MessagingObserver.cs.meta +3 -3
  130. package/Samples~/UI Buttons + Inspector/UIButtonEmitter.cs.meta +3 -3
  131. package/SourceGenerators/Directory.Build.props +50 -3
  132. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +96 -63
  133. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs.meta +3 -3
  134. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +745 -87
  135. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs.meta +9 -1
  136. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +40 -46
  137. package/SourceGenerators/global.json +7 -0
  138. package/SourceGenerators/global.json.meta +7 -0
  139. package/package.json +30 -40
  140. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
  141. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +0 -33
  142. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  143. package/Runtime/Core/Internal/TypedDispatchLinkIndex.cs +0 -51
  144. /package/{Editor → Runtime}/Analyzers/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  145. /package/{Editor → Runtime}/Analyzers/Microsoft.CodeAnalysis.dll +0 -0
  146. /package/{Editor → Runtime}/Analyzers/System.Collections.Immutable.dll +0 -0
  147. /package/{Editor → Runtime}/Analyzers/System.Reflection.Metadata.dll +0 -0
  148. /package/{Editor → Runtime}/Analyzers/System.Runtime.CompilerServices.Unsafe.dll +0 -0
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 54bd01ff5fd34bbc9950a1c7230a15d8
3
- timeCreated: 1730841461
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -39,7 +39,7 @@ namespace DxMessaging.Editor.Testing
39
39
  }
40
40
 
41
41
  List<ListenerDiagnosticsView> listenerViews = component
42
- ._registeredListeners.OrderBy(pair => pair.Key.GetInstanceID())
42
+ ._registeredListeners.OrderBy(pair => InstanceId.StableId(pair.Key))
43
43
  .Select(pair => CreateListenerView(pair.Key, pair.Value))
44
44
  .ToList();
45
45
 
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 2624c9e8eb5243ebb71545774f411c2c
3
- timeCreated: 1761880591
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/README.md CHANGED
@@ -5,18 +5,17 @@
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
- <a href="https://wallstop.github.io/DxMessaging/">
8
+ <a href="https://ambiguous-interactive.github.io/DxMessaging/">
9
9
  <img src="https://img.shields.io/badge/Full_Documentation-Visit_the_Docs_Site-2ea44f?style=for-the-badge" alt="Full Documentation" />
10
10
  </a>
11
11
  </p>
12
12
 
13
- [![Unity](https://img.shields.io/badge/Unity-2021.3+-black.svg)](https://unity.com/releases/editor)<br/>
13
+ [![Unity](https://img.shields.io/badge/Unity-2021.3+-black.svg)](https://unity.com/releases/editor/archive)<br/>
14
14
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)<br/>
15
15
  [![openupm](https://img.shields.io/npm/v/com.wallstop-studios.dxmessaging?label=openupm&registry_uri=https://package.openupm.com)](https://openupm.com/packages/com.wallstop-studios.dxmessaging/)<br/>
16
16
  [![Version](https://img.shields.io/npm/v/com.wallstop-studios.dxmessaging.svg)](https://www.npmjs.com/package/com.wallstop-studios.dxmessaging)<br/>
17
- [![Performance: OS-Specific Benchmarks](https://img.shields.io/badge/Performance-OS--specific-blueviolet.svg)](docs/architecture/performance.md)<br/>
18
- [![Markdown Link Validity](https://github.com/wallstop/DxMessaging/actions/workflows/markdown-link-validity.yml/badge.svg)](https://github.com/wallstop/DxMessaging/actions/workflows/markdown-link-validity.yml)<br/>
19
- [![Markdown Link Text Check](https://github.com/wallstop/DxMessaging/actions/workflows/markdown-link-text-check.yml/badge.svg)](https://github.com/wallstop/DxMessaging/actions/workflows/markdown-link-text-check.yml)
17
+ [![Performance: Standalone (IL2CPP)](<https://img.shields.io/badge/Performance-Standalone%20(IL2CPP)-blueviolet.svg>)](docs/architecture/performance.md)<br/>
18
+ [![Markdown Link Validity](https://github.com/Ambiguous-Interactive/DxMessaging/actions/workflows/markdown-link-validity.yml/badge.svg)](https://github.com/Ambiguous-Interactive/DxMessaging/actions/workflows/markdown-link-validity.yml)
20
19
 
21
20
  > **🤖 AI Assistance Disclosure:**
22
21
  >
@@ -90,7 +89,7 @@ You have data. You need to pass it around. That's the problem. DxMessaging provi
90
89
 
91
90
  ### The Three Message Types: Real-World Analogies
92
91
 
93
- > 💡 _Diagrams below require Mermaid support. If they don't render, try viewing this file directly on [GitHub](https://github.com/wallstop/DxMessaging)._
92
+ > 💡 _Diagrams below require Mermaid support. If they don't render, try viewing this file directly on [GitHub](https://github.com/Ambiguous-Interactive/DxMessaging)._
94
93
 
95
94
  Each message type maps to a real-world communication pattern:
96
95
 
@@ -192,7 +191,7 @@ openupm add com.wallstop-studios.dxmessaging
192
191
 
193
192
  ```bash
194
193
  # Unity Package Manager > Add package from git URL...
195
- https://github.com/wallstop/DxMessaging.git
194
+ https://github.com/Ambiguous-Interactive/DxMessaging.git
196
195
  ```
197
196
 
198
197
  See the [Install Guide](docs/getting-started/install.md) for all options including NPM scoped registries and local tarballs.
@@ -340,7 +339,7 @@ flowchart TD
340
339
 
341
340
  **Rule of thumb:** If decoupling, lifecycle leaks, or handler-ordering bugs match what you're hitting today, DxMessaging fits. If none of those describe your project, start with the [Visual Guide](docs/getting-started/visual-guide.md) or stick with simpler patterns.
342
341
 
343
- Looking for hard numbers? See OS-specific [Performance Benchmarks](docs/architecture/performance.md).
342
+ Looking for hard numbers? See the Standalone IL2CPP dispatch and library-comparison [Performance Benchmarks](docs/architecture/performance.md).
344
343
 
345
344
  ## Why DxMessaging
346
345
 
@@ -672,8 +671,8 @@ public void TestAchievementSystem() {
672
671
 
673
672
  ## Documentation
674
673
 
675
- - **[Documentation Site](https://wallstop.github.io/DxMessaging/)** - Full searchable documentation
676
- - **[Wiki](https://github.com/wallstop/DxMessaging/wiki)** - Quick reference wiki
674
+ - **[Documentation Site](https://ambiguous-interactive.github.io/DxMessaging/)** - Full searchable documentation
675
+ - **[Wiki](https://github.com/Ambiguous-Interactive/DxMessaging/wiki)** - Quick reference wiki
677
676
  - **[Changelog](CHANGELOG.md)** - Version history
678
677
 
679
678
  ### Learn
@@ -738,7 +737,7 @@ See the [DI Compatible section](#dependency-injection-di-compatible) above for a
738
737
  | ------------------- | --------------------------------- | -------------------------------- | --------------- | -------------- |
739
738
  | **DxMessaging** | Unity pub/sub with lifecycle mgmt | Inspector debugging + control | Built for Unity | Moderate |
740
739
  | **UniRx** | Complex event stream transforms | Reactive operators (LINQ) | Built for Unity | Easy |
741
- | **MessagePipe** | High-performance DI messaging | Highest throughput (97M ops/sec) | Built for Unity | Steep |
740
+ | **MessagePipe** | High-performance DI messaging | Highest throughput (74M ops/sec) | Built for Unity | Steep |
742
741
  | **Zenject Signals** | DI-integrated messaging | Zenject ecosystem | Built for Unity | Easy |
743
742
  | **C# Events** | Simple, local communication | Minimal overhead | Native C# | Steepest |
744
743
 
@@ -832,7 +831,7 @@ public class AchievementTracker : MessageAwareComponent {
832
831
 
833
832
  See [Design & Architecture](docs/architecture/design-and-architecture.md#performance-optimizations) for details.
834
833
 
835
- For OS-specific benchmark tables generated by PlayMode tests, see [Performance Benchmarks](docs/architecture/performance.md).
834
+ For live, CI-generated Standalone IL2CPP dispatch tables and a cross-library comparison matrix, see [Performance Benchmarks](docs/architecture/performance.md). Those numbers are auto-generated on every push with the .NET Standard 2.1 profile and a Release build; the comparison table below is a static summary, not the live data.
836
835
 
837
836
  ## Comparison Table
838
837
 
@@ -851,7 +850,7 @@ For OS-specific benchmark tables generated by PlayMode tests, see [Performance B
851
850
  | **Interceptors** | Pipeline | No | Filters | No |
852
851
  | **Post-Processing** | Dedicated | No | Filters | No |
853
852
  | **Stream Operators** | No | Extensive | No | With UniRx |
854
- | **Performance** | Good (10-17M) | Good (18M) | High (97M) | Moderate (2.5M) |
853
+ | **Performance** | Good (27M) | Moderate (4M) | High (74M) | Moderate (2M) |
855
854
  | **Dependencies** | None | UniTask | None | Zenject |
856
855
 
857
856
  ### Comparison with Traditional Approaches
@@ -896,10 +895,10 @@ Created and maintained by [wallstop studios](https://wallstopstudios.com)
896
895
 
897
896
  ## Links
898
897
 
899
- - [Package on GitHub](https://github.com/wallstop/DxMessaging)
900
- - [Report Issues](https://github.com/wallstop/DxMessaging/issues)
901
- - [Documentation Site](https://wallstop.github.io/DxMessaging/)
902
- - [Wiki](https://github.com/wallstop/DxMessaging/wiki)
898
+ - [Package on GitHub](https://github.com/Ambiguous-Interactive/DxMessaging)
899
+ - [Report Issues](https://github.com/Ambiguous-Interactive/DxMessaging/issues)
900
+ - [Documentation Site](https://ambiguous-interactive.github.io/DxMessaging/)
901
+ - [Wiki](https://github.com/Ambiguous-Interactive/DxMessaging/wiki)
903
902
 
904
903
  ## AI Agent Integration
905
904
 
@@ -909,7 +908,7 @@ DxMessaging publishes machine-readable context for AI agents through [llms.txt](
909
908
 
910
909
  - **[llms.txt](llms.txt)** -- Complete project overview, API reference, and context in a single file
911
910
  - **[Repository Guidelines](.llm/context.md)** -- Coding standards and development workflows
912
- - **[AI Agent Skills](.llm/skills/)** -- 140+ specialized skill documents covering documentation, testing, GitHub Actions, and more
911
+ - **[AI Agent Skills](.llm/skills/)** -- 157+ specialized skill documents covering documentation, testing, GitHub Actions, and more
913
912
 
914
913
  The `llms.txt` file is automatically updated via CI/CD to stay current with project changes. It includes:
915
914
 
@@ -16,21 +16,21 @@ PluginImporter:
16
16
  second:
17
17
  enabled: 0
18
18
  settings:
19
- Exclude Editor: 0
19
+ Exclude Editor: 1
20
20
  Exclude Linux64: 1
21
21
  Exclude OSXUniversal: 1
22
22
  Exclude WebGL: 1
23
23
  Exclude Win: 1
24
24
  Exclude Win64: 1
25
25
  - first:
26
- Any:
26
+ Any:
27
27
  second:
28
28
  enabled: 0
29
29
  settings: {}
30
30
  - first:
31
31
  Editor: Editor
32
32
  second:
33
- enabled: 1
33
+ enabled: 0
34
34
  settings:
35
35
  DefaultValueInitialized: true
36
36
  - first:
@@ -16,21 +16,21 @@ PluginImporter:
16
16
  second:
17
17
  enabled: 0
18
18
  settings:
19
- Exclude Editor: 0
19
+ Exclude Editor: 1
20
20
  Exclude Linux64: 1
21
21
  Exclude OSXUniversal: 1
22
22
  Exclude WebGL: 1
23
23
  Exclude Win: 1
24
24
  Exclude Win64: 1
25
25
  - first:
26
- Any:
26
+ Any:
27
27
  second:
28
28
  enabled: 0
29
29
  settings: {}
30
30
  - first:
31
31
  Editor: Editor
32
32
  second:
33
- enabled: 1
33
+ enabled: 0
34
34
  settings:
35
35
  DefaultValueInitialized: true
36
36
  - first:
@@ -16,21 +16,21 @@ PluginImporter:
16
16
  second:
17
17
  enabled: 0
18
18
  settings:
19
- Exclude Editor: 0
19
+ Exclude Editor: 1
20
20
  Exclude Linux64: 1
21
21
  Exclude OSXUniversal: 1
22
22
  Exclude WebGL: 1
23
23
  Exclude Win: 1
24
24
  Exclude Win64: 1
25
25
  - first:
26
- Any:
26
+ Any:
27
27
  second:
28
28
  enabled: 0
29
29
  settings: {}
30
30
  - first:
31
31
  Editor: Editor
32
32
  second:
33
- enabled: 1
33
+ enabled: 0
34
34
  settings:
35
35
  DefaultValueInitialized: true
36
36
  - first:
@@ -16,21 +16,21 @@ PluginImporter:
16
16
  second:
17
17
  enabled: 0
18
18
  settings:
19
- Exclude Editor: 0
19
+ Exclude Editor: 1
20
20
  Exclude Linux64: 1
21
21
  Exclude OSXUniversal: 1
22
22
  Exclude WebGL: 1
23
23
  Exclude Win: 1
24
24
  Exclude Win64: 1
25
25
  - first:
26
- Any:
26
+ Any:
27
27
  second:
28
28
  enabled: 0
29
29
  settings: {}
30
30
  - first:
31
31
  Editor: Editor
32
32
  second:
33
- enabled: 1
33
+ enabled: 0
34
34
  settings:
35
35
  DefaultValueInitialized: true
36
36
  - first:
@@ -16,21 +16,21 @@ PluginImporter:
16
16
  second:
17
17
  enabled: 0
18
18
  settings:
19
- Exclude Editor: 0
19
+ Exclude Editor: 1
20
20
  Exclude Linux64: 1
21
21
  Exclude OSXUniversal: 1
22
22
  Exclude WebGL: 1
23
23
  Exclude Win: 1
24
24
  Exclude Win64: 1
25
25
  - first:
26
- Any:
26
+ Any:
27
27
  second:
28
28
  enabled: 0
29
29
  settings: {}
30
30
  - first:
31
31
  Editor: Editor
32
32
  second:
33
- enabled: 1
33
+ enabled: 0
34
34
  settings:
35
35
  DefaultValueInitialized: true
36
36
  - first:
@@ -0,0 +1,46 @@
1
+ fileFormatVersion: 2
2
+ guid: e02b032423e347e9a1ae26bb48fdc978
3
+ labels:
4
+ - RoslynAnalyzer
5
+ PluginImporter:
6
+ externalObjects: {}
7
+ serializedVersion: 2
8
+ iconMap: {}
9
+ executionOrder: {}
10
+ defineConstraints: []
11
+ isPreloaded: 0
12
+ isOverridable: 1
13
+ isExplicitlyReferenced: 0
14
+ validateReferences: 1
15
+ platformData:
16
+ - first:
17
+ : Any
18
+ second:
19
+ enabled: 0
20
+ settings:
21
+ Exclude Editor: 1
22
+ Exclude Linux64: 1
23
+ Exclude OSXUniversal: 1
24
+ Exclude WebGL: 1
25
+ Exclude Win: 1
26
+ Exclude Win64: 1
27
+ - first:
28
+ Any:
29
+ second:
30
+ enabled: 0
31
+ settings: {}
32
+ - first:
33
+ Editor: Editor
34
+ second:
35
+ enabled: 0
36
+ settings:
37
+ DefaultValueInitialized: true
38
+ - first:
39
+ Windows Store Apps: WindowsStoreApps
40
+ second:
41
+ enabled: 0
42
+ settings:
43
+ CPU: AnyCPU
44
+ userData:
45
+ assetBundleName:
46
+ assetBundleVariant:
@@ -18,7 +18,7 @@ PluginImporter:
18
18
  second:
19
19
  enabled: 0
20
20
  settings:
21
- Exclude Editor: 0
21
+ Exclude Editor: 1
22
22
  Exclude Linux64: 1
23
23
  Exclude OSXUniversal: 1
24
24
  Exclude WebGL: 1
@@ -32,7 +32,7 @@ PluginImporter:
32
32
  - first:
33
33
  Editor: Editor
34
34
  second:
35
- enabled: 1
35
+ enabled: 0
36
36
  settings:
37
37
  CPU: AnyCPU
38
38
  DefaultValueInitialized: true
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 9b74c5a1c1a3530ec597b257c46ad4b0
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 83aab80bf265483fb08c5f884e4b24fc
3
- timeCreated: 1759525804
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: bef6adb9baf545129cb9a841b13da451
3
- timeCreated: 1749776355
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 73fd653a34be4f36b5773dce342ae9fa
3
- timeCreated: 1730779174
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -6,6 +6,6 @@ MonoImporter:
6
6
  defaultReferences: []
7
7
  executionOrder: 0
8
8
  icon: {instanceID: 0}
9
- userData:
10
- assetBundleName:
11
- assetBundleVariant:
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -8,6 +8,8 @@ namespace DxMessaging.Core.Attributes
8
8
  /// <remarks>
9
9
  /// The source generator will emit a constructor parameter with a default value for fields annotated
10
10
  /// with this attribute. This is helpful for messages with sensible defaults.
11
+ /// Overloads accepting explicit default values require compile-time constants and are validated by
12
+ /// the source generator against the field type.
11
13
  /// </remarks>
12
14
  /// <example>
13
15
  /// <code>
@@ -27,10 +29,6 @@ namespace DxMessaging.Core.Attributes
27
29
  /// </summary>
28
30
  public DxOptionalParameterAttribute() { }
29
31
 
30
- /// <summary>
31
- /// Optional default value overloads. Values must be compile-time constants and
32
- /// will be validated by the source generator against the field type.
33
- /// </summary>
34
32
  /// <summary>
35
33
  /// Initializes the attribute with the specified default boolean value.
36
34
  /// </summary>
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 87d96cdf2fc74f40ba77ae0d157be964
3
- timeCreated: 1749850608
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: ab2509dd51f5467d95b4fca1cb794b29
3
- timeCreated: 1730779159
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1,3 +1,11 @@
1
1
  fileFormatVersion: 2
2
2
  guid: 418b461df3764ef6896dc86524a00132
3
- timeCreated: 1730779131
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,56 @@
1
+ // Vendored copy of Unity's Il2CppSetOption attribute. The IL2CPP code
2
+ // generator (il2cpp.exe) matches this attribute by its FULL NAME
3
+ // (Unity.IL2CPP.CompilerServices.Il2CppSetOptionAttribute), not by assembly,
4
+ // so an internal per-assembly copy is the sanctioned way for a package to opt
5
+ // hot methods out of generated null/bounds checks (the same pattern UniTask
6
+ // and other performance-focused packages use). The shape below mirrors the
7
+ // attribute source Unity publishes in the IL2CPP documentation; do not add
8
+ // members or change the namespace. Under Mono (editor, Mono players) the
9
+ // attribute is inert.
10
+ namespace Unity.IL2CPP.CompilerServices
11
+ {
12
+ using System;
13
+
14
+ /// <summary>
15
+ /// Runtime checks that il2cpp.exe can omit for an annotated scope.
16
+ /// </summary>
17
+ internal enum Option
18
+ {
19
+ /// <summary>Implicit null checks before member access.</summary>
20
+ NullChecks = 1,
21
+
22
+ /// <summary>Array bounds checks on element access.</summary>
23
+ ArrayBoundsChecks = 2,
24
+
25
+ /// <summary>Integer divide-by-zero checks.</summary>
26
+ DivideByZeroChecks = 3,
27
+ }
28
+
29
+ /// <summary>
30
+ /// Instructs the IL2CPP code generator to enable or disable a runtime
31
+ /// check for the annotated type, method, or property.
32
+ /// </summary>
33
+ /// <remarks>
34
+ /// Only apply with <c>false</c> to code whose safety invariants are
35
+ /// guaranteed by construction and covered by tests: with checks disabled,
36
+ /// a violated invariant is memory corruption instead of a managed
37
+ /// exception.
38
+ /// </remarks>
39
+ [AttributeUsage(
40
+ AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property,
41
+ Inherited = false,
42
+ AllowMultiple = true
43
+ )]
44
+ internal sealed class Il2CppSetOptionAttribute : Attribute
45
+ {
46
+ public Option Option { get; private set; }
47
+
48
+ public object Value { get; private set; }
49
+
50
+ public Il2CppSetOptionAttribute(Option option, object value)
51
+ {
52
+ Option = option;
53
+ Value = value;
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 45b1a17f8c10b654c9ba5cd3e70e5f9e
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -77,6 +77,8 @@ namespace DxMessaging.Core.DataStructure
77
77
  private readonly List<T> _cache;
78
78
  private int _position;
79
79
 
80
+ internal int ScratchCacheCount => _cache.Count;
81
+
80
82
  /// <summary>
81
83
  /// Accesses the element at the specified chronological index (0 = oldest).
82
84
  /// </summary>
@@ -180,30 +182,37 @@ namespace DxMessaging.Core.DataStructure
180
182
  comparer ??= EqualityComparer<T>.Default;
181
183
 
182
184
  _cache.Clear();
183
- for (int i = 0; i < Count; ++i)
185
+ try
184
186
  {
185
- _cache.Add(_buffer[AdjustedIndexFor(i)]);
186
- }
187
+ for (int i = 0; i < Count; ++i)
188
+ {
189
+ _cache.Add(_buffer[AdjustedIndexFor(i)]);
190
+ }
187
191
 
188
- // Find and remove the element
189
- bool removed = false;
190
- for (int i = 0; i < _cache.Count; ++i)
191
- {
192
- if (comparer.Equals(_cache[i], element))
192
+ // Find and remove the element
193
+ bool removed = false;
194
+ for (int i = 0; i < _cache.Count; ++i)
193
195
  {
194
- _cache.RemoveAt(i);
195
- removed = true;
196
- break;
196
+ if (comparer.Equals(_cache[i], element))
197
+ {
198
+ _cache.RemoveAt(i);
199
+ removed = true;
200
+ break;
201
+ }
197
202
  }
198
- }
199
203
 
200
- if (!removed)
204
+ if (!removed)
205
+ {
206
+ return false;
207
+ }
208
+
209
+ RebuildFromCache();
210
+ return true;
211
+ }
212
+ finally
201
213
  {
202
- return false;
214
+ _cache.Clear();
203
215
  }
204
-
205
- RebuildFromCache();
206
- return true;
207
216
  }
208
217
 
209
218
  /// <summary>
@@ -219,19 +228,26 @@ namespace DxMessaging.Core.DataStructure
219
228
  }
220
229
 
221
230
  _cache.Clear();
222
- for (int i = 0; i < Count; ++i)
231
+ try
223
232
  {
224
- _cache.Add(_buffer[AdjustedIndexFor(i)]);
225
- }
233
+ for (int i = 0; i < Count; ++i)
234
+ {
235
+ _cache.Add(_buffer[AdjustedIndexFor(i)]);
236
+ }
237
+
238
+ int removedCount = _cache.RemoveAll(predicate);
239
+ if (removedCount == 0)
240
+ {
241
+ return 0;
242
+ }
226
243
 
227
- int removedCount = _cache.RemoveAll(predicate);
228
- if (removedCount == 0)
244
+ RebuildFromCache();
245
+ return removedCount;
246
+ }
247
+ finally
229
248
  {
230
- return 0;
249
+ _cache.Clear();
231
250
  }
232
-
233
- RebuildFromCache();
234
- return removedCount;
235
251
  }
236
252
 
237
253
  private void RebuildFromCache()
@@ -240,6 +256,7 @@ namespace DxMessaging.Core.DataStructure
240
256
  _buffer.AddRange(_cache);
241
257
  Count = _cache.Count;
242
258
  _position = Count < Capacity ? Count : 0;
259
+ _cache.Clear();
243
260
  }
244
261
 
245
262
  /// <summary>
@@ -250,6 +267,7 @@ namespace DxMessaging.Core.DataStructure
250
267
  Count = 0;
251
268
  _position = 0;
252
269
  _buffer.Clear();
270
+ _cache.Clear();
253
271
  }
254
272
 
255
273
  /// <summary>