fix: Error on SyncVar Writing in Generic #4093
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes #3654
Problem
SyncVar writes in generic base classes are emitted as
FieldReferenceeven within the same assembly.The Weaver currently treats all
FieldReferencewrites as cross-assembly access and errors.I tested around and so basically the moment you got something like
mySyncVar = <someValue>in your generic class, no matter if its in a method or the constructor, you will recieve the following error:This error has its roots in the
SyncVarAttributeAccessReplacer.csand still occurs in the latest version of Mirror.Fix
Resolve
FieldReferenceand allow SyncVar writes when the resolvedFieldDefinitionbelongs to the same module.Result
SyncVars in generic base classes can now be written without triggering false cross-assembly errors.
Unit Tests passed normally and in a basic test scenario the syncVars worked as expected by syncing the correct values.