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

Side by Side 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, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013, the Dart project authors. 2 * Copyright (c) 2013, 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.server; 15 package com.google.dart.tools.debug.core.server;
16 16
17 import com.google.dart.tools.core.DartCore; 17 import com.google.dart.tools.core.DartCore;
18 import com.google.dart.tools.core.internal.util.ResourceUtil;
18 import com.google.dart.tools.debug.core.DartDebugCorePlugin; 19 import com.google.dart.tools.debug.core.DartDebugCorePlugin;
19 import com.google.dart.tools.debug.core.breakpoints.DartBreakpoint; 20 import com.google.dart.tools.debug.core.breakpoints.DartBreakpoint;
20 21
21 import org.eclipse.core.resources.IFile; 22 import org.eclipse.core.resources.IFile;
22 import org.eclipse.core.resources.IMarkerDelta; 23 import org.eclipse.core.resources.IMarkerDelta;
23 import org.eclipse.debug.core.DebugPlugin; 24 import org.eclipse.debug.core.DebugPlugin;
24 import org.eclipse.debug.core.IBreakpointListener; 25 import org.eclipse.debug.core.IBreakpointListener;
25 import org.eclipse.debug.core.model.IBreakpoint; 26 import org.eclipse.debug.core.model.IBreakpoint;
26 27
27 import java.io.File; 28 import java.io.File;
28 import java.io.IOException; 29 import java.io.IOException;
29 import java.net.URI; 30 import java.net.URI;
30 import java.util.ArrayList; 31 import java.util.ArrayList;
31 import java.util.Arrays; 32 import java.util.Arrays;
32 import java.util.HashMap; 33 import java.util.HashMap;
33 import java.util.Iterator; 34 import java.util.Iterator;
34 import java.util.List; 35 import java.util.List;
35 import java.util.Map; 36 import java.util.Map;
36 import java.util.Map.Entry; 37 import java.util.Map.Entry;
38 import java.util.concurrent.atomic.AtomicInteger;
37 39
38 // TODO: handle removing deleted breakpoints 40 // TODO: handle removing deleted breakpoints
39 41
40 /** 42 /**
41 * This breakpoint manager serves to off-load some of the breakpoint logic from ServerDebugTarget. 43 * This breakpoint manager serves to off-load some of the breakpoint logic from ServerDebugTarget.
42 */ 44 */
43 class ServerBreakpointManager implements IBreakpointListener { 45 class ServerBreakpointManager implements IBreakpointListener {
46 private class SetBreakpointHelper {
47 final int NUM_URLS = 2;
48
49 final VmIsolate isolate;
50 final DartBreakpoint breakpoint;
51 final int line;
52 final AtomicInteger numErrors = new AtomicInteger();
53
54 public SetBreakpointHelper(VmIsolate isolate, DartBreakpoint breakpoint, int line) {
55 this.isolate = isolate;
56 this.breakpoint = breakpoint;
57 this.line = line;
58 }
59
60 void setBreakpoint(String url) throws IOException {
61 // fail if no URL
62 if (url == null) {
63 if (numErrors.incrementAndGet() == NUM_URLS) {
64 target.writeToStdout("No valid URL for: " + breakpoint);
65 }
66 return;
67 }
68 // try to set
69 getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmBreakpo int>() {
70 @Override
71 public void handleResult(VmResult<VmBreakpoint> result) {
72 if (result.isError()) {
73 if (numErrors.incrementAndGet() == NUM_URLS) {
74 String error = result.getError();
75 target.writeToStdout(error);
76 }
77 } else {
78 addCreatedBreakpoint(breakpoint, result.getResult());
79 }
80 }
81 });
82 }
83 }
84
44 private ServerDebugTarget target; 85 private ServerDebugTarget target;
45 86
46 private VmIsolate mainIsolate; 87 private VmIsolate mainIsolate;
47 88
48 private List<IBreakpoint> ignoredBreakpoints = new ArrayList<IBreakpoint>(); 89 private List<IBreakpoint> ignoredBreakpoints = new ArrayList<IBreakpoint>();
49 90
50 Map<IBreakpoint, List<VmBreakpoint>> createdBreakpoints = new HashMap<IBreakpo int, List<VmBreakpoint>>(); 91 Map<IBreakpoint, List<VmBreakpoint>> createdBreakpoints = new HashMap<IBreakpo int, List<VmBreakpoint>>();
51 92
52 List<VmIsolate> liveIsolates = new ArrayList<VmIsolate>(); 93 List<VmIsolate> liveIsolates = new ArrayList<VmIsolate>();
53 94
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 } 264 }
224 265
225 if (!enabled) { 266 if (!enabled) {
226 return; 267 return;
227 } 268 }
228 269
229 try { 270 try {
230 VmInterruptResult interruptResult = pause ? getConnection().interruptCondi tionally(isolate) 271 VmInterruptResult interruptResult = pause ? getConnection().interruptCondi tionally(isolate)
231 : VmInterruptResult.createNoopResult(getConnection()); 272 : VmInterruptResult.createNoopResult(getConnection());
232 273
233 for (final DartBreakpoint breakpoint : breakpoints) { 274 for (DartBreakpoint breakpoint : breakpoints) {
234 if (breakpoint.isBreakpointEnabled()) { 275 if (breakpoint.isBreakpointEnabled()) {
235 IFile file = breakpoint.getFile(); 276 int line = breakpoint.getLine();
236 String url = null; 277 SetBreakpointHelper helper = new SetBreakpointHelper(isolate, breakpoi nt, line);
237 278 // file path
238 if (file != null) { 279 String filePath = breakpoint.getActualFilePath();
239 url = getAbsoluteUrlForResource(file); 280 if (filePath == null) {
281 continue;
240 } 282 }
241 283 // try package: URL
242 int line = breakpoint.getLine(); 284 {
243 285 String url = getPackagesUrlForFilePath(filePath);
244 if (url != null) { 286 helper.setBreakpoint(url);
245 getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmB reakpoint>() {
246 @Override
247 public void handleResult(VmResult<VmBreakpoint> result) {
248 if (!result.isError()) {
249 addCreatedBreakpoint(breakpoint, result.getResult());
250 }
251 }
252 });
253 } 287 }
254 288 // try file:// URL
255 if (file != null) { 289 {
256 url = getPackagesUrlForResource(file); 290 String url = getAbsoluteUrlForFilePath(filePath);
257 } 291 helper.setBreakpoint(url);
258
259 if (url != null) {
260 getConnection().setBreakpoint(isolate, url, line, new VmCallback<VmB reakpoint>() {
261 @Override
262 public void handleResult(VmResult<VmBreakpoint> result) {
263 if (!result.isError()) {
264 addCreatedBreakpoint(breakpoint, result.getResult());
265 }
266 }
267 });
268 } 292 }
269 } 293 }
270 } 294 }
271 295
272 interruptResult.resume(); 296 interruptResult.resume();
273 } catch (IOException exception) { 297 } catch (IOException exception) {
274 DartDebugCorePlugin.logError(exception); 298 DartDebugCorePlugin.logError(exception);
275 } 299 }
276 } 300 }
277 301
(...skipping 17 matching lines...) Expand all
295 List<VmBreakpoint> breakpoints = entry.getValue(); 319 List<VmBreakpoint> breakpoints = entry.getValue();
296 for (Iterator<VmBreakpoint> bpIter = breakpoints.iterator(); bpIter.hasNex t();) { 320 for (Iterator<VmBreakpoint> bpIter = breakpoints.iterator(); bpIter.hasNex t();) {
297 VmBreakpoint breakpoint = bpIter.next(); 321 VmBreakpoint breakpoint = bpIter.next();
298 if (breakpoint.getIsolate() == isolate) { 322 if (breakpoint.getIsolate() == isolate) {
299 bpIter.remove(); 323 bpIter.remove();
300 } 324 }
301 } 325 }
302 } 326 }
303 } 327 }
304 328
305 private String getAbsoluteUrlForResource(IFile file) { 329 private String getAbsoluteUrlForFilePath(String filePath) {
306 return file.getLocation().toFile().toURI().toString(); 330 return new File(filePath).toURI().toString();
307 } 331 }
308 332
309 private VmConnection getConnection() { 333 private VmConnection getConnection() {
310 return target.getConnection(); 334 return target.getConnection();
311 } 335 }
312 336
313 private String getPackagesUrlForResource(IFile file) { 337 private String getPackagesUrlForFilePath(String filePath) {
314 String locationUrl = file.getLocation().toFile().toURI().toString(); 338 File javaFile = new File(filePath);
339 IFile resourceFile = ResourceUtil.getFile(javaFile);
340 if (resourceFile == null) {
341 return null;
342 }
343 String locationUrl = resourceFile.getLocation().toFile().toURI().toString();
315 344
316 int index = locationUrl.indexOf(DartCore.PACKAGES_DIRECTORY_URL); 345 int index = locationUrl.indexOf(DartCore.PACKAGES_DIRECTORY_URL);
317 346
318 if (index != -1) { 347 if (index != -1) {
319 locationUrl = DartCore.PACKAGE_SCHEME_SPEC 348 locationUrl = DartCore.PACKAGE_SCHEME_SPEC
320 + locationUrl.substring(index + DartCore.PACKAGES_DIRECTORY_URL.length ()); 349 + locationUrl.substring(index + DartCore.PACKAGES_DIRECTORY_URL.length ());
321 350
322 return locationUrl; 351 return locationUrl;
323 } 352 }
324 353
325 index = locationUrl.lastIndexOf(DartCore.LIB_URL_PATH); 354 index = locationUrl.lastIndexOf(DartCore.LIB_URL_PATH);
326 355
327 if (index != -1) { 356 if (index != -1) {
328 String path = file.getLocation().toString(); 357 String path = resourceFile.getLocation().toString();
329 path = path.substring(0, path.lastIndexOf(DartCore.LIB_URL_PATH)); 358 path = path.substring(0, path.lastIndexOf(DartCore.LIB_URL_PATH));
330 File packagesDir = new File(path, DartCore.PACKAGES_DIRECTORY_NAME); 359 File packagesDir = new File(path, DartCore.PACKAGES_DIRECTORY_NAME);
331 360
332 if (packagesDir.exists()) { 361 if (packagesDir.exists()) {
333 String packageName = DartCore.getSelfLinkedPackageName(file); 362 String packageName = DartCore.getSelfLinkedPackageName(resourceFile);
334 363
335 if (packageName != null) { 364 if (packageName != null) {
336 locationUrl = DartCore.PACKAGE_SCHEME_SPEC + packageName + "/" 365 locationUrl = DartCore.PACKAGE_SCHEME_SPEC + packageName + "/"
337 + locationUrl.substring(index + DartCore.LIB_URL_PATH.length()); 366 + locationUrl.substring(index + DartCore.LIB_URL_PATH.length());
338 367
339 return locationUrl; 368 return locationUrl;
340 } 369 }
341 } 370 }
342 } 371 }
343 372
344 return null; 373 return null;
345 } 374 }
346 375
347 private boolean supportsBreakpoint(IBreakpoint breakpoint) { 376 private boolean supportsBreakpoint(IBreakpoint breakpoint) {
348 return target.supportsBreakpoint(breakpoint); 377 return target.supportsBreakpoint(breakpoint);
349 } 378 }
350
351 } 379 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698