1 7 34 35 package com.sun.tools.example.debug.tty; 36 37 import com.sun.jdi.*; 38 import com.sun.jdi.request.EventRequest; 39 import com.sun.jdi.event.ClassPrepareEvent; 40 41 import java.util.ArrayList ; 42 import java.util.Collections ; 43 import java.util.Iterator ; 44 import java.util.List ; 45 import java.util.StringTokenizer ; 46 47 class EventRequestSpecList { 48 49 private static final int statusResolved = 1; 50 private static final int statusUnresolved = 2; 51 private static final int statusError = 3; 52 53 private List eventRequestSpecs = Collections.synchronizedList( 55 new ArrayList ()); 56 57 EventRequestSpecList() { 58 } 59 60 64 boolean resolve(ClassPrepareEvent event) { 65 boolean failure = false; 66 synchronized(eventRequestSpecs) { 67 Iterator iter = eventRequestSpecs.iterator(); 68 while (iter.hasNext()) { 69 EventRequestSpec spec = (EventRequestSpec)iter.next(); 70 if (!spec.isResolved()) { 71 try { 72 EventRequest eventRequest = spec.resolve(event); 73 if (eventRequest != null) { 74 MessageOutput.println("Set deferred", spec.toString()); 75 } 76 } catch (Exception e) { 77 MessageOutput.println("Unable to set deferred", 78 new Object [] {spec.toString(), 79 spec.errorMessageFor(e)}); 80 failure = true; 81 } 82 } 83 } 84 } 85 return !failure; 86 } 87 88 void resolveAll() { 89 Iterator iter = eventRequestSpecs.iterator(); 90 while (iter.hasNext()) { 91 EventRequestSpec spec = (EventRequestSpec)iter.next(); 92 try { 93 EventRequest eventRequest = spec.resolveEagerly(); 94 if (eventRequest != null) { 95 MessageOutput.println("Set deferred", spec.toString()); 96 } 97 } catch (Exception e) { 98 } 99 } 100 } 101 102 boolean addEagerlyResolve(EventRequestSpec spec) { 103 try { 104 eventRequestSpecs.add(spec); 105 EventRequest eventRequest = spec.resolveEagerly(); 106 if (eventRequest != null) { 107 MessageOutput.println("Set", spec.toString()); 108 } 109 return true; 110 } catch (Exception exc) { 111 MessageOutput.println("Unable to set", 112 new Object [] {spec.toString(), 113 spec.errorMessageFor(exc)}); 114 return false; 115 } 116 } 117 118 EventRequestSpec createBreakpoint(String classPattern, 119 int line) throws ClassNotFoundException { 120 ReferenceTypeSpec refSpec = 121 new PatternReferenceTypeSpec(classPattern); 122 return new BreakpointSpec(refSpec, line); 123 } 124 125 EventRequestSpec createBreakpoint(String classPattern, 126 String methodId, 127 List methodArgs) 128 throws MalformedMemberNameException, 129 ClassNotFoundException { 130 ReferenceTypeSpec refSpec = 131 new PatternReferenceTypeSpec(classPattern); 132 return new BreakpointSpec(refSpec, methodId, methodArgs); 133 } 134 135 EventRequestSpec createExceptionCatch(String classPattern, 136 boolean notifyCaught, 137 boolean notifyUncaught) 138 throws ClassNotFoundException { 139 ReferenceTypeSpec refSpec = 140 new PatternReferenceTypeSpec(classPattern); 141 return new ExceptionSpec(refSpec, notifyCaught, notifyUncaught); 142 } 143 144 EventRequestSpec createAccessWatchpoint(String classPattern, 145 String fieldId) 146 throws MalformedMemberNameException, 147 ClassNotFoundException { 148 ReferenceTypeSpec refSpec = 149 new PatternReferenceTypeSpec(classPattern); 150 return new AccessWatchpointSpec(refSpec, fieldId); 151 } 152 153 EventRequestSpec createModificationWatchpoint(String classPattern, 154 String fieldId) 155 throws MalformedMemberNameException, 156 ClassNotFoundException { 157 ReferenceTypeSpec refSpec = 158 new PatternReferenceTypeSpec(classPattern); 159 return new ModificationWatchpointSpec(refSpec, fieldId); 160 } 161 162 boolean delete(EventRequestSpec proto) { 163 synchronized (eventRequestSpecs) { 164 int inx = eventRequestSpecs.indexOf(proto); 165 if (inx != -1) { 166 EventRequestSpec spec = (EventRequestSpec)eventRequestSpecs.get(inx); 167 spec.remove(); 168 eventRequestSpecs.remove(inx); 169 return true; 170 } else { 171 return false; 172 } 173 } 174 } 175 176 List eventRequestSpecs() { 177 synchronized (eventRequestSpecs) { 179 return new ArrayList (eventRequestSpecs); 180 } 181 } 182 } 183 | Popular Tags |