468 Commits over 1,338 Days - 0.01cph!
Simplify ILHotload error report change summary
Add CreateDelegate overloads that accept a target object
Added MethodDescription.CreateDelegate( Type )
Added TypeDescription.MakeGenericType( Type[] )
Uses same access control checks as CreateGeneric( Type[], object[] )
Added MethodDescription.CreateDelegate<T>()
Try to get change summary to actually show up in sentry on ILHotload error
Fixed #1092
Include a change summary during ILHotload errors
Fixed paths to members in hotload sentry reports
Failing test reproducing #1027
Fixed #1027
There might be other reasons why methods won't resolve, will re-open if we encounter that
Handle TypeInitializationException during UpdateReferencesInType more cleanly
Tag ILHotload exceptions with `fast-hotload`
Added IHotloadManaged.Failed(), called when an instance couldn't be upgraded
IHotloadManaged tests
Log some more info when #1027 occurs
Failing test for when lambda signatures change
Warn on lambda signature change, replace with error-throwing delegate
Include member and instance path in hotload error reports
Directly write to Logger during hotloads
Include path and member in hotload log messages
Allow nested FormattableStrings in log messages
So that their args can be inspected too
Implement IsMatchingType for generic type definitions
Fixed IsMatchingType for required modifier types
Don't warn about attempted fast hotload of generic method
Failing test reproducing #1063
Fixed #1063
Support for ConCmd ParamArray arguments
Fix compile time bomb when checking big methods for fast hotload support
Failing test for #1007
Fixed stack overflow when searching for methods with certain parameter types
Fixes #1007
Failing test reproducing sboxgame/issues#3227
Fixed sboxgame/issues#3227
Warn about missing input actions once
Fixed documentation of Compiler.Name
Failing test reproducing #996
Better generic method resolution, fixes #996
Possible fix for sboxgame/issues#3227
Make RPC code gen deterministic
Addon packages should reference package.base too
When loading multiple packages, sort by references
Make sure that a referenced package is loaded before the packages that reference it.
Possible fix for #996
Added test for Package.SortByReferences()
Allow resolving newer versions of assemblies in AccessControl
Fixed publishing addons referencing libraries
* Added helper DistinctReferences / DistinctPackageReferences properties to include all system / package references respectively.
* For addon packages, DistinctPackageReferences will include the parent package.
Package reference fixes (#965)
* Use PackageReference for referencing packages, References for referencing assemblies
* Fixed test passing for the wrong reason
* Rename Compiler.PackageReference to PackageReferences
* Don't fast hotload if a referenced assembly has changed
* More assembly / package reference strictness
* Made generic method resolving / comparing stricter
* We need to re-resolve all member references in fast-hotloaded methods
* More precise logic when deciding if a referencing assembly can be fast-hotloaded
* Constructor resolution regression fix
* Some cleanup in ILGeneratorExtensions
* Hotload.GetMethods helper now matches name
* Access control now caches assembly definitions by name + version
* Assert that the correct assembly definition version is resolved
* Keep exactly the outgoing assembly definition cached, but dispose older versions
* Clean up AccessControl.Resolve a bit
* WIP referencing fast-hotloaded assembly fix
* Fixed unloading IsolatedAssemblyContexts during fast hotload
* Remove some logging
* Fix menu breaking after hotload
* WIP force-reload assemblies that depend on a changed package
* Allow resolving newer assembly versions
* PackageLoader.LoadAssemblyFromPackage cleanup
* Only force an assembly reload if dependent package did a full hotload
* Fix exception in ContextTools.DetermineContext in fast hotloaded methods
* Init TypeLibrary in TestUI.Panels.PanelTests
* Description codegen: just allow multiple [Description] instead of being non-deterministic
Test for Assembly.GetExecutingAssembly()
Failing test reproducing #957
Fix variable types
Although this seems to be non-deterministic, with some cache breaking later replacements
Stricter GenericReference2 test
Fixed #957 by clearing MonoMod's reflection cache
Don't sort generated code blocks inside class groups!
Whoops
Failing test involving generics causing EntryPointNotFoundException
Fixed resolving generic methods
Fixed possible stack overflow when fixing references
Expanded GenericReference test to help investigate
Replacing method now thinks it's inside the original assembly
Fixed references to the wrong assembly in fast hotload
Don't need to relink variable types
Added failing test for changing the body of a lambda
Fixed not being able to resolve private nested types
Fixed #947
Failing test for async methods
#947
Fixed #947 for state machine types
Some safety if ILHotload AST processing throws during Parallel.ForEach
Only run ILHotload AST processing when hotload_fast >= 1
Fall back to normal hotload if exception is thrown during FixReferences
Fast method body hotload (#931)
* 0ms hotload fast path poc when only method bodies change using MonoMod
* Print individual changes during compile, show node paths
* WIP check if all changes are in method bodies
* Add attributes to package assemblies describing changed methods
* SupportsILHotloadAttribute is added if only method bodies change
* MethodBodyChangeAttribute is added for each changed method
* ILHotload looks for SupportsILHotload and MethodBodyChange attributes
* Fixed methods with identical IL not being replaced by ILHotload
* ILHotload should never run with a debugger attached
* Clean up dead code
* Detour using a generated dynamic method copy from the replacing method
* Documentation for Compiler.SyntaxTree.cs
* Added CompilerSettings.SourcePathFilter predicate
* Boilerplate for writing ILHotload tests
* Fixed how file changes are emulated in FastPathTest
* A bit more flexibility in fast path test case code preprocessing
* Added failing fast path hotload test for changing method signatures
* ILHotload: changes must be specifically within a BlockSyntax of a method
* Added Compiler.UpdateParseOptions() for tests to use
* Don't use ILHotload if a preprocessor define changed
* Incremental syntax tree parsing
* Throw when trying to debug an ILHotload swap during a test
* Basic incremental compilation
* Make generated code more deterministic, nicer for incremental compile
* Keep track of which assembly types are actually loaded from
* Re-use compiler options where possible
* Changed fast hotload log to a trace
* Make OnlyMethodBodiesChanged multithreaded, fixed multiple changes in one file
* Failing test for property body changes
* Cleanup ILHotload tests, failing test for overloaded method
* Refactor AST processing for ILHotload
* Fixes after refactor, a bit ugly at the moment
* Support fast hotload for property accessors
* NoticeWidget shows ms if duration < 1s
* Call UISystem.OnHotload after an ILHotload
* ILHotload test for nested blocks
* Fixed ILHotload change detection for nested blocks
* Added hotload_fast engine convar to enable / disable IL hotload
* Added failing test of typeof(T) in method body hotloads
* Failing test for static references
* Fix references to members / types in fast-hotloaded method bodies
* Allow debugging ILHotload in Sandbox.Test
* Test for fast-hotloaded methods with parameter / return types defined in the changed module
* Added failing fast hotload test for compiler-generated type changes
* Don't attempt fast hotload if any compiler-generated type definitions change
* Record event when we ILHotload, matches naming of existing hotloads so we can derive % easily
* Remove defunct code about using cecil as the DMDType, not needed since we fix the references ourselves
---------
Co-authored-by: Matt Stevens <matt@mattstevens.co.uk>
Handle encountering MethodBase operands in GetStackDelta
More helpful error message when trying to get default value of new field
Warn rather than throw if a dictionary key becomes null
Failing test reproducing #933
Warn when unable to find a scope method, instead of error
Fixed error delegates causing an error themselves on upgrade
Fixes #933
Added failing test reproducing #929
Stricter test for #929
Fixed #929
Fixed IServerDll hotload not being able to resolve package assemblies
Fixed ReflectionExtensions.ResolveType
Used to not respect the assembly load context of the target module
Disable detailed hotload diagnostics unless hotload_log >= 2
Add some logging to AsyncTasks.TaskCancel2
To help investigate #210
Allow TaskSource async methods to persist, so they can cancel nicely
Use framework methods to find async state machines / tasks
A bit more protected against changes
Bump up max async task cancellation count
Get rid of debug hotload log
Added failing test reproducing #869
Fixed #869, emit a warning when fields change type instead of an error
Fixed sboxgame/issues#3043
Failing test case to reproduce #876
Fixed #876
HOTLOAD_NOCATCH will stop hotload from catching exceptions
Failing test for lambdas implemented as static methods
Split nested scope method delegate tests
Support for lambdas with nested scope methods
Test for block copying List<T> or T[]
Lists of structs can use array block copying again
More direct copy for StructArrayConverter
Fix possible NRE when logging about methods without declaring types
Fixed setting size of block-copied list
Fixed case where TryLoadGameResource<T> throws instead of returns false
Fixed .csproj for tool packages not referencing EditorBase
Support reading / writing Rays as client input
Escape HTML in console messages, only show first line (#819)
* Escape HTML in console messages
Inspecting stuff still works fine
* Only show the first line of console messages
Inspecting them will show the rest
Demote SwappedOutAssemblyReference error to warning
Group hotload result entries with the same message to avoid console spam
Fixed NRE in HotloadResult.ToString()
Log an exception if one type takes over 80% of total hotload, and >500ms
Added failing hotload test for processing a cleared list
Hotload processes all the elements of the inner array, when they could all be skipped
Added ListUpgrader
Helps with cases like #818
Don't use [CanEdit(SomeType, typeName)] for all SomeType properties
Unless typeName is just "sometype"
https://files.facepunch.com/ziks/1b1711b1/5BoYCf6102.png
Use in-place upgrades where possible in static fields
Fixes #790
Some extra safety in DictionaryUpgrader
For handling in-place upgrades if key hashes change
Support for SceneCamera.Ortho
Added way to ignore assemblies by name in hotloads
Ignore Sandbox.Tools during client / server / menu hotloads
Fixes #765