Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2190)

Unified Diff: dart/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/webkit/WebkitRemoteObject.java

Issue 328663002: Version 1.5.0-dev.4.5 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/webkit/WebkitRemoteObject.java
===================================================================
--- dart/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/webkit/WebkitRemoteObject.java (revision 37109)
+++ dart/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/webkit/WebkitRemoteObject.java (working copy)
@@ -17,6 +17,10 @@
import org.json.JSONException;
import org.json.JSONObject;
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
/**
* A WIP scope object.
*
@@ -63,6 +67,8 @@
private String value;
+ private int listLength = -1;
+
@Override
public boolean equals(Object obj) {
if (obj instanceof WebkitRemoteObject) {
@@ -99,30 +105,39 @@
/**
* Return the length of the list if this object is a list.
*
+ * @param webkitConnection
* @return
*/
- public int getListLength() {
- // TODO(devoncarew): write a test to notify us when this convention changes
+ public int getListLength(WebkitConnection connection) {
+ if (listLength == -1) {
+ final CountDownLatch latch = new CountDownLatch(1);
- // Since there is no direct way to obtain the length of an array, use the description from
- // Dartium to derive the array length. value.getDescription() == "Array[x]"
+ try {
+ connection.getRuntime().callListLength(objectId, new WebkitCallback<Integer>() {
+ @Override
+ public void handleResult(WebkitResult<Integer> result) {
+ if (result.isError()) {
+ listLength = 0;
+ } else {
+ listLength = result.getResult().intValue();
+ }
- String str = getDescription();
+ latch.countDown();
+ }
+ });
+ } catch (IOException e) {
+ listLength = 0;
+ latch.countDown();
+ }
- int startIndex = str.indexOf('[');
- int endIndex = str.indexOf(']', startIndex);
-
- if (startIndex != -1 && endIndex != -1) {
- String val = str.substring(startIndex + 1, endIndex);
-
try {
- return Integer.parseInt(val);
- } catch (NumberFormatException nfe) {
+ latch.await(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
}
}
- return 0;
+ return listLength;
}
public String getObjectId() {
@@ -186,7 +201,7 @@
}
public boolean isList() {
- return "array".equals(subtype);
+ return "object".equals(type) && "List".equals(className);
}
public boolean isNode() {
@@ -194,7 +209,7 @@
}
public boolean isNull() {
- if (isObject() && "null".equals(subtype)) {
+ if (isObject() && "null".equals(value)) {
return true;
} else {
return false;

Powered by Google App Engine
This is Rietveld 408576698