Initial Commit
[packages] / xemacs-packages / jde / java / src / jde / debugger / command / TraceClasses.java
1 package jde.debugger.command;
2
3 import java.util.Iterator;
4 import java.util.List;
5 import com.sun.jdi.request.ClassPrepareRequest;
6 import com.sun.jdi.request.ClassUnloadRequest;
7 import com.sun.jdi.request.EventRequestManager;
8 import jde.debugger.Etc;
9 import jde.debugger.JDEException;
10
11
12 /**
13  * 'trace_classes' command.
14  * <p>
15  *
16  * <b>Syntax:</b>
17  * <pre>
18  * trace_classes <u>type</u>
19  *      [{@link Etc#getSuspendPolicyFromArgs(List) suspend-policy}]
20  *      [{@link Etc#getClassFiltersFromArgs(List) class-filters}]
21  *      [{@link Etc#getClassExFiltersFromArgs(List) class-exclusion-filters}]
22  * </pre>
23  *
24  * <b>Returns:</b>
25  * <pre>
26  * (jde-dbo-command-result cmd_id <u>requestID</u>)
27  * </pre>
28  *
29  * <b>Comments:</b>
30  * <ul>
31  * <li> <u>type</u> is either "preparation" or "unloading"
32  * <li> use <u>requestID</u> to cancel the trace request.
33  * </ul>
34  *
35  * <p>
36  * @see jde.debugger.EventHandler#classPrepareEvent(ClassPrepareEvent)
37  * @see jde.debugger.EventHandler#classUnloadEvent(ClassUnloadEvent)
38  *
39  * @author Paul Kinnucan
40  * @version $Revision: 1.2 $
41  *
42  * Copyright (c) 2000, 2001, 2003    Paul Kinnucan
43  *
44  */
45 public class TraceClasses extends DebugProcessCommand {
46     
47   /**
48    *
49    * @exception jde.debugger.JDEException <description>
50    */
51   public void doCommand() throws JDEException {
52     if (m_args.size() < 1)
53       throw new JDEException("Insufficient arguments");
54         
55     String type = m_args.remove(0).toString().toLowerCase();
56         
57     if (!(type.equals("preparation") || type.equals("unloading")))
58       throw new JDEException("Invalid type");
59         
60     Long requestID = null;
61         
62     List classFilters   = Etc.getClassFiltersFromArgs(m_args);
63     List classExFilters = Etc.getClassExFiltersFromArgs(m_args);
64         
65     EventRequestManager em = m_debugger.getVM().eventRequestManager();
66         
67     if (type.equals("preparation")) {
68             
69       ClassPrepareRequest cpr = em.createClassPrepareRequest();
70             
71       cpr.setSuspendPolicy(Etc.getSuspendPolicyFromArgs(m_args));
72             
73       if (classFilters != null) {
74         Iterator it = classFilters.iterator();
75         while (it.hasNext())
76           cpr.addClassFilter(it.next().toString());
77       }
78       if (classExFilters != null) {
79         Iterator it = classExFilters.iterator();
80         while (it.hasNext())
81           cpr.addClassExclusionFilter(it.next().toString());
82       }
83       requestID = m_debugger.addIdentifiableRequest(cpr);
84             
85     } else if (type.equals("unloading")) {
86             
87       ClassUnloadRequest cur = em.createClassUnloadRequest();
88             
89       cur.setSuspendPolicy(Etc.getSuspendPolicyFromArgs(m_args));
90             
91       if (classFilters != null) {
92         Iterator it = classFilters.iterator();
93         while (it.hasNext())
94           cur.addClassFilter(it.next().toString());
95       }
96       if (classExFilters != null) {
97         Iterator it = classExFilters.iterator();
98         while (it.hasNext())
99           cur.addClassExclusionFilter(it.next().toString());
100       }
101       requestID = m_debugger.addIdentifiableRequest(cur);
102     }
103         
104
105     m_debugger.signalCommandResult(m_cmdID, requestID.toString(), CMD_OK);
106   }
107     
108   public Object clone() {return new TraceClasses();}
109     
110 } // TraceClasses
111
112 /*
113  * $Log: TraceClasses.java,v $
114  * Revision 1.2  2003/01/15 05:56:26  paulk
115  * Add Petter Mahlen's changes.
116  *
117  * Revision 1.1  2001/03/24 13:35:25  paulk
118  * Initial revision.
119  *
120  *
121  */
122
123 // End of TraceClasses.java