/** @return a list of all ThreadReferenceProxies */ public Collection<ThreadReferenceProxyImpl> allThreads() { DebuggerManagerThreadImpl.assertIsManagerThread(); if (myAllThreadsDirty) { myAllThreadsDirty = false; final List<ThreadReference> currentThreads = myVirtualMachine.allThreads(); final Map<ThreadReference, ThreadReferenceProxyImpl> result = new HashMap<>(); for (final ThreadReference threadReference : currentThreads) { ThreadReferenceProxyImpl proxy = myAllThreads.get(threadReference); if (proxy == null) { proxy = new ThreadReferenceProxyImpl(this, threadReference); } result.put(threadReference, proxy); } myAllThreads = result; } return myAllThreads.values(); }