mirror of https://github.com/icsharpcode/ILSpy.git
Tree:
fc9d945e95
christophwille/closedhierarchies
christophwille/contributing
christophwille/decompilerdocs
christophwille/membench
claude/ilspy-pr-3839-review-uo8q7r
collection-expression-tests
copilot/add-field-keyword-auto-properties
deconstruction-fixes
fix-3475-anonymous-type-null
fix-3860-outvar-explicit-type
fix/3465
fix/3518
gh-pages
issue1638
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
stash/beautify-enum-member-declarations
stash/dynamic-await
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ noResults }
4 Commits (fc9d945e95d7adcb00bf82bd061b76829bd15fb5)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
0b1f3d7934 |
Reconcile the live bookmark list on save instead of rebuilding it
Every save reloaded the JSON sidecar into fresh instances and then replaced the whole observable collection with Clear()+Add(). That dropped and re-added every bookmark on each toggle or edit: the bookmarks pane keeps its selection by reference, so it was cleared on every change (leaving the toolbar acting on a stale or null selection), the grid's scroll reset, and a checkbox/name edit made from the grid re-entered the DataGrid mid-edit while its ItemsSource was torn down and rebuilt. Reconcile in place instead: keep the existing instance for any anchor still present (refreshing only its editable Name/Enabled), remove anchors that are gone, and append new ones. A name/enabled edit leaves the membership unchanged, so it now touches the collection not at all; structural changes touch only the affected rows. Instance identity is preserved, so the pane's selection and the gutter's references survive. Assisted-by: Claude:claude-opus-4-8:Claude Code |
1 week ago |
|
|
85a189978c |
Keep bookmarks intact when a Replace import hits a corrupt file
Import read the chosen file through the tolerant sidecar-load path, which maps a missing, empty, or unparseable file all to an empty list. Replace mode then cleared the saved list and wrote the empty result back, so picking a corrupt or non-bookmark JSON file for a Replace import silently destroyed the user's bookmarks. Import now reads through TryReadFrom, which distinguishes a valid (possibly empty) file from a parse/read failure. A failure leaves the live and saved lists untouched and returns false so the pane can report it; a valid empty file still legitimately clears the list in Replace mode. The normal sidecar load keeps its tolerant behavior. Assisted-by: Claude:claude-opus-4-8:Claude Code |
1 week ago |
|
|
8997b42f2b |
Complete bookmark backlog follow-ups
Bookmarks now capture and restore the requested decompiler view state, support rendered-line fallback anchors, expose hover and pane location affordances, route bookmark context-menu actions through the clicked offset, and update the JSON sidecar under a mutex so concurrent instances do not overwrite unrelated bookmark edits. The plan file records the completed checklist and the remaining manual smoke-test gap. Assisted-by: CodeAlta:gpt-5.5:CodeAlta |
1 week ago |
|
|
39d9020efd |
Add a bookmarks feature for the decompiled C# view
There was no way to mark and return to interesting spots in decompiled code. This adds a flat (no folders, no labels) bookmark list: toggle on a line from the context menu, the gutter, or Ctrl+B; see an icon in a new left-margin gutter that honours a disabled state; and manage the list in a dockable pane that auto-registers in the Window menu. Bookmarks anchor by metadata token, never by a raw line number, so they survive re-decompilation and decompiler-setting changes that reflow the C# text: a definition line anchors to its token, while a line inside a method body anchors to the method token plus an IL offset. Recovering an IL offset needs the decompiler's sequence points, which the normal C# output did not carry, so they are captured once at the WriteCode chokepoint and stored as a per-document line/offset map. The map is also what places gutter icons and scrolls navigation to the exact line. The list persists to an ILSpy.Bookmarks.json sidecar next to ILSpy.xml; the path logic is extracted into AppEnv/ConfigurationFiles so the dock layout sidecar shares it. Navigating to a bookmark loads its assembly from disk if it dropped out of the list (and only then offers to remove a bookmark whose file is gone), then centres the line and plays a brief line flash plus a gutter-icon pulse. Disabled bookmarks stay visible but are skipped by the next/previous actions. Assisted-by: Claude:claude-opus-4-8:Claude Code |
1 week ago |