1 22 23 package org.aspectj.debugger.request; 24 25 import org.aspectj.debugger.base.*; 26 27 import com.sun.jdi.*; 28 import java.util.*; 29 30 38 39 public abstract class ThreadsNeedingRequest extends Request { 40 41 protected List threadNames; 42 43 public ThreadsNeedingRequest(Debugger debugger, List threadNames) { 44 super(debugger); 45 this.threadNames = threadNames; 46 } 47 48 public List getThreads() throws NoVMException, DebuggerException { 49 if (threadNames == null || threadNames.size() == 0) { 50 return vm().allThreads(); 51 } 52 Iterator namesIter = threadNames.iterator(); 53 List threads = new ArrayList(); 54 List badThreads = new ArrayList(); 55 while (namesIter.hasNext()) { 56 String threadName = namesIter.next() + ""; 57 Iterator iter = vm().allThreads().iterator(); 58 boolean found = false; 59 while (iter.hasNext()) { 60 ThreadReference threadRef = (ThreadReference) iter.next(); 61 if (threadRef.name().equals(threadName)) { 62 found = true; 63 threads.add(threadRef); 64 break; 65 } else { 66 try { 67 long ourID = Long.parseLong(threadName); 68 long refID = threadRef.uniqueID(); 69 if (ourID == refID) { 70 found = true; 71 threads.add(threadRef); 72 break; 73 } 74 } catch (NumberFormatException e) { 75 } 76 } 77 } 78 if (!found) { 79 badThreads.add(threadName); 80 } 81 } 82 if (badThreads.size() > 0) { 83 throw new ThreadsNotFoundException(badThreads); 84 } 85 return threads; 86 } 87 } 88 | Popular Tags |