From 847d34a7e29bc6a9701419e8d43afbae1da2e506 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:03:22 +0000 Subject: [PATCH 1/8] Initial plan From 695d900a00dad971ff4aad3d454dc31d700958d9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:07:15 +0000 Subject: [PATCH 2/8] =?UTF-8?q?Add=20detailed=20analysis=20of=20org.jnode.?= =?UTF-8?q?vm.core=20=E2=86=94=20rt=20circular=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md | 1301 +++++++++++++++++++++++++ analyze_vm_core_rt_cycle.py | 352 +++++++ 2 files changed, 1653 insertions(+) create mode 100644 VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md create mode 100755 analyze_vm_core_rt_cycle.py diff --git a/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md b/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md new file mode 100644 index 000000000..f3e0dfd56 --- /dev/null +++ b/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md @@ -0,0 +1,1301 @@ +# Detailed Analysis: org.jnode.vm.core ↔ rt Circular Dependency + +**Date:** 2025-11-16 + +## Summary + +- **Classes in org.jnode.vm.core that import from rt:** 113 +- **Classes in rt that import from org.jnode.vm.core:** 41 +- **Total classes involved in circular dependency:** 154 + +## Dependency Details + +### Classes in org.jnode.vm.core importing from rt + +(Sorted by number of dependencies, least dependencies first) + +#### 1. org.jnode.vm.VmSystemSettings (1 import) +**File:** `core/src/template/org/jnode/vm/VmSystemSettings.java` + +**Imports from rt:** +- `java.util.Properties` + +#### 2. org.jnode.permission.JNodePermission (1 import) +**File:** `core/src/core/org/jnode/permission/JNodePermission.java` + +**Imports from rt:** +- `java.security.BasicPermission` + +#### 3. org.jnode.vm.BaseVmArchitecture (1 import) +**File:** `core/src/core/org/jnode/vm/BaseVmArchitecture.java` + +**Imports from rt:** +- `java.nio.ByteOrder` + +#### 4. org.jnode.vm.VmReflection (1 import) +**File:** `core/src/core/org/jnode/vm/VmReflection.java` + +**Imports from rt:** +- `java.lang.reflect.InvocationTargetException` + +#### 5. org.jnode.vm.ResourceManagerImpl (1 import) +**File:** `core/src/core/org/jnode/vm/ResourceManagerImpl.java` + +**Imports from rt:** +- `javax.naming.NamingException` + +#### 6. org.jnode.vm.VmProcessClassLoader (1 import) +**File:** `core/src/core/org/jnode/vm/VmProcessClassLoader.java` + +**Imports from rt:** +- `java.util.HashSet` + +#### 7. org.jnode.vm.performance.PerformanceCounters (1 import) +**File:** `core/src/core/org/jnode/vm/performance/PerformanceCounters.java` + +**Imports from rt:** +- `java.util.Set` + +#### 8. org.jnode.vm.bytecode.BytecodeViewer (1 import) +**File:** `core/src/core/org/jnode/vm/bytecode/BytecodeViewer.java` + +**Imports from rt:** +- `java.io.PrintStream` + +#### 9. org.jnode.vm.bytecode.DeadBlockFinder (1 import) +**File:** `core/src/core/org/jnode/vm/bytecode/DeadBlockFinder.java` + +**Imports from rt:** +- `java.util.TreeMap` + +#### 10. org.jnode.vm.bytecode.BytecodeParser (1 import) +**File:** `core/src/core/org/jnode/vm/bytecode/BytecodeParser.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` + +#### 11. org.jnode.vm.bytecode.ControlFlowGraph (1 import) +**File:** `core/src/core/org/jnode/vm/bytecode/ControlFlowGraph.java` + +**Imports from rt:** +- `java.util.Iterator` + +#### 12. org.jnode.vm.scheduler.VmProcessor (1 import) +**File:** `core/src/core/org/jnode/vm/scheduler/VmProcessor.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 13. org.jnode.vm.facade.Vm (1 import) +**File:** `core/src/core/org/jnode/vm/facade/Vm.java` + +**Imports from rt:** +- `java.util.List` + +#### 14. org.jnode.vm.facade.VmProcessor (1 import) +**File:** `core/src/core/org/jnode/vm/facade/VmProcessor.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 15. org.jnode.vm.facade.HeapStatistics (1 import) +**File:** `core/src/core/org/jnode/vm/facade/HeapStatistics.java` + +**Imports from rt:** +- `java.io.IOException` + +#### 16. org.jnode.vm.facade.VmHeapManager (1 import) +**File:** `core/src/core/org/jnode/vm/facade/VmHeapManager.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 17. org.jnode.vm.facade.VmArchitecture (1 import) +**File:** `core/src/core/org/jnode/vm/facade/VmArchitecture.java` + +**Imports from rt:** +- `java.nio.ByteOrder` + +#### 18. org.jnode.vm.classmgr.VmStaticsAllocator (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/VmStaticsAllocator.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 19. org.jnode.vm.classmgr.Mangler (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/Mangler.java` + +**Imports from rt:** +- `java.util.StringTokenizer` + +#### 20. org.jnode.vm.classmgr.VmPrimitiveClass (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/VmPrimitiveClass.java` + +**Imports from rt:** +- `java.security.ProtectionDomain` + +#### 21. org.jnode.vm.classmgr.Signature (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/Signature.java` + +**Imports from rt:** +- `java.util.ArrayList` + +#### 22. org.jnode.vm.classmgr.VmNormalClass (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/VmNormalClass.java` + +**Imports from rt:** +- `java.security.ProtectionDomain` + +#### 23. org.jnode.vm.classmgr.VmStaticsIterator (1 import) +**File:** `core/src/core/org/jnode/vm/classmgr/VmStaticsIterator.java` + +**Imports from rt:** +- `java.util.Iterator` + +#### 24. org.jnode.vm.memmgr.VmHeapManager (1 import) +**File:** `core/src/core/org/jnode/vm/memmgr/VmHeapManager.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 25. org.jnode.vm.isolate.LinkLinkMessage (1 import) +**File:** `core/src/core/org/jnode/vm/isolate/LinkLinkMessage.java` + +**Imports from rt:** +- `javax.isolate.Link` + +#### 26. org.jnode.vm.isolate.IsolateStatusImpl (1 import) +**File:** `core/src/core/org/jnode/vm/isolate/IsolateStatusImpl.java` + +**Imports from rt:** +- `javax.isolate.IsolateStatus` + +#### 27. org.jnode.vm.isolate.LinkMessageImpl (1 import) +**File:** `core/src/core/org/jnode/vm/isolate/LinkMessageImpl.java` + +**Imports from rt:** +- `javax.isolate.LinkMessage` + +#### 28. org.jnode.vm.isolate.StatusLinkMessage (1 import) +**File:** `core/src/core/org/jnode/vm/isolate/StatusLinkMessage.java` + +**Imports from rt:** +- `javax.isolate.IsolateStatus` + +#### 29. org.jnode.vm.isolate.IsolateLinkMessage (1 import) +**File:** `core/src/core/org/jnode/vm/isolate/IsolateLinkMessage.java` + +**Imports from rt:** +- `javax.isolate.Isolate` + +#### 30. org.jnode.vm.compiler.NativeCodeCompiler (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/NativeCodeCompiler.java` + +**Imports from rt:** +- `java.io.Writer` + +#### 31. org.jnode.vm.compiler.CompiledExceptionHandler (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/CompiledExceptionHandler.java` + +**Imports from rt:** +- `java.io.PrintStream` + +#### 32. org.jnode.vm.x86.GDT (1 import) +**File:** `core/src/core/org/jnode/vm/x86/GDT.java` + +**Imports from rt:** +- `java.io.PrintStream` + +#### 33. org.jnode.vm.x86.PIC8259A (1 import) +**File:** `core/src/core/org/jnode/vm/x86/PIC8259A.java` + +**Imports from rt:** +- `javax.naming.NameNotFoundException` + +#### 34. org.jnode.vm.x86.VmX86Processor (1 import) +**File:** `core/src/core/org/jnode/vm/x86/VmX86Processor.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 35. org.jnode.vm.memmgr.def.DefaultHeapManager (1 import) +**File:** `core/src/core/org/jnode/vm/memmgr/def/DefaultHeapManager.java` + +**Imports from rt:** +- `java.io.PrintWriter` + +#### 36. org.jnode.vm.compiler.ir.IRBasicBlock (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/IRBasicBlock.java` + +**Imports from rt:** +- `java.util.List` + +#### 37. org.jnode.vm.compiler.ir.SSAStack (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/SSAStack.java` + +**Imports from rt:** +- `java.util.List` + +#### 38. org.jnode.vm.compiler.ir.PhiOperand (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/PhiOperand.java` + +**Imports from rt:** +- `java.util.List` + +#### 39. org.jnode.vm.compiler.ir.quad.TableswitchQuad (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/quad/TableswitchQuad.java` + +**Imports from rt:** +- `java.util.Arrays` + +#### 40. org.jnode.vm.compiler.ir.quad.LookupswitchQuad (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/quad/LookupswitchQuad.java` + +**Imports from rt:** +- `java.util.Arrays` + +#### 41. org.jnode.vm.compiler.ir.quad.PhiAssignQuad (1 import) +**File:** `core/src/core/org/jnode/vm/compiler/ir/quad/PhiAssignQuad.java` + +**Imports from rt:** +- `java.util.List` + +#### 42. org.jnode.vm.x86.compiler.AbstractX86Compiler (1 import) +**File:** `core/src/core/org/jnode/vm/x86/compiler/AbstractX86Compiler.java` + +**Imports from rt:** +- `java.io.Writer` + +#### 43. org.jnode.vm.x86.compiler.l1b.ItemFactory (1 import) +**File:** `core/src/core/org/jnode/vm/x86/compiler/l1b/ItemFactory.java` + +**Imports from rt:** +- `java.util.ArrayList` + +#### 44. org.jnode.vm.x86.compiler.l1a.ItemFactory (1 import) +**File:** `core/src/core/org/jnode/vm/x86/compiler/l1a/ItemFactory.java` + +**Imports from rt:** +- `java.util.ArrayList` + +#### 45. org.jnode.vm.Unsafe (2 imports) +**File:** `core/src/core/org/jnode/vm/Unsafe.java` + +**Imports from rt:** +- `java.io.PrintWriter` +- `java.io.StringWriter` + +#### 46. org.jnode.vm.MemoryResourceImpl (2 imports) +**File:** `core/src/core/org/jnode/vm/MemoryResourceImpl.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` +- `java.nio.MemoryRawData` + +#### 47. org.jnode.vm.VmAbstractClassLoader (2 imports) +**File:** `core/src/core/org/jnode/vm/VmAbstractClassLoader.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` +- `java.security.ProtectionDomain` + +#### 48. org.jnode.vm.VmJavaClassLoader (2 imports) +**File:** `core/src/core/org/jnode/vm/VmJavaClassLoader.java` + +**Imports from rt:** +- `java.io.Writer` +- `java.util.HashMap` + +#### 49. org.jnode.vm.ResourceLoader (2 imports) +**File:** `core/src/core/org/jnode/vm/ResourceLoader.java` + +**Imports from rt:** +- `java.net.URL` +- `java.nio.ByteBuffer` + +#### 50. org.jnode.vm.bytecode.BasicBlockFinder (2 imports) +**File:** `core/src/core/org/jnode/vm/bytecode/BasicBlockFinder.java` + +**Imports from rt:** +- `java.util.Comparator` +- `java.util.TreeMap` + +#### 51. org.jnode.vm.bytecode.BasicBlock (2 imports) +**File:** `core/src/core/org/jnode/vm/bytecode/BasicBlock.java` + +**Imports from rt:** +- `java.util.HashSet` +- `java.util.Set` + +#### 52. org.jnode.vm.facade.VmUtils (2 imports) +**File:** `core/src/core/org/jnode/vm/facade/VmUtils.java` + +**Imports from rt:** +- `gnu.java.lang.VMClassHelper` +- `java.io.PrintWriter` + +#### 53. org.jnode.vm.objects.CounterGroup (2 imports) +**File:** `core/src/core/org/jnode/vm/objects/CounterGroup.java` + +**Imports from rt:** +- `java.util.Map` +- `java.util.TreeMap` + +#### 54. org.jnode.vm.classmgr.VmArrayClass (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmArrayClass.java` + +**Imports from rt:** +- `java.security.ProtectionDomain` +- `java.util.HashSet` + +#### 55. org.jnode.vm.classmgr.VmMethod (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmMethod.java` + +**Imports from rt:** +- `java.lang.reflect.Member` +- `sun.reflect.ReflectionFactory` + +#### 56. org.jnode.vm.classmgr.VmUTF8Convert (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmUTF8Convert.java` + +**Imports from rt:** +- `java.io.UTFDataFormatException` +- `java.nio.ByteBuffer` + +#### 57. org.jnode.vm.classmgr.VmAnnotatedElement (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmAnnotatedElement.java` + +**Imports from rt:** +- `java.lang.annotation.Annotation` +- `java.lang.reflect.AnnotatedElement` + +#### 58. org.jnode.vm.classmgr.VmField (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmField.java` + +**Imports from rt:** +- `java.lang.reflect.Field` +- `sun.reflect.ReflectionFactory` + +#### 59. org.jnode.vm.classmgr.VmInterfaceClass (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmInterfaceClass.java` + +**Imports from rt:** +- `java.security.ProtectionDomain` +- `java.util.HashSet` + +#### 60. org.jnode.vm.classmgr.VmStatics (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmStatics.java` + +**Imports from rt:** +- `java.io.PrintWriter` +- `java.nio.ByteOrder` + +#### 61. org.jnode.vm.classmgr.VmAddressMap (2 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmAddressMap.java` + +**Imports from rt:** +- `java.io.PrintStream` +- `java.util.ArrayList` + +#### 62. org.jnode.vm.isolate.IsolateThread (2 imports) +**File:** `core/src/core/org/jnode/vm/isolate/IsolateThread.java` + +**Imports from rt:** +- `java.io.InputStream` +- `java.io.PrintStream` + +#### 63. org.jnode.vm.x86.VmX86Architecture (2 imports) +**File:** `core/src/core/org/jnode/vm/x86/VmX86Architecture.java` + +**Imports from rt:** +- `java.nio.ByteOrder` +- `java.util.HashMap` + +#### 64. org.jnode.vm.memmgr.def.DefHeapStatistics (2 imports) +**File:** `core/src/core/org/jnode/vm/memmgr/def/DefHeapStatistics.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.util.TreeMap` + +#### 65. org.jnode.vm.compiler.ir.IRGenerator (2 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/IRGenerator.java` + +**Imports from rt:** +- `java.util.Iterator` +- `java.util.List` + +#### 66. org.jnode.vm.compiler.ir.quad.AssignQuad (2 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/quad/AssignQuad.java` + +**Imports from rt:** +- `java.util.Collection` +- `java.util.List` + +#### 67. org.jnode.vm.compiler.ir.quad.Quad (2 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/quad/Quad.java` + +**Imports from rt:** +- `java.util.Collection` +- `java.util.List` + +#### 68. org.jnode.vm.x86.performance.X86PerformanceCounters (2 imports) +**File:** `core/src/core/org/jnode/vm/x86/performance/X86PerformanceCounters.java` + +**Imports from rt:** +- `java.util.Collections` +- `java.util.Set` + +#### 69. org.jnode.vm.x86.compiler.X86CompilerHelper (2 imports) +**File:** `core/src/core/org/jnode/vm/x86/compiler/X86CompilerHelper.java` + +**Imports from rt:** +- `java.util.HashMap` +- `java.util.Map` + +#### 70. org.jnode.vm.x86.compiler.l1b.X86BytecodeVisitor (2 imports) +**File:** `core/src/core/org/jnode/vm/x86/compiler/l1b/X86BytecodeVisitor.java` + +**Imports from rt:** +- `java.util.HashMap` +- `java.util.Map` + +#### 71. org.jnode.vm.x86.compiler.l2.X86Level2Compiler (2 imports) +**File:** `core/src/core/org/jnode/vm/x86/compiler/l2/X86Level2Compiler.java` + +**Imports from rt:** +- `java.util.Collection` +- `java.util.List` + +#### 72. org.jnode.assembler.NativeStream (3 imports) +**File:** `core/src/core/org/jnode/assembler/NativeStream.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.OutputStream` +- `java.util.Collection` + +#### 73. org.jnode.vm.LoadCompileService (3 imports) +**File:** `core/src/core/org/jnode/vm/LoadCompileService.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` +- `java.security.ProtectionDomain` +- `java.util.ArrayList` + +#### 74. org.jnode.vm.BootLogImpl (3 imports) +**File:** `core/src/core/org/jnode/vm/BootLogImpl.java` + +**Imports from rt:** +- `java.io.PrintStream` +- `javax.naming.NameAlreadyBoundException` +- `javax.naming.NamingException` + +#### 75. org.jnode.assembler.x86.X86Assembler (3 imports) +**File:** `core/src/core/org/jnode/assembler/x86/X86Assembler.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.OutputStream` +- `java.util.Collection` + +#### 76. org.jnode.vm.classmgr.VmClassType (3 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmClassType.java` + +**Imports from rt:** +- `java.security.ProtectionDomain` +- `java.util.ArrayList` +- `java.util.HashSet` + +#### 77. org.jnode.vm.classmgr.TIBBuilder (3 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/TIBBuilder.java` + +**Imports from rt:** +- `gnu.java.lang.VMClassHelper` +- `java.util.ArrayList` +- `java.util.HashMap` + +#### 78. org.jnode.vm.classmgr.VmConstantPool (3 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmConstantPool.java` + +**Imports from rt:** +- `java.lang.reflect.Field` +- `java.lang.reflect.Member` +- `sun.reflect.ConstantPool` + +#### 79. org.jnode.vm.classmgr.VmClassLoader (3 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmClassLoader.java` + +**Imports from rt:** +- `java.io.Writer` +- `java.nio.ByteBuffer` +- `java.security.ProtectionDomain` + +#### 80. org.jnode.vm.x86.MPConfigTable (3 imports) +**File:** `core/src/core/org/jnode/vm/x86/MPConfigTable.java` + +**Imports from rt:** +- `java.io.PrintStream` +- `java.util.ArrayList` +- `java.util.List` + +#### 81. org.jnode.vm.x86.IOAPIC (3 imports) +**File:** `core/src/core/org/jnode/vm/x86/IOAPIC.java` + +**Imports from rt:** +- `java.io.PrintStream` +- `java.util.ArrayList` +- `java.util.List` + +#### 82. org.jnode.vm.memmgr.mmtk.BaseMmtkHeapManager (4 imports) +**File:** `core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/BaseMmtkHeapManager.java` + +**Imports from rt:** +- `java.io.PrintWriter` +- `java.lang.reflect.Constructor` +- `java.lang.reflect.InvocationTargetException` +- `javax.naming.NameNotFoundException` + +#### 83. org.jnode.vm.IOContext (4 imports) +**File:** `core/src/core/org/jnode/vm/IOContext.java` + +**Imports from rt:** +- `java.io.InputStream` +- `java.io.PrintStream` +- `java.util.Map` +- `java.util.Properties` + +#### 84. org.jnode.vm.VmIOContext (4 imports) +**File:** `core/src/core/org/jnode/vm/VmIOContext.java` + +**Imports from rt:** +- `java.io.InputStream` +- `java.io.PrintStream` +- `java.util.Map` +- `java.util.Properties` + +#### 85. org.jnode.vm.bytecode.BytecodeWriter (4 imports) +**File:** `core/src/core/org/jnode/vm/bytecode/BytecodeWriter.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` +- `java.util.ArrayList` +- `java.util.HashSet` +- `java.util.List` + +#### 86. org.jnode.vm.objects.BootableHashMap (4 imports) +**File:** `core/src/core/org/jnode/vm/objects/BootableHashMap.java` + +**Imports from rt:** +- `java.util.Collection` +- `java.util.HashMap` +- `java.util.Map` +- `java.util.Set` + +#### 87. org.jnode.vm.classmgr.VmByteCode (4 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmByteCode.java` + +**Imports from rt:** +- `java.nio.ByteBuffer` +- `java.util.Arrays` +- `java.util.Collections` +- `java.util.List` + +#### 88. org.jnode.vm.isolate.IsolateThreadFactory (4 imports) +**File:** `core/src/core/org/jnode/vm/isolate/IsolateThreadFactory.java` + +**Imports from rt:** +- `java.util.concurrent.ThreadFactory` +- `java.util.concurrent.ThreadFactory` +- `java.util.concurrent.atomic.AtomicInteger` +- `java.util.concurrent.atomic.AtomicInteger` + +#### 89. org.jnode.vm.isolate.LinkMessageFactory (4 imports) +**File:** `core/src/core/org/jnode/vm/isolate/LinkMessageFactory.java` + +**Imports from rt:** +- `java.net.ServerSocket` +- `java.net.Socket` +- `javax.isolate.Link` +- `javax.isolate.LinkMessage` + +#### 90. org.jnode.vm.compiler.ir.IRBasicBlockFinder (4 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/IRBasicBlockFinder.java` + +**Imports from rt:** +- `java.util.ArrayList` +- `java.util.Collections` +- `java.util.Comparator` +- `java.util.List` + +#### 91. org.jnode.vm.x86.performance.DualMSRPerformanceCounters (4 imports) +**File:** `core/src/core/org/jnode/vm/x86/performance/DualMSRPerformanceCounters.java` + +**Imports from rt:** +- `java.util.Arrays` +- `java.util.Collections` +- `java.util.Set` +- `java.util.TreeSet` + +#### 92. org.jnode.vm.VmAccessControlContext (5 imports) +**File:** `core/src/core/org/jnode/vm/VmAccessControlContext.java` + +**Imports from rt:** +- `java.security.AccessControlException` +- `java.security.Permission` +- `java.security.ProtectionDomain` +- `java.util.ArrayList` +- `java.util.List` + +#### 93. org.jnode.vm.VmImpl (5 imports) +**File:** `core/src/core/org/jnode/vm/VmImpl.java` + +**Imports from rt:** +- `java.lang.reflect.Constructor` +- `java.lang.reflect.InvocationTargetException` +- `java.util.List` +- `java.util.Map` +- `java.util.TreeMap` + +#### 94. org.jnode.assembler.x86.X86TextAssembler (5 imports) +**File:** `core/src/core/org/jnode/assembler/x86/X86TextAssembler.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.OutputStream` +- `java.io.PrintWriter` +- `java.io.Writer` +- `java.util.Collection` + +#### 95. org.jnode.vm.compiler.ir.LinearScanAllocator (5 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/LinearScanAllocator.java` + +**Imports from rt:** +- `java.util.ArrayList` +- `java.util.Arrays` +- `java.util.Collections` +- `java.util.Comparator` +- `java.util.List` + +#### 96. org.jnode.vm.VmAccessController (6 imports) +**File:** `core/src/core/org/jnode/vm/VmAccessController.java` + +**Imports from rt:** +- `java.security.AccessControlException` +- `java.security.Permission` +- `java.security.PrivilegedAction` +- `java.security.PrivilegedActionException` +- `java.security.PrivilegedExceptionAction` +- `java.security.ProtectionDomain` + +#### 97. org.jnode.vm.VmProcess (6 imports) +**File:** `core/src/core/org/jnode/vm/VmProcess.java` + +**Imports from rt:** +- `java.io.InputStream` +- `java.io.OutputStream` +- `java.io.PrintStream` +- `java.lang.reflect.Constructor` +- `java.lang.reflect.InvocationTargetException` +- `java.lang.reflect.Method` + +#### 98. org.jnode.assembler.x86.X86BinaryAssembler (6 imports) +**File:** `core/src/core/org/jnode/assembler/x86/X86BinaryAssembler.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.OutputStream` +- `java.util.Collection` +- `java.util.HashMap` +- `java.util.LinkedList` +- `java.util.Map` + +#### 99. org.jnode.vm.classmgr.ClassDecoder (6 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/ClassDecoder.java` + +**Imports from rt:** +- `java.io.UTFDataFormatException` +- `java.lang.annotation.Annotation` +- `java.nio.ByteBuffer` +- `java.security.ProtectionDomain` +- `sun.reflect.annotation.AnnotationParser` +- `sun.reflect.annotation.ExceptionProxy` + +#### 100. org.jnode.vm.isolate.LinkImpl (6 imports) +**File:** `core/src/core/org/jnode/vm/isolate/LinkImpl.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.InterruptedIOException` +- `javax.isolate.ClosedLinkException` +- `javax.isolate.Isolate` +- `javax.isolate.Link` +- `javax.isolate.LinkMessage` + +#### 101. org.jnode.vm.compiler.ir.NativeTest (6 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/NativeTest.java` + +**Imports from rt:** +- `java.io.ByteArrayOutputStream` +- `java.io.File` +- `java.io.FileOutputStream` +- `java.io.IOException` +- `java.io.OutputStreamWriter` +- `java.net.MalformedURLException` + +#### 102. org.jnode.vm.x86.performance.P4FamilyPerformanceCounters (6 imports) +**File:** `core/src/core/org/jnode/vm/x86/performance/P4FamilyPerformanceCounters.java` + +**Imports from rt:** +- `java.util.Arrays` +- `java.util.Collections` +- `java.util.HashMap` +- `java.util.Map` +- `java.util.Set` +- `java.util.TreeSet` + +#### 103. org.jnode.vm.DefaultNameSpace (7 imports) +**File:** `core/src/core/org/jnode/vm/DefaultNameSpace.java` + +**Imports from rt:** +- `java.util.HashMap` +- `java.util.HashSet` +- `java.util.Map` +- `java.util.Set` +- `javax.naming.NameAlreadyBoundException` +- `javax.naming.NameNotFoundException` +- `javax.naming.NamingException` + +#### 104. org.jnode.vm.objects.BootableArrayList (7 imports) +**File:** `core/src/core/org/jnode/vm/objects/BootableArrayList.java` + +**Imports from rt:** +- `java.util.ArrayList` +- `java.util.Arrays` +- `java.util.Collection` +- `java.util.Iterator` +- `java.util.List` +- `java.util.ListIterator` +- `java.util.RandomAccess` + +#### 105. org.jnode.vm.isolate.VmLink (7 imports) +**File:** `core/src/core/org/jnode/vm/isolate/VmLink.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.InterruptedIOException` +- `java.util.LinkedList` +- `java.util.Queue` +- `javax.isolate.ClosedLinkException` +- `javax.isolate.Link` +- `javax.isolate.LinkMessage` + +#### 106. org.jnode.vm.compiler.ir.IRTest (7 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/IRTest.java` + +**Imports from rt:** +- `java.io.File` +- `java.io.FileOutputStream` +- `java.io.IOException` +- `java.io.OutputStreamWriter` +- `java.net.MalformedURLException` +- `java.net.URL` +- `java.util.List` + +#### 107. org.jnode.vm.compiler.ir.IRControlFlowGraph (7 imports) +**File:** `core/src/core/org/jnode/vm/compiler/ir/IRControlFlowGraph.java` + +**Imports from rt:** +- `java.util.Collection` +- `java.util.Collections` +- `java.util.Comparator` +- `java.util.HashMap` +- `java.util.Iterator` +- `java.util.List` +- `java.util.Map` + +#### 108. org.jnode.vm.classmgr.VmAnnotation (8 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmAnnotation.java` + +**Imports from rt:** +- `java.lang.annotation.Annotation` +- `java.lang.annotation.Inherited` +- `java.lang.reflect.Array` +- `java.nio.ByteBuffer` +- `java.util.HashMap` +- `java.util.Map` +- `java.util.Set` +- `sun.reflect.annotation.AnnotationParser` + +#### 109. org.jnode.vm.classmgr.VmType (8 imports) +**File:** `core/src/core/org/jnode/vm/classmgr/VmType.java` + +**Imports from rt:** +- `gnu.java.lang.VMClassHelper` +- `java.io.Serializable` +- `java.io.Writer` +- `java.lang.reflect.InvocationTargetException` +- `java.security.ProtectionDomain` +- `java.util.Arrays` +- `java.util.Comparator` +- `java.util.HashSet` + +#### 110. org.jnode.vm.isolate.VmStreamBindings (9 imports) +**File:** `core/src/core/org/jnode/vm/isolate/VmStreamBindings.java` + +**Imports from rt:** +- `java.io.FileInputStream` +- `java.io.FileOutputStream` +- `java.io.FilterInputStream` +- `java.io.FilterOutputStream` +- `java.io.IOException` +- `java.io.InputStream` +- `java.io.OutputStream` +- `java.io.PrintStream` +- `java.net.Socket` + +#### 111. org.jnode.vm.VmSystem (10 imports) +**File:** `core/src/core/org/jnode/vm/VmSystem.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.InputStream` +- `java.io.OutputStream` +- `java.io.PrintStream` +- `java.nio.ByteOrder` +- `java.util.Locale` +- `java.util.Properties` +- `javax.naming.NameNotFoundException` +- `sun.nio.ch.Interruptible` +- `sun.reflect.annotation.AnnotationType` + +#### 112. org.jnode.vm.VmSystemClassLoader (15 imports) +**File:** `core/src/core/org/jnode/vm/VmSystemClassLoader.java` + +**Imports from rt:** +- `java.io.ByteArrayInputStream` +- `java.io.ByteArrayOutputStream` +- `java.io.IOException` +- `java.io.InputStream` +- `java.io.Writer` +- `java.net.MalformedURLException` +- `java.net.URL` +- `java.nio.ByteBuffer` +- `java.util.ArrayList` +- `java.util.Arrays` +- `java.util.Collection` +- `java.util.HashSet` +- `java.util.List` +- `java.util.Map` +- `java.util.TreeMap` + +#### 113. org.jnode.vm.isolate.VmIsolate (20 imports) +**File:** `core/src/core/org/jnode/vm/isolate/VmIsolate.java` + +**Imports from rt:** +- `java.io.IOException` +- `java.io.InputStream` +- `java.io.PrintStream` +- `java.lang.reflect.Method` +- `java.net.URL` +- `java.net.URLClassLoader` +- `java.security.AccessController` +- `java.security.PrivilegedAction` +- `java.util.ArrayList` +- `java.util.Iterator` +- `java.util.LinkedList` +- `java.util.List` +- `java.util.Properties` +- `java.util.concurrent.ExecutorService` +- `java.util.concurrent.Executors` +- `javax.isolate.Isolate` +- `javax.isolate.IsolateStartupException` +- `javax.isolate.IsolateStatus` +- `javax.isolate.Link` +- `javax.naming.NameNotFoundException` + +### Classes in rt importing from org.jnode.vm.core + +(Sorted by number of dependencies, least dependencies first) + +#### 1. javax.isolate.LinkMessage (1 import) +**File:** `core/src/classpath/ext/javax/isolate/LinkMessage.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.isolate.LinkMessageFactory` + +#### 2. javax.isolate.Isolate (1 import) +**File:** `core/src/classpath/ext/javax/isolate/Isolate.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.isolate.VmIsolate` + +#### 3. javax.isolate.StreamBindings (1 import) +**File:** `core/src/classpath/ext/javax/isolate/StreamBindings.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.isolate.VmStreamBindings` + +#### 4. javax.isolate.Link (1 import) +**File:** `core/src/classpath/ext/javax/isolate/Link.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.isolate.VmLink` + +#### 5. java.lang.VMSecurityManager (1 import) +**File:** `core/src/classpath/vm/java/lang/VMSecurityManager.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 6. java.security.NativeAccessControlContext (1 import) +**File:** `core/src/classpath/vm/java/security/NativeAccessControlContext.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmAccessControlContext` + +#### 7. gnu.classpath.NativeVMStackWalker (1 import) +**File:** `core/src/classpath/vm/gnu/classpath/NativeVMStackWalker.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 8. gnu.classpath.NativeSystemProperties (1 import) +**File:** `core/src/classpath/vm/gnu/classpath/NativeSystemProperties.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 9. java.io.NativeObjectInputStream (1 import) +**File:** `core/src/openjdk/vm/java/io/NativeObjectInputStream.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 10. java.awt.NativeToolkit (1 import) +**File:** `core/src/openjdk/vm/java/awt/NativeToolkit.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 11. java.lang.NativeDouble (1 import) +**File:** `core/src/openjdk/vm/java/lang/NativeDouble.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmMagic` + +#### 12. java.lang.NativeFloat (1 import) +**File:** `core/src/openjdk/vm/java/lang/NativeFloat.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmMagic` + +#### 13. java.lang.NativeCompiler (1 import) +**File:** `core/src/openjdk/vm/java/lang/NativeCompiler.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.classmgr.VmType` + +#### 14. java.lang.NativeSystem (1 import) +**File:** `core/src/openjdk/vm/java/lang/NativeSystem.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 15. java.util.NativeResourceBundle (1 import) +**File:** `core/src/openjdk/vm/java/util/NativeResourceBundle.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 16. java.lang.reflect.NativeProxy (1 import) +**File:** `core/src/openjdk/vm/java/lang/reflect/NativeProxy.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.classmgr.VmClassLoader` + +#### 17. com.sun.management.NativeUnixOperatingSystem (1 import) +**File:** `core/src/openjdk/vm/com/sun/management/NativeUnixOperatingSystem.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` + +#### 18. java.lang.NativeVMClassLoader (2 imports) +**File:** `core/src/classpath/vm/java/lang/NativeVMClassLoader.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmType` + +#### 19. java.lang.ThreadHelper (2 imports) +**File:** `core/src/classpath/vm/java/lang/ThreadHelper.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.permission.JNodePermission` +- `org.jnode.vm.scheduler.VmThread` + +#### 20. java.io.NativeObjectStreamClass (2 imports) +**File:** `core/src/openjdk/vm/java/io/NativeObjectStreamClass.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmType` + +#### 21. java.lang.NativeObject (2 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeObject.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.scheduler.MonitorManager` + +#### 22. java.lang.NativeProcessEnvironment (2 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeProcessEnvironment.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmIOContext` +- `org.jnode.vm.VmSystem` + +#### 23. java.lang.NativeRuntime (2 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeRuntime.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.facade.VmUtils` + +#### 24. java.lang.NativeString (2 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeString.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.InternString` +- `org.jnode.vm.objects.BootableHashMap` + +#### 25. java.lang.NativeShutdown (2 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeShutdown.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmExit` +- `org.jnode.vm.isolate.VmIsolate` + +#### 26. sun.reflect.NativeReflection (2 imports) +**File:** `core/src/openjdk/vm/sun/reflect/NativeReflection.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmType` + +#### 27. sun.management.NativeVMManagementImpl (2 imports) +**File:** `core/src/openjdk/vm/sun/management/NativeVMManagementImpl.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.facade.VmUtils` +- `org.jnode.vm.isolate.VmIsolate` + +#### 28. java.lang.VMSystem (3 imports) +**File:** `core/src/classpath/vm/java/lang/VMSystem.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmImpl` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.facade.VmUtils` + +#### 29. java.security.NativeAccessController (3 imports) +**File:** `core/src/classpath/vm/java/security/NativeAccessController.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.Unsafe` +- `org.jnode.vm.VmAccessControlContext` +- `org.jnode.vm.VmAccessController` + +#### 30. sun.reflect.NativeNativeConstructorAccessorImpl (3 imports) +**File:** `core/src/openjdk/vm/sun/reflect/NativeNativeConstructorAccessorImpl.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmReflection` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmType` + +#### 31. sun.reflect.NativeNativeMethodAccessorImpl (3 imports) +**File:** `core/src/openjdk/vm/sun/reflect/NativeNativeMethodAccessorImpl.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmReflection` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmType` + +#### 32. sun.management.NativeThreadImpl (3 imports) +**File:** `core/src/openjdk/vm/sun/management/NativeThreadImpl.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.facade.VmThread` +- `org.jnode.vm.facade.VmThreadVisitor` +- `org.jnode.vm.facade.VmUtils` + +#### 33. java.lang.VMRuntime (5 imports) +**File:** `core/src/classpath/vm/java/lang/VMRuntime.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmExit` +- `org.jnode.vm.VmProcess` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.facade.VmUtils` +- `org.jnode.vm.isolate.VmIsolate` + +#### 34. java.lang.NativeClassLoader (5 imports) +**File:** `core/src/classpath/vm/java/lang/NativeClassLoader.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.permission.JNodePermission` +- `org.jnode.vm.VmJavaClassLoader` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmType` + +#### 35. java.lang.NativeThread (5 imports) +**File:** `core/src/classpath/vm/java/lang/NativeThread.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmIsolatedStatics` +- `org.jnode.vm.scheduler.MonitorManager` +- `org.jnode.vm.scheduler.VmProcessor` +- `org.jnode.vm.scheduler.VmThread` + +#### 36. java.lang.reflect.NativeArray (5 imports) +**File:** `core/src/openjdk/vm/java/lang/reflect/NativeArray.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmImpl` +- `org.jnode.vm.classmgr.VmArrayClass` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmType` +- `org.jnode.vm.facade.VmUtils` + +#### 37. java.lang.NativeThrowable (6 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeThrowable.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmStackFrame` +- `org.jnode.vm.classmgr.VmInstanceField` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmType` +- `org.jnode.vm.scheduler.VmProcessor` +- `org.jnode.vm.scheduler.VmThread` + +#### 38. gnu.classpath.jdwp.NativeVMVirtualMachine (7 imports) +**File:** `core/src/classpath/vm/gnu/classpath/jdwp/NativeVMVirtualMachine.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.classmgr.ClassDecoder` +- `org.jnode.vm.classmgr.VmIsolatedStatics` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmStaticsIterator` +- `org.jnode.vm.classmgr.VmType` +- `org.jnode.vm.facade.VmUtils` +- `org.jnode.vm.isolate.VmIsolate` + +#### 39. java.lang.NativeClass (7 imports) +**File:** `core/src/openjdk/vm/java/lang/NativeClass.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.SoftByteCodes` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmArrayClass` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmConstantPool` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmType` + +#### 40. sun.misc.NativeUnsafe (11 imports) +**File:** `core/src/openjdk/vm/sun/misc/NativeUnsafe.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmMagic` +- `org.jnode.vm.VmReflection` +- `org.jnode.vm.classmgr.VmArray` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmConstString` +- `org.jnode.vm.classmgr.VmField` +- `org.jnode.vm.classmgr.VmInstanceField` +- `org.jnode.vm.classmgr.VmStaticField` +- `org.jnode.vm.classmgr.VmType` +- `org.jnode.vm.facade.VmUtils` +- `org.jnode.vm.scheduler.VmProcessor` + +#### 41. gnu.classpath.jdwp.JDIVirtualMachine (12 imports) +**File:** `core/src/classpath/vm/gnu/classpath/jdwp/JDIVirtualMachine.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.BaseVmArchitecture` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.VmSystemClassLoader` +- `org.jnode.vm.classmgr.ClassDecoder` +- `org.jnode.vm.classmgr.VmByteCode` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmIsolatedStatics` +- `org.jnode.vm.classmgr.VmMethod` +- `org.jnode.vm.classmgr.VmStaticsIterator` +- `org.jnode.vm.classmgr.VmType` +- `org.jnode.vm.facade.VmUtils` +- `org.jnode.vm.isolate.VmIsolate` + +## Recommendations to Break the Circular Dependency + +### Strategy 1: Extract Common API Interfaces + +Create a new plugin `org.jnode.vm.api` that contains only interfaces: + +1. **Identify common interfaces** used by both vm.core and rt +2. **Move interfaces** to the new API plugin +3. **Update dependencies:** + - Both `org.jnode.vm.core` and `rt` depend on `org.jnode.vm.api` + - Remove direct dependencies between vm.core and rt + +### Strategy 2: Move Classes with Fewest Dependencies + +Start with classes that have the least dependencies (listed above): + +**From org.jnode.vm.core to rt (or new plugin):** +- `org.jnode.vm.VmSystemSettings` (1 dependency/dependencies) +- `org.jnode.permission.JNodePermission` (1 dependency/dependencies) +- `org.jnode.vm.BaseVmArchitecture` (1 dependency/dependencies) +- `org.jnode.vm.VmReflection` (1 dependency/dependencies) +- `org.jnode.vm.ResourceManagerImpl` (1 dependency/dependencies) + +**From rt to org.jnode.vm.core (or new plugin):** +- `javax.isolate.LinkMessage` (1 dependency/dependencies) +- `javax.isolate.Isolate` (1 dependency/dependencies) +- `javax.isolate.StreamBindings` (1 dependency/dependencies) +- `javax.isolate.Link` (1 dependency/dependencies) +- `java.lang.VMSecurityManager` (1 dependency/dependencies) + +### Strategy 3: Dependency Inversion + +Apply the Dependency Inversion Principle: + +1. **Define interfaces** for high-level dependencies +2. **Inject implementations** at runtime +3. **Use service locators** or dependency injection + +### Strategy 4: Consolidate Plugins + +If separation is not critical: + +1. **Merge vm.core and rt** into a single plugin +2. **Document the merger** in plugin documentation +3. **Update all plugin descriptors** that reference these plugins + +### Priority Actions + +Based on the analysis, prioritize: + +1. **Quick wins:** Classes with 1-2 dependencies +2. **Medium effort:** Classes with 3-5 dependencies +3. **Major refactoring:** Classes with >5 dependencies + +## Next Steps + +1. Review this detailed analysis with the development team +2. Choose a strategy based on project constraints and goals +3. Create a plan for incremental refactoring +4. Test each change thoroughly to ensure system stability +5. Document the architectural decisions diff --git a/analyze_vm_core_rt_cycle.py b/analyze_vm_core_rt_cycle.py new file mode 100755 index 000000000..4b3c38169 --- /dev/null +++ b/analyze_vm_core_rt_cycle.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python3 +""" +Detailed analysis of the circular dependency between org.jnode.vm.core and rt. + +This script: +1. Identifies all Java classes in org.jnode.vm.core that import from rt +2. Identifies all Java classes in rt that import from org.jnode.vm.core +3. Sorts classes by the number of circular dependencies (least first) +4. Generates a detailed report with recommendations to break the cycle + +Usage: + python3 analyze_vm_core_rt_cycle.py +""" + +import os +import re +import sys +import xml.etree.ElementTree as ET +from pathlib import Path +from collections import defaultdict +from typing import Dict, List, Set, Tuple, Optional + + +class VMCoreRTCycleAnalyzer: + def __init__(self, repo_root: str): + self.repo_root = Path(repo_root) + self.vm_core_packages = set() + self.rt_packages = set() + self.class_dependencies = defaultdict(lambda: {'imports_from_other': [], 'imported_by_other': []}) + + def load_plugin_exports(self, plugin_id: str) -> Set[str]: + """Load package exports for a specific plugin.""" + packages = set() + + # Find the descriptor file + for desc_dir in self.repo_root.glob('*/descriptors'): + if 'all/build' in str(desc_dir): + continue + for xml_file in desc_dir.glob('*.xml'): + try: + tree = ET.parse(xml_file) + root = tree.getroot() + + if root.get('id') == plugin_id or (root.tag == 'fragment' and root.get('plugin-id') == plugin_id): + # Extract runtime library exports + runtime = root.find('runtime') + if runtime is not None: + for library in runtime.findall('library'): + for export in library.findall('export'): + export_name = export.get('name') + if export_name: + if export_name.endswith('.*'): + packages.add(export_name[:-2]) + else: + # Specific class export + if '.' in export_name: + packages.add(export_name.rsplit('.', 1)[0]) + except Exception as e: + pass + + return packages + + def find_java_files_for_plugin(self, packages: Set[str]) -> List[Path]: + """Find all Java files that belong to the given packages.""" + java_files = [] + + for src_dir in self.repo_root.glob('*/src'): + if 'all/build' in str(src_dir): + continue + + for java_file in src_dir.rglob('*.java'): + # Extract package from file + file_package = self.extract_package_from_file(java_file) + if file_package: + # Check if this file belongs to any of our packages + for pkg in packages: + if file_package == pkg or file_package.startswith(pkg + '.'): + java_files.append(java_file) + break + + return java_files + + def extract_package_from_file(self, java_file: Path) -> Optional[str]: + """Extract the package declaration from a Java file.""" + try: + with open(java_file, 'r', encoding='utf-8', errors='ignore') as f: + for line in f: + match = re.match(r'^\s*package\s+([\w.]+)\s*;', line) + if match: + return match.group(1) + except Exception: + pass + return None + + def extract_class_name(self, java_file: Path) -> str: + """Extract the class name from the file path.""" + return java_file.stem + + def extract_imports_from_file(self, java_file: Path) -> List[str]: + """Extract import statements from a Java file.""" + imports = [] + try: + with open(java_file, 'r', encoding='utf-8', errors='ignore') as f: + for line in f: + # Look for import statements (including static imports) + match = re.match(r'^\s*import\s+(?:static\s+)?([\w.]+)(?:\.\*)?\s*;', line) + if match: + import_stmt = match.group(1) + imports.append(import_stmt) + except Exception: + pass + return imports + + def is_import_in_packages(self, import_stmt: str, packages: Set[str]) -> bool: + """Check if an import belongs to any of the given packages.""" + for pkg in packages: + if import_stmt == pkg or import_stmt.startswith(pkg + '.'): + return True + return False + + def analyze_cycle(self): + """Analyze the circular dependency between org.jnode.vm.core and rt.""" + print("Loading plugin exports...") + + # Load packages for both plugins + self.vm_core_packages = self.load_plugin_exports('org.jnode.vm.core') + self.rt_packages = self.load_plugin_exports('rt') + + # Also check for rt.vm (which is often grouped with rt) + rt_vm_packages = self.load_plugin_exports('rt.vm') + self.rt_packages.update(rt_vm_packages) + + print(f"org.jnode.vm.core exports {len(self.vm_core_packages)} packages") + print(f"rt exports {len(self.rt_packages)} packages") + + # Find Java files for each plugin + print("\nFinding Java files...") + vm_core_files = self.find_java_files_for_plugin(self.vm_core_packages) + rt_files = self.find_java_files_for_plugin(self.rt_packages) + + print(f"org.jnode.vm.core has {len(vm_core_files)} Java files") + print(f"rt has {len(rt_files)} Java files") + + # Analyze imports from vm.core to rt + print("\nAnalyzing imports from org.jnode.vm.core to rt...") + vm_core_to_rt = [] + for java_file in vm_core_files: + imports = self.extract_imports_from_file(java_file) + rt_imports = [imp for imp in imports if self.is_import_in_packages(imp, self.rt_packages)] + + if rt_imports: + package = self.extract_package_from_file(java_file) + class_name = self.extract_class_name(java_file) + fqcn = f"{package}.{class_name}" if package else class_name + + vm_core_to_rt.append({ + 'class': fqcn, + 'file': str(java_file.relative_to(self.repo_root)), + 'imports': rt_imports, + 'count': len(rt_imports) + }) + + self.class_dependencies[fqcn]['imports_from_other'] = rt_imports + + # Analyze imports from rt to vm.core + print("Analyzing imports from rt to org.jnode.vm.core...") + rt_to_vm_core = [] + for java_file in rt_files: + imports = self.extract_imports_from_file(java_file) + vm_core_imports = [imp for imp in imports if self.is_import_in_packages(imp, self.vm_core_packages)] + + if vm_core_imports: + package = self.extract_package_from_file(java_file) + class_name = self.extract_class_name(java_file) + fqcn = f"{package}.{class_name}" if package else class_name + + rt_to_vm_core.append({ + 'class': fqcn, + 'file': str(java_file.relative_to(self.repo_root)), + 'imports': vm_core_imports, + 'count': len(vm_core_imports) + }) + + self.class_dependencies[fqcn]['imports_from_other'] = vm_core_imports + + # Sort by dependency count (least dependencies first) + vm_core_to_rt.sort(key=lambda x: x['count']) + rt_to_vm_core.sort(key=lambda x: x['count']) + + return vm_core_to_rt, rt_to_vm_core + + def generate_report(self, vm_core_to_rt: List[Dict], rt_to_vm_core: List[Dict]): + """Generate a detailed report.""" + report = [] + + report.append("# Detailed Analysis: org.jnode.vm.core ↔ rt Circular Dependency") + report.append("") + report.append(f"**Date:** {self._get_date()}") + report.append("") + + report.append("## Summary") + report.append("") + report.append(f"- **Classes in org.jnode.vm.core that import from rt:** {len(vm_core_to_rt)}") + report.append(f"- **Classes in rt that import from org.jnode.vm.core:** {len(rt_to_vm_core)}") + report.append(f"- **Total classes involved in circular dependency:** {len(vm_core_to_rt) + len(rt_to_vm_core)}") + report.append("") + + report.append("## Dependency Details") + report.append("") + report.append("### Classes in org.jnode.vm.core importing from rt") + report.append("") + report.append("(Sorted by number of dependencies, least dependencies first)") + report.append("") + + for i, entry in enumerate(vm_core_to_rt, 1): + report.append(f"#### {i}. {entry['class']} ({entry['count']} import{'s' if entry['count'] > 1 else ''})") + report.append(f"**File:** `{entry['file']}`") + report.append("") + report.append("**Imports from rt:**") + for imp in sorted(entry['imports']): + report.append(f"- `{imp}`") + report.append("") + + report.append("### Classes in rt importing from org.jnode.vm.core") + report.append("") + report.append("(Sorted by number of dependencies, least dependencies first)") + report.append("") + + for i, entry in enumerate(rt_to_vm_core, 1): + report.append(f"#### {i}. {entry['class']} ({entry['count']} import{'s' if entry['count'] > 1 else ''})") + report.append(f"**File:** `{entry['file']}`") + report.append("") + report.append("**Imports from org.jnode.vm.core:**") + for imp in sorted(entry['imports']): + report.append(f"- `{imp}`") + report.append("") + + report.append("## Recommendations to Break the Circular Dependency") + report.append("") + report.append("### Strategy 1: Extract Common API Interfaces") + report.append("") + report.append("Create a new plugin `org.jnode.vm.api` that contains only interfaces:") + report.append("") + report.append("1. **Identify common interfaces** used by both vm.core and rt") + report.append("2. **Move interfaces** to the new API plugin") + report.append("3. **Update dependencies:**") + report.append(" - Both `org.jnode.vm.core` and `rt` depend on `org.jnode.vm.api`") + report.append(" - Remove direct dependencies between vm.core and rt") + report.append("") + + report.append("### Strategy 2: Move Classes with Fewest Dependencies") + report.append("") + report.append("Start with classes that have the least dependencies (listed above):") + report.append("") + + if vm_core_to_rt: + report.append("**From org.jnode.vm.core to rt (or new plugin):**") + for entry in vm_core_to_rt[:5]: # Top 5 candidates + report.append(f"- `{entry['class']}` ({entry['count']} dependency/dependencies)") + report.append("") + + if rt_to_vm_core: + report.append("**From rt to org.jnode.vm.core (or new plugin):**") + for entry in rt_to_vm_core[:5]: # Top 5 candidates + report.append(f"- `{entry['class']}` ({entry['count']} dependency/dependencies)") + report.append("") + + report.append("### Strategy 3: Dependency Inversion") + report.append("") + report.append("Apply the Dependency Inversion Principle:") + report.append("") + report.append("1. **Define interfaces** for high-level dependencies") + report.append("2. **Inject implementations** at runtime") + report.append("3. **Use service locators** or dependency injection") + report.append("") + + report.append("### Strategy 4: Consolidate Plugins") + report.append("") + report.append("If separation is not critical:") + report.append("") + report.append("1. **Merge vm.core and rt** into a single plugin") + report.append("2. **Document the merger** in plugin documentation") + report.append("3. **Update all plugin descriptors** that reference these plugins") + report.append("") + + report.append("### Priority Actions") + report.append("") + report.append("Based on the analysis, prioritize:") + report.append("") + report.append("1. **Quick wins:** Classes with 1-2 dependencies") + report.append("2. **Medium effort:** Classes with 3-5 dependencies") + report.append("3. **Major refactoring:** Classes with >5 dependencies") + report.append("") + + report.append("## Next Steps") + report.append("") + report.append("1. Review this detailed analysis with the development team") + report.append("2. Choose a strategy based on project constraints and goals") + report.append("3. Create a plan for incremental refactoring") + report.append("4. Test each change thoroughly to ensure system stability") + report.append("5. Document the architectural decisions") + report.append("") + + return '\n'.join(report) + + def _get_date(self) -> str: + """Get current date.""" + from datetime import datetime + return datetime.now().strftime('%Y-%m-%d') + + +def main(): + repo_root = os.getcwd() + + analyzer = VMCoreRTCycleAnalyzer(repo_root) + + print("=" * 80) + print("DETAILED ANALYSIS: org.jnode.vm.core ↔ rt CIRCULAR DEPENDENCY") + print("=" * 80) + print() + + vm_core_to_rt, rt_to_vm_core = analyzer.analyze_cycle() + + print("\n" + "=" * 80) + print("GENERATING REPORT") + print("=" * 80) + + report = analyzer.generate_report(vm_core_to_rt, rt_to_vm_core) + + output_file = Path(repo_root) / 'VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md' + with open(output_file, 'w', encoding='utf-8') as f: + f.write(report) + + print(f"\nReport generated: {output_file}") + print("\nSummary:") + print(f" - Classes in org.jnode.vm.core importing from rt: {len(vm_core_to_rt)}") + print(f" - Classes in rt importing from org.jnode.vm.core: {len(rt_to_vm_core)}") + print(f" - Total classes involved: {len(vm_core_to_rt) + len(rt_to_vm_core)}") + + if vm_core_to_rt: + print(f"\n Top 3 classes in vm.core with least rt dependencies:") + for entry in vm_core_to_rt[:3]: + print(f" - {entry['class']} ({entry['count']} dependency/dependencies)") + + if rt_to_vm_core: + print(f"\n Top 3 classes in rt with least vm.core dependencies:") + for entry in rt_to_vm_core[:3]: + print(f" - {entry['class']} ({entry['count']} dependency/dependencies)") + + +if __name__ == '__main__': + main() From b6686795745d2ad8eae07f81bf66ea487827107a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:08:54 +0000 Subject: [PATCH 3/8] =?UTF-8?q?Add=20concrete=20proposal=20to=20break=20vm?= =?UTF-8?q?.core=20=E2=86=94=20rt=20circular=20dependency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md | 235 ++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md diff --git a/BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md b/BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md new file mode 100644 index 000000000..2441ae46f --- /dev/null +++ b/BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md @@ -0,0 +1,235 @@ +# Proposal to Break org.jnode.vm.core ↔ rt Circular Dependency + +**Date:** 2025-11-16 +**Status:** Proposal for Discussion + +## Executive Summary + +This document proposes a concrete approach to break the circular dependency between `org.jnode.vm.core` and `rt` plugins, involving 154 classes. The proposal focuses on the most practical and least risky approach: **moving specific classes between plugins and extracting API interfaces**. + +## Background + +Based on the detailed analysis in `VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md`: +- **113 classes** in org.jnode.vm.core import from rt +- **41 classes** in rt import from org.jnode.vm.core +- Most dependencies involve fundamental JVM classes (java.lang.*, java.util.*, etc.) + +## Analysis of the Problem + +### Root Cause + +The circular dependency exists because: + +1. **Native VM implementations in rt** need access to JNode-specific VM classes (VmType, VmSystem, VmIsolate, etc.) +2. **VM core classes** use standard Java APIs from rt (Collections, I/O, Security, etc.) +3. **javax.isolate API** (in rt) wraps JNode VM implementations + +### Why This is Difficult + +The dependency is **fundamental to the architecture**: +- The VM needs the standard library to operate +- The standard library needs VM internals for native implementations +- This is a classic bootstrap problem + +## Recommended Approach + +Given the analysis, I recommend **Strategy 1 with targeted moves** as the most practical solution: + +### Phase 1: Move JNodePermission to rt (EASY - Quick Win) + +**Rationale:** +- JNodePermission is a simple security permission class +- It only extends java.security.BasicPermission (already in rt) +- It's used by both rt and vm.core +- Moving it eliminates one circular dependency + +**Changes:** +1. Move `core/src/core/org/jnode/permission/JNodePermission.java` → `core/src/classpath/vm/org/jnode/permission/JNodePermission.java` +2. Update `rt` plugin descriptor to export `org.jnode.permission.*` +3. Remove `org.jnode.permission` export from `org.jnode.vm.core` descriptor +4. Update any imports in both plugins + +**Impact:** Minimal - simple class with no dependencies on vm.core internals + +**Risk:** Low - it's already a shared API-like class + +### Phase 2: Create org.jnode.vm.isolate.api Plugin (MEDIUM) + +**Rationale:** +- The javax.isolate API (in rt) currently wraps VmIsolate classes (in vm.core) +- This creates a tight circular dependency +- Extracting isolate APIs breaks this cycle + +**Changes:** + +1. **Create new plugin:** `org.jnode.vm.isolate.api` + +2. **Move isolate API interfaces:** + - Create interface versions of: VmIsolate, VmLink, VmStreamBindings, LinkMessageFactory + - Keep implementations in org.jnode.vm.core with interface implementations + +3. **Update dependencies:** + ``` + rt → org.jnode.vm.isolate.api (for javax.isolate wrapper implementations) + org.jnode.vm.core → org.jnode.vm.isolate.api (implements the interfaces) + org.jnode.vm.isolate.api → rt (uses java.* classes) + ``` + +4. **Affected classes in rt (4 classes):** + - javax.isolate.LinkMessage + - javax.isolate.Isolate + - javax.isolate.StreamBindings + - javax.isolate.Link + +5. **Affected classes in vm.core (7 classes):** + - org.jnode.vm.isolate.VmIsolate + - org.jnode.vm.isolate.VmLink + - org.jnode.vm.isolate.VmStreamBindings + - org.jnode.vm.isolate.LinkMessageFactory + - (plus related implementation classes) + +**Impact:** Medium - requires interface extraction and implementation updates + +**Risk:** Medium - affects isolate subsystem but well-isolated + +### Phase 3: Analyze Native Implementation Pattern (COMPLEX - Later) + +**Observation:** +Most rt → vm.core dependencies are in "Native*" classes: +- NativeObject, NativeSystem, NativeRuntime, NativeThread, etc. +- These are JNode's implementations of standard Java native methods + +**Two Options:** + +**Option A: Keep as-is (RECOMMENDED)** +- Accept that Native* implementations need VM access +- Document this as a design decision +- The circular dependency at this level is **by design** - the VM and runtime are tightly coupled + +**Option B: Move Native* classes to vm.core** +- Move all Native* implementations from rt to org.jnode.vm.core +- Update rt descriptors to keep only pure Java classpath code +- **Risk:** High - breaks the separation between classpath and VM + +**Recommendation:** Keep Native* classes in rt but accept the dependency as **intentional and necessary**. The VM and its native implementations are inherently coupled. + +## Detailed Implementation Plan + +### Step 1: JNodePermission Move (1-2 hours) + +```bash +# 1. Move the file +mkdir -p core/src/classpath/vm/org/jnode/permission +git mv core/src/core/org/jnode/permission/JNodePermission.java \ + core/src/classpath/vm/org/jnode/permission/JNodePermission.java + +# 2. Update rt descriptor (core/descriptors/org.classpath.core.xml) +# Add to section: +# + +# 3. Update vm.core descriptor (core/descriptors/org.jnode.vm.core.xml) +# Remove from section: +# + +# 4. Build and test +./build.sh clean build +``` + +### Step 2: Create org.jnode.vm.isolate.api (4-8 hours) + +```bash +# 1. Create descriptor: core/descriptors/org.jnode.vm.isolate.api.xml +# 2. Create interface directory structure +# 3. Extract interfaces from implementation classes +# 4. Update implementations to implement interfaces +# 5. Update javax.isolate classes to use interfaces +# 6. Build and test extensively +``` + +### Step 3: Document Decision (1 hour) + +Create architectural documentation explaining: +- Why Native* → vm.core dependency is acceptable +- The bootstrap architecture +- Guidelines for future development + +## Expected Outcomes + +After implementing Phases 1 and 2: + +### Reduction in Circular Dependencies +- **Before:** 154 classes involved in cycle +- **After Phase 1:** 153 classes (-1) +- **After Phase 2:** ~145 classes (-9) +- **Remaining:** ~145 classes (mostly Native* implementations) + +### Improved Architecture +- Clear API layer for isolate subsystem +- Better separation between public APIs and implementations +- Documented and accepted VM/runtime coupling + +### Remaining Circular Dependencies +**Accepted as intentional:** +- Native* implementations need VM internals ✓ By design +- VM needs Java standard library ✓ Fundamental requirement + +## Why Not Other Strategies? + +### Why not Strategy 4 (Merge vm.core and rt)? +**Answer:** Would lose modularity and make the codebase harder to maintain. The separation between VM implementation and standard library is valuable. + +### Why not move all Native* classes? +**Answer:** Native* classes implement the Java standard library's native methods. Moving them to vm.core would break the conceptual separation between "standard library" and "VM implementation." + +### Why not create interfaces for everything? +**Answer:** Overhead and complexity. Most VM ↔ rt dependencies are fundamental and cannot be broken without major architectural changes. + +## Risk Assessment + +| Phase | Risk Level | Mitigation | +|-------|-----------|------------| +| Phase 1: JNodePermission | **LOW** | Simple move, well-isolated class | +| Phase 2: Isolate API | **MEDIUM** | Extensive testing, incremental rollout | +| Remaining dependencies | **LOW** | Accept as design decision, document | + +## Testing Plan + +For each phase: + +1. **Unit Tests:** Verify moved/changed classes work correctly +2. **Integration Tests:** Test isolate functionality end-to-end +3. **Build Tests:** Ensure clean build with no circular plugin dependencies +4. **Boot Tests:** Verify JNode boots correctly with qemu +5. **Regression Tests:** Run existing test suites + +## Timeline + +- **Phase 1:** 1 day (implementation + testing) +- **Phase 2:** 3-5 days (implementation + extensive testing) +- **Documentation:** 1 day +- **Total:** 5-7 days of focused development + +## Alternatives Considered + +1. **Do Nothing:** Not acceptable - circular dependencies cause build and maintenance issues +2. **Major Refactoring:** Too risky - would destabilize the entire VM +3. **Consolidation:** Loses architectural benefits of separation + +## Conclusion + +This proposal offers a **pragmatic, incremental approach** to breaking the circular dependency: + +✅ **Quick wins** with minimal risk (Phase 1) +✅ **Targeted improvement** where it matters (Phase 2) +✅ **Accepts reality** for fundamental VM/runtime coupling +✅ **Documents decisions** for future maintainers + +The key insight: **Not all circular dependencies should be eliminated**. Some represent fundamental architectural relationships that are better accepted and documented than fought against. + +## Recommendation + +**Proceed with Phase 1 immediately** as a low-risk quick win, then evaluate Phase 2 based on team feedback and priorities. + +--- + +**Next Action:** Review this proposal with the development team and get approval to proceed with Phase 1. From 7454c2949fd316ae51c28ce525e3b6aa94a9dc03 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:10:35 +0000 Subject: [PATCH 4/8] Add comprehensive summary of circular dependency analysis Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- CIRCULAR_DEPENDENCY_SUMMARY.md | 148 +++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 CIRCULAR_DEPENDENCY_SUMMARY.md diff --git a/CIRCULAR_DEPENDENCY_SUMMARY.md b/CIRCULAR_DEPENDENCY_SUMMARY.md new file mode 100644 index 000000000..e58928d63 --- /dev/null +++ b/CIRCULAR_DEPENDENCY_SUMMARY.md @@ -0,0 +1,148 @@ +# Summary: Analysis of org.jnode.vm.core ↔ rt Circular Dependency + +**Date:** 2025-11-16 +**Task:** Analyze and propose solutions for breaking the circular dependency between org.jnode.vm.core and rt plugins + +## Deliverables + +This analysis provides three key documents: + +### 1. Detailed Dependency Analysis +**File:** `VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md` + +**Content:** +- Complete list of all 154 classes involved in the circular dependency +- Classes sorted by number of dependencies (least dependencies first) +- Breakdown of which classes in vm.core import from rt (113 classes) +- Breakdown of which classes in rt import from vm.core (41 classes) +- Four strategic approaches to breaking the dependency + +**Key Finding:** The circular dependency involves fundamental architecture - the VM needs the standard library, and the standard library's native implementations need VM internals. + +### 2. Concrete Implementation Proposal +**File:** `BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md` + +**Content:** +- Three-phase approach to reducing the circular dependency +- Phase 1: Move JNodePermission to rt (Quick win, low risk) +- Phase 2: Extract org.jnode.vm.isolate.api (Medium effort, significant impact) +- Phase 3: Document Native* pattern as intentional design (Accept remaining dependencies) +- Detailed implementation steps with timeline estimates +- Risk assessment and testing plan + +**Key Insight:** Not all circular dependencies should be eliminated. Some represent fundamental architectural relationships. + +### 3. Analysis Tool +**File:** `analyze_vm_core_rt_cycle.py` + +**Purpose:** Automated tool to analyze the circular dependency + +**Features:** +- Discovers plugin descriptors and exports +- Analyzes Java import statements +- Maps dependencies between plugins at the class level +- Generates detailed reports sorted by dependency count +- Can be run regularly to track progress + +**Usage:** +```bash +python3 analyze_vm_core_rt_cycle.py +``` + +## Key Findings + +### Classes with Least Dependencies (Best Candidates for Refactoring) + +**From org.jnode.vm.core → rt (top 5):** +1. `VmSystemSettings` - 1 dependency +2. `JNodePermission` - 1 dependency ⭐ Recommended for Phase 1 +3. `BaseVmArchitecture` - 1 dependency +4. `VmReflection` - 1 dependency +5. `ResourceManagerImpl` - 1 dependency + +**From rt → org.jnode.vm.core (top 5):** +1. `javax.isolate.LinkMessage` - 1 dependency ⭐ Part of Phase 2 +2. `javax.isolate.Isolate` - 1 dependency ⭐ Part of Phase 2 +3. `javax.isolate.StreamBindings` - 1 dependency ⭐ Part of Phase 2 +4. `javax.isolate.Link` - 1 dependency ⭐ Part of Phase 2 +5. `java.lang.VMSecurityManager` - 1 dependency + +### The Native* Pattern + +**Finding:** 31 out of 41 classes in rt that depend on vm.core are "Native*" classes: +- NativeObject, NativeSystem, NativeThread, NativeRuntime, etc. +- These implement JNode's native method implementations +- This dependency is **by design** and should be accepted + +### Recommended Actions + +**Immediate (Low Risk):** +- Move `JNodePermission` from vm.core to rt +- Impact: Reduces circular dependency by 1 class +- Risk: Very low - simple permission class +- Time: 1 day including testing + +**Short Term (Medium Risk):** +- Create `org.jnode.vm.isolate.api` plugin with interfaces +- Move isolate API definitions out of implementations +- Impact: Reduces circular dependency by ~9 classes +- Risk: Medium - requires interface extraction +- Time: 3-5 days including testing + +**Long Term (Documentation):** +- Document the Native* → vm.core pattern as intentional +- Create architectural guidelines for future development +- Accept ~145 remaining dependencies as fundamental to the design +- Time: 1 day + +## Architecture Insight + +The analysis reveals a fundamental truth about JNode's architecture: + +> **The VM and runtime are intentionally coupled.** The Java standard library (rt) contains native method implementations that must access VM internals. The VM uses standard Java classes. This is not a bug - it's the bootstrap architecture. + +**What this means:** +- Full elimination of the cycle is neither necessary nor desirable +- Focus should be on reducing **accidental** coupling +- **Intentional** coupling (Native* implementations) should be documented and accepted + +## Statistics + +| Metric | Value | +|--------|-------| +| Total classes in cycle | 154 | +| Classes in vm.core importing rt | 113 | +| Classes in rt importing vm.core | 41 | +| Native* implementation classes | 31 | +| javax.isolate wrapper classes | 4 | +| Classes with 1 dependency | 33 | +| Classes with 2-5 dependencies | 61 | +| Classes with >5 dependencies | 60 | + +## Next Steps + +1. ✅ Read documentation in docs/plugins +2. ✅ Analyze circular dependency at source level +3. ✅ Sort classes by number of dependencies +4. ✅ Propose solutions to break the dependency +5. ⏭️ **Get stakeholder approval for proposal** +6. ⏭️ **Implement Phase 1 (JNodePermission move)** +7. ⏭️ **Evaluate results and plan Phase 2** + +## References + +- **Plugin Documentation:** `docs/plugins/plugin.md` +- **Plugin List Documentation:** `docs/plugins/plugin-list.md` +- **Existing Analysis:** `SOURCE_LEVEL_CYCLES_REPORT.md` and `SOURCE_LEVEL_CYCLES_SUMMARY.md` +- **Original Cycles Documentation:** Available in TODO files (referenced in analysis) + +## Conclusion + +This analysis provides: +1. ✅ **Complete understanding** of the circular dependency +2. ✅ **Detailed class-level breakdown** sorted by dependencies +3. ✅ **Practical, implementable proposal** with phases +4. ✅ **Automated analysis tool** for ongoing monitoring +5. ✅ **Architectural insights** about what should and shouldn't be changed + +The circular dependency is **well-understood** and a **concrete path forward** has been defined. The next step is to get team approval and begin implementation. From 02bc8f31a8cdaab2d3600a8dd33cb711c7713716 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:12:13 +0000 Subject: [PATCH 5/8] Add README for circular dependency analysis deliverables Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- CIRCULAR_DEPENDENCY_README.md | 207 ++++++++++++++++++ .../analyze_vm_core_rt_cycle.cpython-312.pyc | Bin 0 -> 19914 bytes 2 files changed, 207 insertions(+) create mode 100644 CIRCULAR_DEPENDENCY_README.md create mode 100644 __pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc diff --git a/CIRCULAR_DEPENDENCY_README.md b/CIRCULAR_DEPENDENCY_README.md new file mode 100644 index 000000000..1e70b1d56 --- /dev/null +++ b/CIRCULAR_DEPENDENCY_README.md @@ -0,0 +1,207 @@ +# Circular Dependency Analysis - README + +This directory contains a comprehensive analysis of the circular dependency between the `org.jnode.vm.core` and `rt` plugins in the JNode project. + +## Problem Statement + +The task was to: +1. Read documentation in `docs/plugins` +2. List detailed source-level dependencies between `org.jnode.vm.core` and `rt` +3. Sort results by classes with fewer dependencies (involved in circular dependency) +4. Propose solutions to break the circular dependency + +## Delivered Artifacts + +### 1. Analysis Tool: `analyze_vm_core_rt_cycle.py` + +**Purpose:** Automated tool to analyze the circular dependency between org.jnode.vm.core and rt at the Java source code level. + +**Usage:** +```bash +python3 analyze_vm_core_rt_cycle.py +``` + +**Output:** +- Generates `VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md` with complete dependency list +- Shows all 154 classes involved in the circular dependency +- Lists classes sorted by number of dependencies (least dependencies first) +- Separates vm.core → rt dependencies from rt → vm.core dependencies + +**What it does:** +- Parses plugin descriptors to identify which packages belong to which plugins +- Analyzes Java import statements in all source files +- Maps dependencies at the class level +- Generates detailed reports with actionable recommendations + +### 2. Detailed Analysis Report: `VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md` + +**Content:** +- **154 classes** involved in the circular dependency +- **113 classes** in org.jnode.vm.core that import from rt +- **41 classes** in rt that import from org.jnode.vm.core +- Each class listed with: + - Full qualified class name + - File path + - List of imports that create the circular dependency + - Number of dependencies +- **Sorted by dependency count** (least dependencies first) + +**Key sections:** +1. Summary statistics +2. Classes in vm.core importing from rt (sorted) +3. Classes in rt importing from vm.core (sorted) +4. Recommendations to break the circular dependency + +### 3. Implementation Proposal: `BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md` + +**Content:** +- **Three-phase approach** to breaking the circular dependency +- **Phase 1:** Move JNodePermission to rt (quick win, 1 day) +- **Phase 2:** Create org.jnode.vm.isolate.api plugin (medium effort, 3-5 days) +- **Phase 3:** Document Native* pattern as intentional design +- Detailed implementation steps for each phase +- Risk assessment and testing plan +- Timeline estimates + +**Key insight:** +Not all circular dependencies should be eliminated. The analysis shows that 31 of 41 rt → vm.core dependencies are in Native* implementation classes, which represent **intentional architectural coupling** between the VM and runtime. + +### 4. Executive Summary: `CIRCULAR_DEPENDENCY_SUMMARY.md` + +**Purpose:** High-level overview of findings and recommendations + +**Content:** +- Quick reference to all deliverables +- Key findings and statistics +- Classes with least dependencies (best refactoring candidates) +- Architecture insights +- Next steps and recommendations + +## Key Findings + +### Statistics + +| Metric | Value | +|--------|-------| +| Total classes in cycle | 154 | +| Classes in vm.core importing rt | 113 | +| Classes in rt importing vm.core | 41 | +| Native* implementation classes | 31 | +| javax.isolate wrapper classes | 4 | +| Classes with 1 dependency | 33 | +| Classes with 2-5 dependencies | 61 | +| Classes with >5 dependencies | 60 | + +### Top Refactoring Candidates + +**From org.jnode.vm.core (classes with 1 dependency):** +1. `VmSystemSettings` - imports java.util.Properties +2. `JNodePermission` - imports java.security.BasicPermission ⭐ **Phase 1 target** +3. `BaseVmArchitecture` - imports java.nio.ByteOrder +4. `VmReflection` - imports java.lang.reflect.InvocationTargetException +5. `ResourceManagerImpl` - imports javax.naming.NamingException + +**From rt (classes with 1 dependency):** +1. `javax.isolate.LinkMessage` - imports org.jnode.vm.isolate.LinkMessageFactory ⭐ **Phase 2 target** +2. `javax.isolate.Isolate` - imports org.jnode.vm.isolate.VmIsolate ⭐ **Phase 2 target** +3. `javax.isolate.StreamBindings` - imports org.jnode.vm.isolate.VmStreamBindings ⭐ **Phase 2 target** +4. `javax.isolate.Link` - imports org.jnode.vm.isolate.VmLink ⭐ **Phase 2 target** +5. `java.lang.VMSecurityManager` - imports org.jnode.vm.VmSystem + +### Architecture Insight + +The analysis reveals an important architectural pattern: + +**Native* Classes Pattern:** +- 31 out of 41 classes in rt that depend on vm.core are "Native*" implementation classes +- These classes implement JNode's native method implementations +- Examples: NativeObject, NativeSystem, NativeThread, NativeRuntime, NativeUnsafe +- This dependency is **by design** and represents the fundamental coupling between: + - The Java standard library (rt) + - The VM implementation (vm.core) + +**Conclusion:** This is not a bug - it's the bootstrap architecture. Accept and document it. + +## Recommended Actions + +### Immediate (Low Risk) +✅ **Phase 1: Move JNodePermission** +- Move from org.jnode.vm.core to rt +- Reduces circular dependency by 1 class +- Very low risk - simple permission class +- Estimated time: 1 day including testing + +### Short Term (Medium Risk) +⏭️ **Phase 2: Extract Isolate API** +- Create org.jnode.vm.isolate.api plugin +- Move isolate interface definitions +- Reduces circular dependency by ~9 classes +- Medium risk - requires interface extraction +- Estimated time: 3-5 days including testing + +### Long Term (Documentation) +📝 **Phase 3: Document Native* Pattern** +- Document the Native* → vm.core pattern as intentional +- Create architectural guidelines +- Accept ~145 remaining dependencies as fundamental +- Estimated time: 1 day + +## How to Use These Tools + +### To Analyze Current State +```bash +cd /home/runner/work/jnode/jnode +python3 analyze_vm_core_rt_cycle.py +# Review VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md +``` + +### To Track Progress After Changes +```bash +# After making changes to break dependencies +python3 analyze_vm_core_rt_cycle.py +# Compare new report with previous one +diff VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md.old VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md +``` + +### To Implement Phase 1 +```bash +# Follow steps in BREAKING_VM_CORE_RT_CYCLE_PROPOSAL.md +# Phase 1 section provides exact commands and changes needed +``` + +## Related Documentation + +- **Plugin System:** `docs/plugins/plugin.md` +- **Plugin Lists:** `docs/plugins/plugin-list.md` +- **Previous Analysis:** `SOURCE_LEVEL_CYCLES_REPORT.md` +- **Previous Summary:** `SOURCE_LEVEL_CYCLES_SUMMARY.md` + +## Notes + +### Why Not Eliminate All Dependencies? + +The analysis shows that full elimination of the circular dependency is: +1. **Not necessary** - Some coupling is by design +2. **Not beneficial** - Would require major architectural changes +3. **Not practical** - Native implementations fundamentally need VM access + +### Focus Areas + +Instead of trying to eliminate all dependencies, focus on: +1. ✅ Reducing **accidental** coupling (Phases 1 & 2) +2. ✅ Documenting **intentional** coupling (Phase 3) +3. ✅ Maintaining clear architectural boundaries +4. ✅ Tracking dependencies over time + +## Contact + +For questions about this analysis, refer to: +- The detailed reports in this directory +- The plugin documentation in `docs/plugins/` +- The JNode development team + +--- + +**Analysis Date:** 2025-11-16 +**Tool Version:** 1.0 +**Status:** Analysis Complete, Implementation Proposed diff --git a/__pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc b/__pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7d26514e15ffb133ef384eea6fef83e75896d7f GIT binary patch literal 19914 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 e$hXMlev+VaXT>kg<-euqe|dD-Oi&d{h5sA&zx Date: Sun, 16 Nov 2025 13:12:43 +0000 Subject: [PATCH 6/8] Remove Python cache files and update .gitignore Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- .gitignore | 1 + .../analyze_vm_core_rt_cycle.cpython-312.pyc | Bin 19914 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 __pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc diff --git a/.gitignore b/.gitignore index 3b429ced8..96916285a 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ classlib.pack.gz /mavenizer/target/** **/.shelf/ **/.idea/ +__pycache__/ diff --git a/__pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc b/__pycache__/analyze_vm_core_rt_cycle.cpython-312.pyc deleted file mode 100644 index d7d26514e15ffb133ef384eea6fef83e75896d7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19914 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 e$hXMlev+VaXT>kg<-euqe|dD-Oi&d{h5sA&zx Date: Sun, 16 Nov 2025 13:29:52 +0000 Subject: [PATCH 7/8] Phase 1: Move JNodePermission from vm.core to rt plugin - Moved core/src/core/org/jnode/permission/JNodePermission.java to core/src/classpath/vm/org/jnode/permission/JNodePermission.java - Added org.jnode.permission.* export to rt plugin descriptor - Removed org.jnode.permission.* export from vm.core plugin descriptor - Reduced circular dependency from 154 to 153 classes Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md | 326 +++++++++--------- core/descriptors/org.classpath.core.xml | 1 + core/descriptors/org.jnode.vm.core.xml | 1 - .../org/jnode/permission/JNodePermission.java | 0 4 files changed, 162 insertions(+), 166 deletions(-) rename core/src/{core => classpath/vm}/org/jnode/permission/JNodePermission.java (100%) diff --git a/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md b/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md index f3e0dfd56..171220d07 100644 --- a/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md +++ b/VM_CORE_RT_CYCLE_DETAILED_ANALYSIS.md @@ -4,9 +4,9 @@ ## Summary -- **Classes in org.jnode.vm.core that import from rt:** 113 +- **Classes in org.jnode.vm.core that import from rt:** 112 - **Classes in rt that import from org.jnode.vm.core:** 41 -- **Total classes involved in circular dependency:** 154 +- **Total classes involved in circular dependency:** 153 ## Dependency Details @@ -20,454 +20,442 @@ **Imports from rt:** - `java.util.Properties` -#### 2. org.jnode.permission.JNodePermission (1 import) -**File:** `core/src/core/org/jnode/permission/JNodePermission.java` - -**Imports from rt:** -- `java.security.BasicPermission` - -#### 3. org.jnode.vm.BaseVmArchitecture (1 import) -**File:** `core/src/core/org/jnode/vm/BaseVmArchitecture.java` - -**Imports from rt:** -- `java.nio.ByteOrder` - -#### 4. org.jnode.vm.VmReflection (1 import) +#### 2. org.jnode.vm.VmReflection (1 import) **File:** `core/src/core/org/jnode/vm/VmReflection.java` **Imports from rt:** - `java.lang.reflect.InvocationTargetException` -#### 5. org.jnode.vm.ResourceManagerImpl (1 import) +#### 3. org.jnode.vm.ResourceManagerImpl (1 import) **File:** `core/src/core/org/jnode/vm/ResourceManagerImpl.java` **Imports from rt:** - `javax.naming.NamingException` -#### 6. org.jnode.vm.VmProcessClassLoader (1 import) +#### 4. org.jnode.vm.VmProcessClassLoader (1 import) **File:** `core/src/core/org/jnode/vm/VmProcessClassLoader.java` **Imports from rt:** - `java.util.HashSet` -#### 7. org.jnode.vm.performance.PerformanceCounters (1 import) +#### 5. org.jnode.vm.performance.PerformanceCounters (1 import) **File:** `core/src/core/org/jnode/vm/performance/PerformanceCounters.java` **Imports from rt:** - `java.util.Set` -#### 8. org.jnode.vm.bytecode.BytecodeViewer (1 import) +#### 6. org.jnode.vm.bytecode.BytecodeViewer (1 import) **File:** `core/src/core/org/jnode/vm/bytecode/BytecodeViewer.java` **Imports from rt:** - `java.io.PrintStream` -#### 9. org.jnode.vm.bytecode.DeadBlockFinder (1 import) +#### 7. org.jnode.vm.bytecode.DeadBlockFinder (1 import) **File:** `core/src/core/org/jnode/vm/bytecode/DeadBlockFinder.java` **Imports from rt:** - `java.util.TreeMap` -#### 10. org.jnode.vm.bytecode.BytecodeParser (1 import) +#### 8. org.jnode.vm.bytecode.BytecodeParser (1 import) **File:** `core/src/core/org/jnode/vm/bytecode/BytecodeParser.java` **Imports from rt:** - `java.nio.ByteBuffer` -#### 11. org.jnode.vm.bytecode.ControlFlowGraph (1 import) +#### 9. org.jnode.vm.bytecode.ControlFlowGraph (1 import) **File:** `core/src/core/org/jnode/vm/bytecode/ControlFlowGraph.java` **Imports from rt:** - `java.util.Iterator` -#### 12. org.jnode.vm.scheduler.VmProcessor (1 import) +#### 10. org.jnode.vm.scheduler.VmProcessor (1 import) **File:** `core/src/core/org/jnode/vm/scheduler/VmProcessor.java` **Imports from rt:** - `java.io.PrintWriter` -#### 13. org.jnode.vm.facade.Vm (1 import) +#### 11. org.jnode.vm.facade.Vm (1 import) **File:** `core/src/core/org/jnode/vm/facade/Vm.java` **Imports from rt:** - `java.util.List` -#### 14. org.jnode.vm.facade.VmProcessor (1 import) +#### 12. org.jnode.vm.facade.VmProcessor (1 import) **File:** `core/src/core/org/jnode/vm/facade/VmProcessor.java` **Imports from rt:** - `java.io.PrintWriter` -#### 15. org.jnode.vm.facade.HeapStatistics (1 import) +#### 13. org.jnode.vm.facade.HeapStatistics (1 import) **File:** `core/src/core/org/jnode/vm/facade/HeapStatistics.java` **Imports from rt:** - `java.io.IOException` -#### 16. org.jnode.vm.facade.VmHeapManager (1 import) +#### 14. org.jnode.vm.facade.VmHeapManager (1 import) **File:** `core/src/core/org/jnode/vm/facade/VmHeapManager.java` **Imports from rt:** - `java.io.PrintWriter` -#### 17. org.jnode.vm.facade.VmArchitecture (1 import) +#### 15. org.jnode.vm.facade.VmArchitecture (1 import) **File:** `core/src/core/org/jnode/vm/facade/VmArchitecture.java` **Imports from rt:** - `java.nio.ByteOrder` -#### 18. org.jnode.vm.classmgr.VmStaticsAllocator (1 import) +#### 16. org.jnode.vm.classmgr.VmStaticsAllocator (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/VmStaticsAllocator.java` **Imports from rt:** - `java.io.PrintWriter` -#### 19. org.jnode.vm.classmgr.Mangler (1 import) +#### 17. org.jnode.vm.classmgr.Mangler (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/Mangler.java` **Imports from rt:** - `java.util.StringTokenizer` -#### 20. org.jnode.vm.classmgr.VmPrimitiveClass (1 import) +#### 18. org.jnode.vm.classmgr.VmPrimitiveClass (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/VmPrimitiveClass.java` **Imports from rt:** - `java.security.ProtectionDomain` -#### 21. org.jnode.vm.classmgr.Signature (1 import) +#### 19. org.jnode.vm.classmgr.Signature (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/Signature.java` **Imports from rt:** - `java.util.ArrayList` -#### 22. org.jnode.vm.classmgr.VmNormalClass (1 import) +#### 20. org.jnode.vm.classmgr.VmNormalClass (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/VmNormalClass.java` **Imports from rt:** - `java.security.ProtectionDomain` -#### 23. org.jnode.vm.classmgr.VmStaticsIterator (1 import) +#### 21. org.jnode.vm.classmgr.VmStaticsIterator (1 import) **File:** `core/src/core/org/jnode/vm/classmgr/VmStaticsIterator.java` **Imports from rt:** - `java.util.Iterator` -#### 24. org.jnode.vm.memmgr.VmHeapManager (1 import) +#### 22. org.jnode.vm.memmgr.VmHeapManager (1 import) **File:** `core/src/core/org/jnode/vm/memmgr/VmHeapManager.java` **Imports from rt:** - `java.io.PrintWriter` -#### 25. org.jnode.vm.isolate.LinkLinkMessage (1 import) +#### 23. org.jnode.vm.isolate.LinkLinkMessage (1 import) **File:** `core/src/core/org/jnode/vm/isolate/LinkLinkMessage.java` **Imports from rt:** - `javax.isolate.Link` -#### 26. org.jnode.vm.isolate.IsolateStatusImpl (1 import) +#### 24. org.jnode.vm.isolate.IsolateStatusImpl (1 import) **File:** `core/src/core/org/jnode/vm/isolate/IsolateStatusImpl.java` **Imports from rt:** - `javax.isolate.IsolateStatus` -#### 27. org.jnode.vm.isolate.LinkMessageImpl (1 import) +#### 25. org.jnode.vm.isolate.LinkMessageImpl (1 import) **File:** `core/src/core/org/jnode/vm/isolate/LinkMessageImpl.java` **Imports from rt:** - `javax.isolate.LinkMessage` -#### 28. org.jnode.vm.isolate.StatusLinkMessage (1 import) +#### 26. org.jnode.vm.isolate.StatusLinkMessage (1 import) **File:** `core/src/core/org/jnode/vm/isolate/StatusLinkMessage.java` **Imports from rt:** - `javax.isolate.IsolateStatus` -#### 29. org.jnode.vm.isolate.IsolateLinkMessage (1 import) +#### 27. org.jnode.vm.isolate.IsolateLinkMessage (1 import) **File:** `core/src/core/org/jnode/vm/isolate/IsolateLinkMessage.java` **Imports from rt:** - `javax.isolate.Isolate` -#### 30. org.jnode.vm.compiler.NativeCodeCompiler (1 import) +#### 28. org.jnode.vm.compiler.NativeCodeCompiler (1 import) **File:** `core/src/core/org/jnode/vm/compiler/NativeCodeCompiler.java` **Imports from rt:** - `java.io.Writer` -#### 31. org.jnode.vm.compiler.CompiledExceptionHandler (1 import) +#### 29. org.jnode.vm.compiler.CompiledExceptionHandler (1 import) **File:** `core/src/core/org/jnode/vm/compiler/CompiledExceptionHandler.java` **Imports from rt:** - `java.io.PrintStream` -#### 32. org.jnode.vm.x86.GDT (1 import) +#### 30. org.jnode.vm.x86.GDT (1 import) **File:** `core/src/core/org/jnode/vm/x86/GDT.java` **Imports from rt:** - `java.io.PrintStream` -#### 33. org.jnode.vm.x86.PIC8259A (1 import) +#### 31. org.jnode.vm.x86.PIC8259A (1 import) **File:** `core/src/core/org/jnode/vm/x86/PIC8259A.java` **Imports from rt:** - `javax.naming.NameNotFoundException` -#### 34. org.jnode.vm.x86.VmX86Processor (1 import) +#### 32. org.jnode.vm.x86.VmX86Processor (1 import) **File:** `core/src/core/org/jnode/vm/x86/VmX86Processor.java` **Imports from rt:** - `java.io.PrintWriter` -#### 35. org.jnode.vm.memmgr.def.DefaultHeapManager (1 import) +#### 33. org.jnode.vm.memmgr.def.DefaultHeapManager (1 import) **File:** `core/src/core/org/jnode/vm/memmgr/def/DefaultHeapManager.java` **Imports from rt:** - `java.io.PrintWriter` -#### 36. org.jnode.vm.compiler.ir.IRBasicBlock (1 import) +#### 34. org.jnode.vm.compiler.ir.IRBasicBlock (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/IRBasicBlock.java` **Imports from rt:** - `java.util.List` -#### 37. org.jnode.vm.compiler.ir.SSAStack (1 import) +#### 35. org.jnode.vm.compiler.ir.SSAStack (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/SSAStack.java` **Imports from rt:** - `java.util.List` -#### 38. org.jnode.vm.compiler.ir.PhiOperand (1 import) +#### 36. org.jnode.vm.compiler.ir.PhiOperand (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/PhiOperand.java` **Imports from rt:** - `java.util.List` -#### 39. org.jnode.vm.compiler.ir.quad.TableswitchQuad (1 import) +#### 37. org.jnode.vm.compiler.ir.quad.TableswitchQuad (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/quad/TableswitchQuad.java` **Imports from rt:** - `java.util.Arrays` -#### 40. org.jnode.vm.compiler.ir.quad.LookupswitchQuad (1 import) +#### 38. org.jnode.vm.compiler.ir.quad.LookupswitchQuad (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/quad/LookupswitchQuad.java` **Imports from rt:** - `java.util.Arrays` -#### 41. org.jnode.vm.compiler.ir.quad.PhiAssignQuad (1 import) +#### 39. org.jnode.vm.compiler.ir.quad.PhiAssignQuad (1 import) **File:** `core/src/core/org/jnode/vm/compiler/ir/quad/PhiAssignQuad.java` **Imports from rt:** - `java.util.List` -#### 42. org.jnode.vm.x86.compiler.AbstractX86Compiler (1 import) +#### 40. org.jnode.vm.x86.compiler.AbstractX86Compiler (1 import) **File:** `core/src/core/org/jnode/vm/x86/compiler/AbstractX86Compiler.java` **Imports from rt:** - `java.io.Writer` -#### 43. org.jnode.vm.x86.compiler.l1b.ItemFactory (1 import) +#### 41. org.jnode.vm.x86.compiler.l1b.ItemFactory (1 import) **File:** `core/src/core/org/jnode/vm/x86/compiler/l1b/ItemFactory.java` **Imports from rt:** - `java.util.ArrayList` -#### 44. org.jnode.vm.x86.compiler.l1a.ItemFactory (1 import) +#### 42. org.jnode.vm.x86.compiler.l1a.ItemFactory (1 import) **File:** `core/src/core/org/jnode/vm/x86/compiler/l1a/ItemFactory.java` **Imports from rt:** - `java.util.ArrayList` -#### 45. org.jnode.vm.Unsafe (2 imports) -**File:** `core/src/core/org/jnode/vm/Unsafe.java` - -**Imports from rt:** -- `java.io.PrintWriter` -- `java.io.StringWriter` - -#### 46. org.jnode.vm.MemoryResourceImpl (2 imports) +#### 43. org.jnode.vm.MemoryResourceImpl (2 imports) **File:** `core/src/core/org/jnode/vm/MemoryResourceImpl.java` **Imports from rt:** - `java.nio.ByteBuffer` - `java.nio.MemoryRawData` -#### 47. org.jnode.vm.VmAbstractClassLoader (2 imports) +#### 44. org.jnode.vm.BaseVmArchitecture (2 imports) +**File:** `core/src/core/org/jnode/vm/BaseVmArchitecture.java` + +**Imports from rt:** +- `java.nio.ByteOrder` +- `org.jnode.permission.JNodePermission` + +#### 45. org.jnode.vm.VmAbstractClassLoader (2 imports) **File:** `core/src/core/org/jnode/vm/VmAbstractClassLoader.java` **Imports from rt:** - `java.nio.ByteBuffer` - `java.security.ProtectionDomain` -#### 48. org.jnode.vm.VmJavaClassLoader (2 imports) +#### 46. org.jnode.vm.VmJavaClassLoader (2 imports) **File:** `core/src/core/org/jnode/vm/VmJavaClassLoader.java` **Imports from rt:** - `java.io.Writer` - `java.util.HashMap` -#### 49. org.jnode.vm.ResourceLoader (2 imports) +#### 47. org.jnode.vm.ResourceLoader (2 imports) **File:** `core/src/core/org/jnode/vm/ResourceLoader.java` **Imports from rt:** - `java.net.URL` - `java.nio.ByteBuffer` -#### 50. org.jnode.vm.bytecode.BasicBlockFinder (2 imports) +#### 48. org.jnode.vm.bytecode.BasicBlockFinder (2 imports) **File:** `core/src/core/org/jnode/vm/bytecode/BasicBlockFinder.java` **Imports from rt:** - `java.util.Comparator` - `java.util.TreeMap` -#### 51. org.jnode.vm.bytecode.BasicBlock (2 imports) +#### 49. org.jnode.vm.bytecode.BasicBlock (2 imports) **File:** `core/src/core/org/jnode/vm/bytecode/BasicBlock.java` **Imports from rt:** - `java.util.HashSet` - `java.util.Set` -#### 52. org.jnode.vm.facade.VmUtils (2 imports) +#### 50. org.jnode.vm.facade.VmUtils (2 imports) **File:** `core/src/core/org/jnode/vm/facade/VmUtils.java` **Imports from rt:** - `gnu.java.lang.VMClassHelper` - `java.io.PrintWriter` -#### 53. org.jnode.vm.objects.CounterGroup (2 imports) +#### 51. org.jnode.vm.objects.CounterGroup (2 imports) **File:** `core/src/core/org/jnode/vm/objects/CounterGroup.java` **Imports from rt:** - `java.util.Map` - `java.util.TreeMap` -#### 54. org.jnode.vm.classmgr.VmArrayClass (2 imports) +#### 52. org.jnode.vm.classmgr.VmArrayClass (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmArrayClass.java` **Imports from rt:** - `java.security.ProtectionDomain` - `java.util.HashSet` -#### 55. org.jnode.vm.classmgr.VmMethod (2 imports) +#### 53. org.jnode.vm.classmgr.VmMethod (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmMethod.java` **Imports from rt:** - `java.lang.reflect.Member` - `sun.reflect.ReflectionFactory` -#### 56. org.jnode.vm.classmgr.VmUTF8Convert (2 imports) +#### 54. org.jnode.vm.classmgr.VmUTF8Convert (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmUTF8Convert.java` **Imports from rt:** - `java.io.UTFDataFormatException` - `java.nio.ByteBuffer` -#### 57. org.jnode.vm.classmgr.VmAnnotatedElement (2 imports) +#### 55. org.jnode.vm.classmgr.VmAnnotatedElement (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmAnnotatedElement.java` **Imports from rt:** - `java.lang.annotation.Annotation` - `java.lang.reflect.AnnotatedElement` -#### 58. org.jnode.vm.classmgr.VmField (2 imports) +#### 56. org.jnode.vm.classmgr.VmField (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmField.java` **Imports from rt:** - `java.lang.reflect.Field` - `sun.reflect.ReflectionFactory` -#### 59. org.jnode.vm.classmgr.VmInterfaceClass (2 imports) +#### 57. org.jnode.vm.classmgr.VmInterfaceClass (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmInterfaceClass.java` **Imports from rt:** - `java.security.ProtectionDomain` - `java.util.HashSet` -#### 60. org.jnode.vm.classmgr.VmStatics (2 imports) +#### 58. org.jnode.vm.classmgr.VmStatics (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmStatics.java` **Imports from rt:** - `java.io.PrintWriter` - `java.nio.ByteOrder` -#### 61. org.jnode.vm.classmgr.VmAddressMap (2 imports) +#### 59. org.jnode.vm.classmgr.VmAddressMap (2 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmAddressMap.java` **Imports from rt:** - `java.io.PrintStream` - `java.util.ArrayList` -#### 62. org.jnode.vm.isolate.IsolateThread (2 imports) +#### 60. org.jnode.vm.isolate.IsolateThread (2 imports) **File:** `core/src/core/org/jnode/vm/isolate/IsolateThread.java` **Imports from rt:** - `java.io.InputStream` - `java.io.PrintStream` -#### 63. org.jnode.vm.x86.VmX86Architecture (2 imports) +#### 61. org.jnode.vm.x86.VmX86Architecture (2 imports) **File:** `core/src/core/org/jnode/vm/x86/VmX86Architecture.java` **Imports from rt:** - `java.nio.ByteOrder` - `java.util.HashMap` -#### 64. org.jnode.vm.memmgr.def.DefHeapStatistics (2 imports) +#### 62. org.jnode.vm.memmgr.def.DefHeapStatistics (2 imports) **File:** `core/src/core/org/jnode/vm/memmgr/def/DefHeapStatistics.java` **Imports from rt:** - `java.io.IOException` - `java.util.TreeMap` -#### 65. org.jnode.vm.compiler.ir.IRGenerator (2 imports) +#### 63. org.jnode.vm.compiler.ir.IRGenerator (2 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/IRGenerator.java` **Imports from rt:** - `java.util.Iterator` - `java.util.List` -#### 66. org.jnode.vm.compiler.ir.quad.AssignQuad (2 imports) +#### 64. org.jnode.vm.compiler.ir.quad.AssignQuad (2 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/quad/AssignQuad.java` **Imports from rt:** - `java.util.Collection` - `java.util.List` -#### 67. org.jnode.vm.compiler.ir.quad.Quad (2 imports) +#### 65. org.jnode.vm.compiler.ir.quad.Quad (2 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/quad/Quad.java` **Imports from rt:** - `java.util.Collection` - `java.util.List` -#### 68. org.jnode.vm.x86.performance.X86PerformanceCounters (2 imports) +#### 66. org.jnode.vm.x86.performance.X86PerformanceCounters (2 imports) **File:** `core/src/core/org/jnode/vm/x86/performance/X86PerformanceCounters.java` **Imports from rt:** - `java.util.Collections` - `java.util.Set` -#### 69. org.jnode.vm.x86.compiler.X86CompilerHelper (2 imports) +#### 67. org.jnode.vm.x86.compiler.X86CompilerHelper (2 imports) **File:** `core/src/core/org/jnode/vm/x86/compiler/X86CompilerHelper.java` **Imports from rt:** - `java.util.HashMap` - `java.util.Map` -#### 70. org.jnode.vm.x86.compiler.l1b.X86BytecodeVisitor (2 imports) +#### 68. org.jnode.vm.x86.compiler.l1b.X86BytecodeVisitor (2 imports) **File:** `core/src/core/org/jnode/vm/x86/compiler/l1b/X86BytecodeVisitor.java` **Imports from rt:** - `java.util.HashMap` - `java.util.Map` -#### 71. org.jnode.vm.x86.compiler.l2.X86Level2Compiler (2 imports) +#### 69. org.jnode.vm.x86.compiler.l2.X86Level2Compiler (2 imports) **File:** `core/src/core/org/jnode/vm/x86/compiler/l2/X86Level2Compiler.java` **Imports from rt:** - `java.util.Collection` - `java.util.List` -#### 72. org.jnode.assembler.NativeStream (3 imports) +#### 70. org.jnode.assembler.NativeStream (3 imports) **File:** `core/src/core/org/jnode/assembler/NativeStream.java` **Imports from rt:** @@ -475,7 +463,15 @@ - `java.io.OutputStream` - `java.util.Collection` -#### 73. org.jnode.vm.LoadCompileService (3 imports) +#### 71. org.jnode.vm.Unsafe (3 imports) +**File:** `core/src/core/org/jnode/vm/Unsafe.java` + +**Imports from rt:** +- `java.io.PrintWriter` +- `java.io.StringWriter` +- `org.jnode.permission.JNodePermission` + +#### 72. org.jnode.vm.LoadCompileService (3 imports) **File:** `core/src/core/org/jnode/vm/LoadCompileService.java` **Imports from rt:** @@ -483,7 +479,7 @@ - `java.security.ProtectionDomain` - `java.util.ArrayList` -#### 74. org.jnode.vm.BootLogImpl (3 imports) +#### 73. org.jnode.vm.BootLogImpl (3 imports) **File:** `core/src/core/org/jnode/vm/BootLogImpl.java` **Imports from rt:** @@ -491,7 +487,7 @@ - `javax.naming.NameAlreadyBoundException` - `javax.naming.NamingException` -#### 75. org.jnode.assembler.x86.X86Assembler (3 imports) +#### 74. org.jnode.assembler.x86.X86Assembler (3 imports) **File:** `core/src/core/org/jnode/assembler/x86/X86Assembler.java` **Imports from rt:** @@ -499,7 +495,7 @@ - `java.io.OutputStream` - `java.util.Collection` -#### 76. org.jnode.vm.classmgr.VmClassType (3 imports) +#### 75. org.jnode.vm.classmgr.VmClassType (3 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmClassType.java` **Imports from rt:** @@ -507,7 +503,7 @@ - `java.util.ArrayList` - `java.util.HashSet` -#### 77. org.jnode.vm.classmgr.TIBBuilder (3 imports) +#### 76. org.jnode.vm.classmgr.TIBBuilder (3 imports) **File:** `core/src/core/org/jnode/vm/classmgr/TIBBuilder.java` **Imports from rt:** @@ -515,7 +511,7 @@ - `java.util.ArrayList` - `java.util.HashMap` -#### 78. org.jnode.vm.classmgr.VmConstantPool (3 imports) +#### 77. org.jnode.vm.classmgr.VmConstantPool (3 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmConstantPool.java` **Imports from rt:** @@ -523,7 +519,7 @@ - `java.lang.reflect.Member` - `sun.reflect.ConstantPool` -#### 79. org.jnode.vm.classmgr.VmClassLoader (3 imports) +#### 78. org.jnode.vm.classmgr.VmClassLoader (3 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmClassLoader.java` **Imports from rt:** @@ -531,7 +527,7 @@ - `java.nio.ByteBuffer` - `java.security.ProtectionDomain` -#### 80. org.jnode.vm.x86.MPConfigTable (3 imports) +#### 79. org.jnode.vm.x86.MPConfigTable (3 imports) **File:** `core/src/core/org/jnode/vm/x86/MPConfigTable.java` **Imports from rt:** @@ -539,7 +535,7 @@ - `java.util.ArrayList` - `java.util.List` -#### 81. org.jnode.vm.x86.IOAPIC (3 imports) +#### 80. org.jnode.vm.x86.IOAPIC (3 imports) **File:** `core/src/core/org/jnode/vm/x86/IOAPIC.java` **Imports from rt:** @@ -547,7 +543,7 @@ - `java.util.ArrayList` - `java.util.List` -#### 82. org.jnode.vm.memmgr.mmtk.BaseMmtkHeapManager (4 imports) +#### 81. org.jnode.vm.memmgr.mmtk.BaseMmtkHeapManager (4 imports) **File:** `core/src/mmtk-vm/org/jnode/vm/memmgr/mmtk/BaseMmtkHeapManager.java` **Imports from rt:** @@ -556,7 +552,7 @@ - `java.lang.reflect.InvocationTargetException` - `javax.naming.NameNotFoundException` -#### 83. org.jnode.vm.IOContext (4 imports) +#### 82. org.jnode.vm.IOContext (4 imports) **File:** `core/src/core/org/jnode/vm/IOContext.java` **Imports from rt:** @@ -565,7 +561,7 @@ - `java.util.Map` - `java.util.Properties` -#### 84. org.jnode.vm.VmIOContext (4 imports) +#### 83. org.jnode.vm.VmIOContext (4 imports) **File:** `core/src/core/org/jnode/vm/VmIOContext.java` **Imports from rt:** @@ -574,7 +570,7 @@ - `java.util.Map` - `java.util.Properties` -#### 85. org.jnode.vm.bytecode.BytecodeWriter (4 imports) +#### 84. org.jnode.vm.bytecode.BytecodeWriter (4 imports) **File:** `core/src/core/org/jnode/vm/bytecode/BytecodeWriter.java` **Imports from rt:** @@ -583,7 +579,7 @@ - `java.util.HashSet` - `java.util.List` -#### 86. org.jnode.vm.objects.BootableHashMap (4 imports) +#### 85. org.jnode.vm.objects.BootableHashMap (4 imports) **File:** `core/src/core/org/jnode/vm/objects/BootableHashMap.java` **Imports from rt:** @@ -592,7 +588,7 @@ - `java.util.Map` - `java.util.Set` -#### 87. org.jnode.vm.classmgr.VmByteCode (4 imports) +#### 86. org.jnode.vm.classmgr.VmByteCode (4 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmByteCode.java` **Imports from rt:** @@ -601,7 +597,7 @@ - `java.util.Collections` - `java.util.List` -#### 88. org.jnode.vm.isolate.IsolateThreadFactory (4 imports) +#### 87. org.jnode.vm.isolate.IsolateThreadFactory (4 imports) **File:** `core/src/core/org/jnode/vm/isolate/IsolateThreadFactory.java` **Imports from rt:** @@ -610,7 +606,7 @@ - `java.util.concurrent.atomic.AtomicInteger` - `java.util.concurrent.atomic.AtomicInteger` -#### 89. org.jnode.vm.isolate.LinkMessageFactory (4 imports) +#### 88. org.jnode.vm.isolate.LinkMessageFactory (4 imports) **File:** `core/src/core/org/jnode/vm/isolate/LinkMessageFactory.java` **Imports from rt:** @@ -619,7 +615,7 @@ - `javax.isolate.Link` - `javax.isolate.LinkMessage` -#### 90. org.jnode.vm.compiler.ir.IRBasicBlockFinder (4 imports) +#### 89. org.jnode.vm.compiler.ir.IRBasicBlockFinder (4 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/IRBasicBlockFinder.java` **Imports from rt:** @@ -628,7 +624,7 @@ - `java.util.Comparator` - `java.util.List` -#### 91. org.jnode.vm.x86.performance.DualMSRPerformanceCounters (4 imports) +#### 90. org.jnode.vm.x86.performance.DualMSRPerformanceCounters (4 imports) **File:** `core/src/core/org/jnode/vm/x86/performance/DualMSRPerformanceCounters.java` **Imports from rt:** @@ -637,7 +633,7 @@ - `java.util.Set` - `java.util.TreeSet` -#### 92. org.jnode.vm.VmAccessControlContext (5 imports) +#### 91. org.jnode.vm.VmAccessControlContext (5 imports) **File:** `core/src/core/org/jnode/vm/VmAccessControlContext.java` **Imports from rt:** @@ -647,7 +643,7 @@ - `java.util.ArrayList` - `java.util.List` -#### 93. org.jnode.vm.VmImpl (5 imports) +#### 92. org.jnode.vm.VmImpl (5 imports) **File:** `core/src/core/org/jnode/vm/VmImpl.java` **Imports from rt:** @@ -657,7 +653,7 @@ - `java.util.Map` - `java.util.TreeMap` -#### 94. org.jnode.assembler.x86.X86TextAssembler (5 imports) +#### 93. org.jnode.assembler.x86.X86TextAssembler (5 imports) **File:** `core/src/core/org/jnode/assembler/x86/X86TextAssembler.java` **Imports from rt:** @@ -667,7 +663,7 @@ - `java.io.Writer` - `java.util.Collection` -#### 95. org.jnode.vm.compiler.ir.LinearScanAllocator (5 imports) +#### 94. org.jnode.vm.compiler.ir.LinearScanAllocator (5 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/LinearScanAllocator.java` **Imports from rt:** @@ -677,7 +673,7 @@ - `java.util.Comparator` - `java.util.List` -#### 96. org.jnode.vm.VmAccessController (6 imports) +#### 95. org.jnode.vm.VmAccessController (6 imports) **File:** `core/src/core/org/jnode/vm/VmAccessController.java` **Imports from rt:** @@ -688,7 +684,7 @@ - `java.security.PrivilegedExceptionAction` - `java.security.ProtectionDomain` -#### 97. org.jnode.vm.VmProcess (6 imports) +#### 96. org.jnode.vm.VmProcess (6 imports) **File:** `core/src/core/org/jnode/vm/VmProcess.java` **Imports from rt:** @@ -699,7 +695,7 @@ - `java.lang.reflect.InvocationTargetException` - `java.lang.reflect.Method` -#### 98. org.jnode.assembler.x86.X86BinaryAssembler (6 imports) +#### 97. org.jnode.assembler.x86.X86BinaryAssembler (6 imports) **File:** `core/src/core/org/jnode/assembler/x86/X86BinaryAssembler.java` **Imports from rt:** @@ -710,7 +706,7 @@ - `java.util.LinkedList` - `java.util.Map` -#### 99. org.jnode.vm.classmgr.ClassDecoder (6 imports) +#### 98. org.jnode.vm.classmgr.ClassDecoder (6 imports) **File:** `core/src/core/org/jnode/vm/classmgr/ClassDecoder.java` **Imports from rt:** @@ -721,7 +717,7 @@ - `sun.reflect.annotation.AnnotationParser` - `sun.reflect.annotation.ExceptionProxy` -#### 100. org.jnode.vm.isolate.LinkImpl (6 imports) +#### 99. org.jnode.vm.isolate.LinkImpl (6 imports) **File:** `core/src/core/org/jnode/vm/isolate/LinkImpl.java` **Imports from rt:** @@ -732,7 +728,7 @@ - `javax.isolate.Link` - `javax.isolate.LinkMessage` -#### 101. org.jnode.vm.compiler.ir.NativeTest (6 imports) +#### 100. org.jnode.vm.compiler.ir.NativeTest (6 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/NativeTest.java` **Imports from rt:** @@ -743,7 +739,7 @@ - `java.io.OutputStreamWriter` - `java.net.MalformedURLException` -#### 102. org.jnode.vm.x86.performance.P4FamilyPerformanceCounters (6 imports) +#### 101. org.jnode.vm.x86.performance.P4FamilyPerformanceCounters (6 imports) **File:** `core/src/core/org/jnode/vm/x86/performance/P4FamilyPerformanceCounters.java` **Imports from rt:** @@ -754,7 +750,7 @@ - `java.util.Set` - `java.util.TreeSet` -#### 103. org.jnode.vm.DefaultNameSpace (7 imports) +#### 102. org.jnode.vm.DefaultNameSpace (7 imports) **File:** `core/src/core/org/jnode/vm/DefaultNameSpace.java` **Imports from rt:** @@ -766,7 +762,7 @@ - `javax.naming.NameNotFoundException` - `javax.naming.NamingException` -#### 104. org.jnode.vm.objects.BootableArrayList (7 imports) +#### 103. org.jnode.vm.objects.BootableArrayList (7 imports) **File:** `core/src/core/org/jnode/vm/objects/BootableArrayList.java` **Imports from rt:** @@ -778,7 +774,7 @@ - `java.util.ListIterator` - `java.util.RandomAccess` -#### 105. org.jnode.vm.isolate.VmLink (7 imports) +#### 104. org.jnode.vm.isolate.VmLink (7 imports) **File:** `core/src/core/org/jnode/vm/isolate/VmLink.java` **Imports from rt:** @@ -790,7 +786,7 @@ - `javax.isolate.Link` - `javax.isolate.LinkMessage` -#### 106. org.jnode.vm.compiler.ir.IRTest (7 imports) +#### 105. org.jnode.vm.compiler.ir.IRTest (7 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/IRTest.java` **Imports from rt:** @@ -802,7 +798,7 @@ - `java.net.URL` - `java.util.List` -#### 107. org.jnode.vm.compiler.ir.IRControlFlowGraph (7 imports) +#### 106. org.jnode.vm.compiler.ir.IRControlFlowGraph (7 imports) **File:** `core/src/core/org/jnode/vm/compiler/ir/IRControlFlowGraph.java` **Imports from rt:** @@ -814,7 +810,7 @@ - `java.util.List` - `java.util.Map` -#### 108. org.jnode.vm.classmgr.VmAnnotation (8 imports) +#### 107. org.jnode.vm.classmgr.VmAnnotation (8 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmAnnotation.java` **Imports from rt:** @@ -827,7 +823,7 @@ - `java.util.Set` - `sun.reflect.annotation.AnnotationParser` -#### 109. org.jnode.vm.classmgr.VmType (8 imports) +#### 108. org.jnode.vm.classmgr.VmType (9 imports) **File:** `core/src/core/org/jnode/vm/classmgr/VmType.java` **Imports from rt:** @@ -839,8 +835,9 @@ - `java.util.Arrays` - `java.util.Comparator` - `java.util.HashSet` +- `org.jnode.permission.JNodePermission` -#### 110. org.jnode.vm.isolate.VmStreamBindings (9 imports) +#### 109. org.jnode.vm.isolate.VmStreamBindings (9 imports) **File:** `core/src/core/org/jnode/vm/isolate/VmStreamBindings.java` **Imports from rt:** @@ -854,7 +851,7 @@ - `java.io.PrintStream` - `java.net.Socket` -#### 111. org.jnode.vm.VmSystem (10 imports) +#### 110. org.jnode.vm.VmSystem (11 imports) **File:** `core/src/core/org/jnode/vm/VmSystem.java` **Imports from rt:** @@ -866,10 +863,11 @@ - `java.util.Locale` - `java.util.Properties` - `javax.naming.NameNotFoundException` +- `org.jnode.permission.JNodePermission` - `sun.nio.ch.Interruptible` - `sun.reflect.annotation.AnnotationType` -#### 112. org.jnode.vm.VmSystemClassLoader (15 imports) +#### 111. org.jnode.vm.VmSystemClassLoader (15 imports) **File:** `core/src/core/org/jnode/vm/VmSystemClassLoader.java` **Imports from rt:** @@ -889,7 +887,7 @@ - `java.util.Map` - `java.util.TreeMap` -#### 113. org.jnode.vm.isolate.VmIsolate (20 imports) +#### 112. org.jnode.vm.isolate.VmIsolate (20 imports) **File:** `core/src/core/org/jnode/vm/isolate/VmIsolate.java` **Imports from rt:** @@ -942,98 +940,97 @@ **Imports from org.jnode.vm.core:** - `org.jnode.vm.isolate.VmLink` -#### 5. java.lang.VMSecurityManager (1 import) +#### 5. java.lang.ThreadHelper (1 import) +**File:** `core/src/classpath/vm/java/lang/ThreadHelper.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.scheduler.VmThread` + +#### 6. java.lang.VMSecurityManager (1 import) **File:** `core/src/classpath/vm/java/lang/VMSecurityManager.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 6. java.security.NativeAccessControlContext (1 import) +#### 7. java.security.NativeAccessControlContext (1 import) **File:** `core/src/classpath/vm/java/security/NativeAccessControlContext.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmAccessControlContext` -#### 7. gnu.classpath.NativeVMStackWalker (1 import) +#### 8. gnu.classpath.NativeVMStackWalker (1 import) **File:** `core/src/classpath/vm/gnu/classpath/NativeVMStackWalker.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 8. gnu.classpath.NativeSystemProperties (1 import) +#### 9. gnu.classpath.NativeSystemProperties (1 import) **File:** `core/src/classpath/vm/gnu/classpath/NativeSystemProperties.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 9. java.io.NativeObjectInputStream (1 import) +#### 10. java.io.NativeObjectInputStream (1 import) **File:** `core/src/openjdk/vm/java/io/NativeObjectInputStream.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 10. java.awt.NativeToolkit (1 import) +#### 11. java.awt.NativeToolkit (1 import) **File:** `core/src/openjdk/vm/java/awt/NativeToolkit.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 11. java.lang.NativeDouble (1 import) +#### 12. java.lang.NativeDouble (1 import) **File:** `core/src/openjdk/vm/java/lang/NativeDouble.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmMagic` -#### 12. java.lang.NativeFloat (1 import) +#### 13. java.lang.NativeFloat (1 import) **File:** `core/src/openjdk/vm/java/lang/NativeFloat.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmMagic` -#### 13. java.lang.NativeCompiler (1 import) +#### 14. java.lang.NativeCompiler (1 import) **File:** `core/src/openjdk/vm/java/lang/NativeCompiler.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.classmgr.VmType` -#### 14. java.lang.NativeSystem (1 import) +#### 15. java.lang.NativeSystem (1 import) **File:** `core/src/openjdk/vm/java/lang/NativeSystem.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 15. java.util.NativeResourceBundle (1 import) +#### 16. java.util.NativeResourceBundle (1 import) **File:** `core/src/openjdk/vm/java/util/NativeResourceBundle.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 16. java.lang.reflect.NativeProxy (1 import) +#### 17. java.lang.reflect.NativeProxy (1 import) **File:** `core/src/openjdk/vm/java/lang/reflect/NativeProxy.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.classmgr.VmClassLoader` -#### 17. com.sun.management.NativeUnixOperatingSystem (1 import) +#### 18. com.sun.management.NativeUnixOperatingSystem (1 import) **File:** `core/src/openjdk/vm/com/sun/management/NativeUnixOperatingSystem.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` -#### 18. java.lang.NativeVMClassLoader (2 imports) +#### 19. java.lang.NativeVMClassLoader (2 imports) **File:** `core/src/classpath/vm/java/lang/NativeVMClassLoader.java` **Imports from org.jnode.vm.core:** - `org.jnode.vm.VmSystem` - `org.jnode.vm.classmgr.VmType` -#### 19. java.lang.ThreadHelper (2 imports) -**File:** `core/src/classpath/vm/java/lang/ThreadHelper.java` - -**Imports from org.jnode.vm.core:** -- `org.jnode.permission.JNodePermission` -- `org.jnode.vm.scheduler.VmThread` - #### 20. java.io.NativeObjectStreamClass (2 imports) **File:** `core/src/openjdk/vm/java/io/NativeObjectStreamClass.java` @@ -1130,7 +1127,16 @@ - `org.jnode.vm.facade.VmThreadVisitor` - `org.jnode.vm.facade.VmUtils` -#### 33. java.lang.VMRuntime (5 imports) +#### 33. java.lang.NativeClassLoader (4 imports) +**File:** `core/src/classpath/vm/java/lang/NativeClassLoader.java` + +**Imports from org.jnode.vm.core:** +- `org.jnode.vm.VmJavaClassLoader` +- `org.jnode.vm.VmSystem` +- `org.jnode.vm.classmgr.VmClassLoader` +- `org.jnode.vm.classmgr.VmType` + +#### 34. java.lang.VMRuntime (5 imports) **File:** `core/src/classpath/vm/java/lang/VMRuntime.java` **Imports from org.jnode.vm.core:** @@ -1140,16 +1146,6 @@ - `org.jnode.vm.facade.VmUtils` - `org.jnode.vm.isolate.VmIsolate` -#### 34. java.lang.NativeClassLoader (5 imports) -**File:** `core/src/classpath/vm/java/lang/NativeClassLoader.java` - -**Imports from org.jnode.vm.core:** -- `org.jnode.permission.JNodePermission` -- `org.jnode.vm.VmJavaClassLoader` -- `org.jnode.vm.VmSystem` -- `org.jnode.vm.classmgr.VmClassLoader` -- `org.jnode.vm.classmgr.VmType` - #### 35. java.lang.NativeThread (5 imports) **File:** `core/src/classpath/vm/java/lang/NativeThread.java` @@ -1256,17 +1252,17 @@ Start with classes that have the least dependencies (listed above): **From org.jnode.vm.core to rt (or new plugin):** - `org.jnode.vm.VmSystemSettings` (1 dependency/dependencies) -- `org.jnode.permission.JNodePermission` (1 dependency/dependencies) -- `org.jnode.vm.BaseVmArchitecture` (1 dependency/dependencies) - `org.jnode.vm.VmReflection` (1 dependency/dependencies) - `org.jnode.vm.ResourceManagerImpl` (1 dependency/dependencies) +- `org.jnode.vm.VmProcessClassLoader` (1 dependency/dependencies) +- `org.jnode.vm.performance.PerformanceCounters` (1 dependency/dependencies) **From rt to org.jnode.vm.core (or new plugin):** - `javax.isolate.LinkMessage` (1 dependency/dependencies) - `javax.isolate.Isolate` (1 dependency/dependencies) - `javax.isolate.StreamBindings` (1 dependency/dependencies) - `javax.isolate.Link` (1 dependency/dependencies) -- `java.lang.VMSecurityManager` (1 dependency/dependencies) +- `java.lang.ThreadHelper` (1 dependency/dependencies) ### Strategy 3: Dependency Inversion diff --git a/core/descriptors/org.classpath.core.xml b/core/descriptors/org.classpath.core.xml index 842147729..c6cad7fe1 100644 --- a/core/descriptors/org.classpath.core.xml +++ b/core/descriptors/org.classpath.core.xml @@ -189,6 +189,7 @@ + diff --git a/core/descriptors/org.jnode.vm.core.xml b/core/descriptors/org.jnode.vm.core.xml index 6550e14f2..cac6d1d69 100644 --- a/core/descriptors/org.jnode.vm.core.xml +++ b/core/descriptors/org.jnode.vm.core.xml @@ -37,7 +37,6 @@ - diff --git a/core/src/core/org/jnode/permission/JNodePermission.java b/core/src/classpath/vm/org/jnode/permission/JNodePermission.java similarity index 100% rename from core/src/core/org/jnode/permission/JNodePermission.java rename to core/src/classpath/vm/org/jnode/permission/JNodePermission.java From 9fba7961a4de641d8580dab5fd42e247290a5657 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 13:45:23 +0000 Subject: [PATCH 8/8] Addressing PR comments Co-authored-by: fduminy <143904+fduminy@users.noreply.github.com> --- SOURCE_LEVEL_CYCLES_REPORT.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SOURCE_LEVEL_CYCLES_REPORT.md b/SOURCE_LEVEL_CYCLES_REPORT.md index e71ddad8c..5a3bbe7f4 100644 --- a/SOURCE_LEVEL_CYCLES_REPORT.md +++ b/SOURCE_LEVEL_CYCLES_REPORT.md @@ -32,14 +32,14 @@ Plugins impliqués: - org.jnode.vm.core Fichier: core/descriptors/org.jnode.vm.core.xml Sous-projet: core - Fichiers Java: 289 + Fichiers Java: 288 - rt Fichier: core/descriptors/org.classpath.core.xml Sous-projet: core - Fichiers Java: 96 + Fichiers Java: 97 Dépendances circulaires (au niveau du code source): - org.jnode.plugin → org.jnode.vm.core + org.jnode.plugin → rt org.jnode.runtime.core.resource → rt org.jnode.vm → org.jnode.runtime.core.resource org.jnode.vm → org.jnode.vm.core