B&W print-friendly diagrams + tinkerpop-0001 + wave-3 proof sections. Squash of 94 local commits onto remote master.
60 lines
2.9 KiB
Text
60 lines
2.9 KiB
Text
// Diagram: ModuleHashesBuilder$TopoSorter defect (ticket 0003)
|
|
// Shows the Deque.contains() pattern in java.base and its scope.
|
|
//
|
|
// Render: dot -Tsvg 0003-module-topo-deque.dot -o 0003-module-topo-deque.svg
|
|
|
|
digraph module_topo {
|
|
graph [
|
|
label="ModuleHashesBuilder$TopoSorter: Deque.contains() in java.base\n(Same pattern as 0001, different module, different layer)"
|
|
labelloc=t fontsize=13 fontname="monospace" bgcolor="#f8f8f8" pad=0.6
|
|
rankdir=TB
|
|
]
|
|
node [fontname="monospace" fontsize=10]
|
|
edge [fontname="monospace" fontsize=9]
|
|
|
|
// ── Call chain ────────────────────────────────────────────────────────────
|
|
jlink [
|
|
label="jlink\n(custom runtime image builder)"
|
|
shape=box style="filled,rounded" fillcolor="#dde8ff"
|
|
]
|
|
|
|
mhb [
|
|
label="ModuleHashesBuilder.computeHashes()\njava.base/jdk.internal.module"
|
|
shape=box style="filled,rounded" fillcolor="#dde8ff"
|
|
]
|
|
|
|
topo [
|
|
label="new TopoSorter(graph)\n→ sort() → visit()"
|
|
shape=box style="filled,rounded" fillcolor="#fff0cc"
|
|
]
|
|
|
|
// ── The defect ────────────────────────────────────────────────────────────
|
|
defect [
|
|
label="visit(node, visited, stack)\n\nDeque.contains(node) ← DEFECT\nbytecode instr 57:\ninvokeinterface Deque.contains:(Object)Z\n\nArrayDeque.contains() = O(N) linear scan"
|
|
shape=box style=filled fillcolor="#ffcccc" penwidth=3
|
|
]
|
|
|
|
fix [
|
|
label="FIX: HashSet<T> onStack\nonStack.contains(node) ← O(1)\nAdd on push, remove on pop"
|
|
shape=box style="filled,rounded" fillcolor="#ccffcc" penwidth=2
|
|
]
|
|
|
|
// ── Module scope ──────────────────────────────────────────────────────────
|
|
scope [
|
|
label="Scope: java.base\nPresent in every JDK + JRE\nLoaded by every JVM process"
|
|
shape=ellipse style=filled fillcolor="#ffeeaa" penwidth=2
|
|
]
|
|
|
|
// ── Comparison to 0001 ────────────────────────────────────────────────────
|
|
cmp [
|
|
label="0001: GraphUtils$Tarjan (jdk.compiler)\n stack.contains(n) → n.active\n\n0003: ModuleHashesBuilder$TopoSorter (java.base)\n stack.contains(n) → onStack.contains(n)\n\nSame pattern. Different modules. Independent fixes."
|
|
shape=note style=filled fillcolor="#fffff0"
|
|
]
|
|
|
|
jlink -> mhb
|
|
mhb -> topo
|
|
topo -> defect
|
|
defect -> fix [label="fix" style=dashed color="#006600"]
|
|
defect -> scope [style=dotted]
|
|
defect -> cmp [style=dotted]
|
|
}
|