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

Unified Diff: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java

Issue 605833002: Show errors reported for invalid setBreakpoint calls. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Try both URLs. Write errors to the console. Created 6 years, 3 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: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
diff --git a/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java b/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
index f1e49cb6642bd078657148b1209d2ed4a06902d1..76c2e0b368a6bda2975e49c32c1046cdcabe7a25 100644
--- a/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
+++ b/editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/server/ServerBreakpointManager.java
@@ -15,6 +15,7 @@
package com.google.dart.tools.debug.core.server;
import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.core.internal.util.ResourceUtil;
import com.google.dart.tools.debug.core.DartDebugCorePlugin;
import com.google.dart.tools.debug.core.breakpoints.DartBreakpoint;
@@ -34,6 +35,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.atomic.AtomicInteger;
// TODO: handle removing deleted breakpoints
@@ -41,6 +43,45 @@ import java.util.Map.Entry;
* This breakpoint manager serves to off-load some of the breakpoint logic from ServerDebugTarget.
*/
class ServerBreakpointManager implements IBreakpointListener {
+ private class SetBreakpointHelper {
+ final int NUM_URLS = 2;
+
+ final VmIsolate isolate;
+ final DartBreakpoint breakpoint;
+ final int line;
+ final AtomicInteger numErrors = new AtomicInteger();
+
+ public SetBreakpointHelper(VmIsolate isolate, DartBreakpoint breakpoint, int line) {
+ this.isolate = isolate;
+ this.breakpoint = breakpoint;
+ this.line = line;
+ }
+
+ void setBreakpoint(String url) throws IOException {
+ // fail if no URL
+ if (url == null) {
+ if (numErrors.incrementAndGet() == NUM_URLS) {
+ target.writeToStdout("No valid URL for: " + breakpoint);
+ }
+ return;
+ }
+ // try to set
+ getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() {
+ @Override
+ public void handleResult(VmResult<VmBreakpoint> result) {
+ if (result.isError()) {
+ if (numErrors.incrementAndGet() == NUM_URLS) {
+ String error = result.getError();
+ target.writeToStdout(error);
+ }
+ } else {
+ addCreatedBreakpoint(breakpoint, result.getResult());
+ }
+ }
+ });
+ }
+ }
+
private ServerDebugTarget target;
private VmIsolate mainIsolate;
@@ -230,41 +271,24 @@ class ServerBreakpointManager implements IBreakpointListener {
VmInterruptResult interruptResult = pause ? getConnection().interruptConditionally(isolate)
: VmInterruptResult.createNoopResult(getConnection());
- for (final DartBreakpoint breakpoint : breakpoints) {
+ for (DartBreakpoint breakpoint : breakpoints) {
if (breakpoint.isBreakpointEnabled()) {
- IFile file = breakpoint.getFile();
- String url = null;
-
- if (file != null) {
- url = getAbsoluteUrlForResource(file);
- }
-
int line = breakpoint.getLine();
-
- if (url != null) {
- getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() {
- @Override
- public void handleResult(VmResult<VmBreakpoint> result) {
- if (!result.isError()) {
- addCreatedBreakpoint(breakpoint, result.getResult());
- }
- }
- });
+ SetBreakpointHelper helper = new SetBreakpointHelper(isolate, breakpoint, line);
+ // file path
+ String filePath = breakpoint.getActualFilePath();
+ if (filePath == null) {
+ continue;
}
-
- if (file != null) {
- url = getPackagesUrlForResource(file);
+ // try package: URL
+ {
+ String url = getPackagesUrlForFilePath(filePath);
+ helper.setBreakpoint(url);
}
-
- if (url != null) {
- getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpoint>() {
- @Override
- public void handleResult(VmResult<VmBreakpoint> result) {
- if (!result.isError()) {
- addCreatedBreakpoint(breakpoint, result.getResult());
- }
- }
- });
+ // try file:// URL
+ {
+ String url = getAbsoluteUrlForFilePath(filePath);
+ helper.setBreakpoint(url);
}
}
}
@@ -302,16 +326,21 @@ class ServerBreakpointManager implements IBreakpointListener {
}
}
- private String getAbsoluteUrlForResource(IFile file) {
- return file.getLocation().toFile().toURI().toString();
+ private String getAbsoluteUrlForFilePath(String filePath) {
+ return new File(filePath).toURI().toString();
}
private VmConnection getConnection() {
return target.getConnection();
}
- private String getPackagesUrlForResource(IFile file) {
- String locationUrl = file.getLocation().toFile().toURI().toString();
+ private String getPackagesUrlForFilePath(String filePath) {
+ File javaFile = new File(filePath);
+ IFile resourceFile = ResourceUtil.getFile(javaFile);
+ if (resourceFile == null) {
+ return null;
+ }
+ String locationUrl = resourceFile.getLocation().toFile().toURI().toString();
int index = locationUrl.indexOf(DartCore.PACKAGES_DIRECTORY_URL);
@@ -325,12 +354,12 @@ class ServerBreakpointManager implements IBreakpointListener {
index = locationUrl.lastIndexOf(DartCore.LIB_URL_PATH);
if (index != -1) {
- String path = file.getLocation().toString();
+ String path = resourceFile.getLocation().toString();
path = path.substring(0, path.lastIndexOf(DartCore.LIB_URL_PATH));
File packagesDir = new File(path, DartCore.PACKAGES_DIRECTORY_NAME);
if (packagesDir.exists()) {
- String packageName = DartCore.getSelfLinkedPackageName(file);
+ String packageName = DartCore.getSelfLinkedPackageName(resourceFile);
if (packageName != null) {
locationUrl = DartCore.PACKAGE_SCHEME_SPEC + packageName + "/"
@@ -347,5 +376,4 @@ class ServerBreakpointManager implements IBreakpointListener {
private boolean supportsBreakpoint(IBreakpoint breakpoint) {
return target.supportsBreakpoint(breakpoint);
}
-
}

Powered by Google App Engine
This is Rietveld 408576698