OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012, the Dart project authors. | 2 * Copyright (c) 2012, the Dart project authors. |
3 * | 3 * |
4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u
se this file except | 4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u
se this file except |
5 * in compliance with the License. You may obtain a copy of the License at | 5 * in compliance with the License. You may obtain a copy of the License at |
6 * | 6 * |
7 * http://www.eclipse.org/legal/epl-v10.html | 7 * http://www.eclipse.org/legal/epl-v10.html |
8 * | 8 * |
9 * Unless required by applicable law or agreed to in writing, software distribut
ed under the License | 9 * Unless required by applicable law or agreed to in writing, software distribut
ed under the License |
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K
IND, either express | 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K
IND, either express |
11 * or implied. See the License for the specific language governing permissions a
nd limitations under | 11 * or implied. See the License for the specific language governing permissions a
nd limitations under |
12 * the License. | 12 * the License. |
13 */ | 13 */ |
14 | 14 |
15 package com.google.dart.tools.debug.core.webkit; | 15 package com.google.dart.tools.debug.core.webkit; |
16 | 16 |
17 import org.json.JSONException; | 17 import org.json.JSONException; |
18 import org.json.JSONObject; | 18 import org.json.JSONObject; |
19 | 19 |
| 20 import java.io.IOException; |
| 21 import java.util.concurrent.CountDownLatch; |
| 22 import java.util.concurrent.TimeUnit; |
| 23 |
20 /** | 24 /** |
21 * A WIP scope object. | 25 * A WIP scope object. |
22 * | 26 * |
23 * @see http://code.google.com/chrome/devtools/docs/protocol/tot/runtime.html#ty
pe-RemoteObject | 27 * @see http://code.google.com/chrome/devtools/docs/protocol/tot/runtime.html#ty
pe-RemoteObject |
24 */ | 28 */ |
25 public class WebkitRemoteObject { | 29 public class WebkitRemoteObject { |
26 | 30 |
27 public static WebkitRemoteObject createFrom(JSONObject params) throws JSONExce
ption { | 31 public static WebkitRemoteObject createFrom(JSONObject params) throws JSONExce
ption { |
28 WebkitRemoteObject remoteObject = new WebkitRemoteObject(); | 32 WebkitRemoteObject remoteObject = new WebkitRemoteObject(); |
29 | 33 |
(...skipping 26 matching lines...) Expand all Loading... |
56 private String description; | 60 private String description; |
57 | 61 |
58 private String objectId; | 62 private String objectId; |
59 | 63 |
60 private String subtype; | 64 private String subtype; |
61 | 65 |
62 private String type; | 66 private String type; |
63 | 67 |
64 private String value; | 68 private String value; |
65 | 69 |
| 70 private int listLength = -1; |
| 71 |
66 @Override | 72 @Override |
67 public boolean equals(Object obj) { | 73 public boolean equals(Object obj) { |
68 if (obj instanceof WebkitRemoteObject) { | 74 if (obj instanceof WebkitRemoteObject) { |
69 return ((WebkitRemoteObject) obj).getObjectId().equals(getObjectId()); | 75 return ((WebkitRemoteObject) obj).getObjectId().equals(getObjectId()); |
70 } | 76 } |
71 | 77 |
72 return false; | 78 return false; |
73 } | 79 } |
74 | 80 |
75 public String getClassName() { | 81 public String getClassName() { |
(...skipping 16 matching lines...) Expand all Loading... |
92 return null; | 98 return null; |
93 } | 99 } |
94 | 100 |
95 public String getDescription() { | 101 public String getDescription() { |
96 return description; | 102 return description; |
97 } | 103 } |
98 | 104 |
99 /** | 105 /** |
100 * Return the length of the list if this object is a list. | 106 * Return the length of the list if this object is a list. |
101 * | 107 * |
| 108 * @param webkitConnection |
102 * @return | 109 * @return |
103 */ | 110 */ |
104 public int getListLength() { | 111 public int getListLength(WebkitConnection connection) { |
105 // TODO(devoncarew): write a test to notify us when this convention changes | 112 if (listLength == -1) { |
106 | 113 final CountDownLatch latch = new CountDownLatch(1); |
107 // Since there is no direct way to obtain the length of an array, use the de
scription from | |
108 // Dartium to derive the array length. value.getDescription() == "Array[x]" | |
109 | |
110 String str = getDescription(); | |
111 | |
112 int startIndex = str.indexOf('['); | |
113 int endIndex = str.indexOf(']', startIndex); | |
114 | |
115 if (startIndex != -1 && endIndex != -1) { | |
116 String val = str.substring(startIndex + 1, endIndex); | |
117 | 114 |
118 try { | 115 try { |
119 return Integer.parseInt(val); | 116 connection.getRuntime().callListLength(objectId, new WebkitCallback<Inte
ger>() { |
120 } catch (NumberFormatException nfe) { | 117 @Override |
| 118 public void handleResult(WebkitResult<Integer> result) { |
| 119 if (result.isError()) { |
| 120 listLength = 0; |
| 121 } else { |
| 122 listLength = result.getResult().intValue(); |
| 123 } |
| 124 |
| 125 latch.countDown(); |
| 126 } |
| 127 }); |
| 128 } catch (IOException e) { |
| 129 listLength = 0; |
| 130 latch.countDown(); |
| 131 } |
| 132 |
| 133 try { |
| 134 latch.await(3, TimeUnit.SECONDS); |
| 135 } catch (InterruptedException e) { |
121 | 136 |
122 } | 137 } |
123 } | 138 } |
124 | 139 |
125 return 0; | 140 return listLength; |
126 } | 141 } |
127 | 142 |
128 public String getObjectId() { | 143 public String getObjectId() { |
129 return objectId; | 144 return objectId; |
130 } | 145 } |
131 | 146 |
132 /** | 147 /** |
133 * One of "array", "date", "node", "null", "regexp". | 148 * One of "array", "date", "node", "null", "regexp". |
134 */ | 149 */ |
135 public String getSubtype() { | 150 public String getSubtype() { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 */ | 194 */ |
180 public boolean isLibraryRef() { | 195 public boolean isLibraryRef() { |
181 if (className == null) { | 196 if (className == null) { |
182 return false; | 197 return false; |
183 } | 198 } |
184 | 199 |
185 return className.startsWith("file:") || className.startsWith("http:"); | 200 return className.startsWith("file:") || className.startsWith("http:"); |
186 } | 201 } |
187 | 202 |
188 public boolean isList() { | 203 public boolean isList() { |
189 return "array".equals(subtype); | 204 return "object".equals(type) && "List".equals(className); |
190 } | 205 } |
191 | 206 |
192 public boolean isNode() { | 207 public boolean isNode() { |
193 return "node".equals(subtype); | 208 return "node".equals(subtype); |
194 } | 209 } |
195 | 210 |
196 public boolean isNull() { | 211 public boolean isNull() { |
197 if (isObject() && "null".equals(subtype)) { | 212 if (isObject() && "null".equals(value)) { |
198 return true; | 213 return true; |
199 } else { | 214 } else { |
200 return false; | 215 return false; |
201 } | 216 } |
202 } | 217 } |
203 | 218 |
204 public boolean isNumber() { | 219 public boolean isNumber() { |
205 return "number".equals(type); | 220 return "number".equals(type); |
206 } | 221 } |
207 | 222 |
(...skipping 23 matching lines...) Expand all Loading... |
231 return "[" + type + "," + description + "]"; | 246 return "[" + type + "," + description + "]"; |
232 } else { | 247 } else { |
233 return "[" + type + "," + value + "]"; | 248 return "[" + type + "," + value + "]"; |
234 } | 249 } |
235 } | 250 } |
236 | 251 |
237 void setDescription(String value) { | 252 void setDescription(String value) { |
238 description = value; | 253 description = value; |
239 } | 254 } |
240 } | 255 } |
OLD | NEW |