PatchHandle
One live patch: its id, what it wove, and how it has behaved since. Returned by Patches.onEnter / Patches.onExit and read back later by Patches.handle.
A live view, not a snapshot — targets fills itself in when a pending patch's class finally loads, so re-reading is the point rather than a caveat. Removal is not on it: Patches.remove is the way out, so the registry that lists a patch is also what unweaves it — and detached is what one that threw halfway leaves behind.
Constructors
Types
Properties
What Patches.handle and Patches.remove take: the install call echoed back in the caller's own spelling, not the methods it resolved to — those are targets. Minted per install, so an id kept across a re-install reads as gone instead of naming the replacement.
Stays registered after install, so a pending patch that fails when its class arrives lands here too.
Set the first time the target type is transformed, i.e. once the answer is actually known.
The type this patch was installed against, as Unweave.retransform batches on it.
What ByteBuddy threw while weaving, or null if the advice went in. Non-null means targets names what Patch.weave picked before the failure, not methods the advice actually reached.
Functions
Phase 1 of removal: deregister, leaving the advice woven. Pair with finish, one Unweave.retransform over every detached patch's class in between — that is what makes a sweep of N patches cost one retransform instead of N.
Phase 3: the advice is gone, so the bridge entry can go too. Unregistering any earlier would leave the still-woven advice boxing its arguments for a lookup that can never hit.
targets in the form a signature filter takes, null under the same "not known yet" condition.