| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 return; | 334 return; |
| 335 } | 335 } |
| 336 | 336 |
| 337 this._restoreBreakpointsAfterEditing(); | 337 this._restoreBreakpointsAfterEditing(); |
| 338 } | 338 } |
| 339 | 339 |
| 340 _restoreBreakpointsAfterEditing() { | 340 _restoreBreakpointsAfterEditing() { |
| 341 delete this._muted; | 341 delete this._muted; |
| 342 var decorations = Array.from(this._breakpointDecorations); | 342 var decorations = Array.from(this._breakpointDecorations); |
| 343 this._breakpointDecorations.clear(); | 343 this._breakpointDecorations.clear(); |
| 344 this._textEditor.operation(() => decorations.map(decoration => decoration.hi
de())); | 344 this.textEditor.operation(() => decorations.map(decoration => decoration.hid
e())); |
| 345 for (var decoration of decorations) { | 345 for (var decoration of decorations) { |
| 346 if (!decoration.breakpoint) | 346 if (!decoration.breakpoint) |
| 347 continue; | 347 continue; |
| 348 var enabled = decoration.enabled; | 348 var enabled = decoration.enabled; |
| 349 decoration.breakpoint.remove(); | 349 decoration.breakpoint.remove(); |
| 350 var location = decoration.handle.resolve(); | 350 var location = decoration.handle.resolve(); |
| 351 if (location) | 351 if (location) |
| 352 this._setBreakpoint(location.lineNumber, location.columnNumber, decorati
on.condition, enabled); | 352 this._setBreakpoint(location.lineNumber, location.columnNumber, decorati
on.condition, enabled); |
| 353 } | 353 } |
| 354 } | 354 } |
| (...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 } | 777 } |
| 778 delete this._scheduledBreakpointDecorationUpdates; | 778 delete this._scheduledBreakpointDecorationUpdates; |
| 779 for (var lineNumber of lineNumbers) { | 779 for (var lineNumber of lineNumbers) { |
| 780 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint', false); | 780 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint', false); |
| 781 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint-disabled', fa
lse); | 781 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint-disabled', fa
lse); |
| 782 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint-conditional',
false); | 782 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint-conditional',
false); |
| 783 | 783 |
| 784 var decorations = this._lineBreakpointDecorations(lineNumber); | 784 var decorations = this._lineBreakpointDecorations(lineNumber); |
| 785 var actualBookmarks = | 785 var actualBookmarks = |
| 786 new Set(decorations.map(decoration => decoration.bookmark).filter(bo
okmark => !!bookmark)); | 786 new Set(decorations.map(decoration => decoration.bookmark).filter(bo
okmark => !!bookmark)); |
| 787 var lineEnd = this._textEditor.line(lineNumber).length; | 787 var lineEnd = this.textEditor.line(lineNumber).length; |
| 788 var bookmarks = this._textEditor.bookmarks( | 788 var bookmarks = this.textEditor.bookmarks( |
| 789 new Common.TextRange(lineNumber, 0, lineNumber, lineEnd), | 789 new Common.TextRange(lineNumber, 0, lineNumber, lineEnd), |
| 790 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol); | 790 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol); |
| 791 for (var bookmark of bookmarks) { | 791 for (var bookmark of bookmarks) { |
| 792 if (!actualBookmarks.has(bookmark)) | 792 if (!actualBookmarks.has(bookmark)) |
| 793 bookmark.clear(); | 793 bookmark.clear(); |
| 794 } | 794 } |
| 795 if (!decorations.length) | 795 if (!decorations.length) |
| 796 continue; | 796 continue; |
| 797 decorations.sort(Sources.JavaScriptSourceFrame.BreakpointDecoration.most
SpecificFirst); | 797 decorations.sort(Sources.JavaScriptSourceFrame.BreakpointDecoration.most
SpecificFirst); |
| 798 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint', true); | 798 this.textEditor.toggleLineClass(lineNumber, 'cm-breakpoint', true); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint | 898 * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint |
| 899 */ | 899 */ |
| 900 _addBreakpoint(uiLocation, breakpoint) { | 900 _addBreakpoint(uiLocation, breakpoint) { |
| 901 var lineDecorations = this._lineBreakpointDecorations(uiLocation.lineNumber)
; | 901 var lineDecorations = this._lineBreakpointDecorations(uiLocation.lineNumber)
; |
| 902 var decoration = this._breakpointDecoration(uiLocation.lineNumber, uiLocatio
n.columnNumber); | 902 var decoration = this._breakpointDecoration(uiLocation.lineNumber, uiLocatio
n.columnNumber); |
| 903 if (decoration) { | 903 if (decoration) { |
| 904 decoration.breakpoint = breakpoint; | 904 decoration.breakpoint = breakpoint; |
| 905 decoration.condition = breakpoint.condition(); | 905 decoration.condition = breakpoint.condition(); |
| 906 decoration.enabled = breakpoint.enabled(); | 906 decoration.enabled = breakpoint.enabled(); |
| 907 } else { | 907 } else { |
| 908 var handle = this._textEditor.textEditorPositionHandle(uiLocation.lineNumb
er, uiLocation.columnNumber); | 908 var handle = this.textEditor.textEditorPositionHandle(uiLocation.lineNumbe
r, uiLocation.columnNumber); |
| 909 decoration = new Sources.JavaScriptSourceFrame.BreakpointDecoration( | 909 decoration = new Sources.JavaScriptSourceFrame.BreakpointDecoration( |
| 910 this._textEditor, handle, breakpoint.condition(), breakpoint.enabled()
, breakpoint); | 910 this.textEditor, handle, breakpoint.condition(), breakpoint.enabled(),
breakpoint); |
| 911 decoration.element.addEventListener('click', this._inlineBreakpointClick.b
ind(this, decoration), true); | 911 decoration.element.addEventListener('click', this._inlineBreakpointClick.b
ind(this, decoration), true); |
| 912 decoration.element.addEventListener( | 912 decoration.element.addEventListener( |
| 913 'contextmenu', this._inlineBreakpointContextMenu.bind(this, decoration
), true); | 913 'contextmenu', this._inlineBreakpointContextMenu.bind(this, decoration
), true); |
| 914 this._breakpointDecorations.add(decoration); | 914 this._breakpointDecorations.add(decoration); |
| 915 } | 915 } |
| 916 this._decorationByBreakpoint.set(breakpoint, decoration); | 916 this._decorationByBreakpoint.set(breakpoint, decoration); |
| 917 this._updateBreakpointDecoration(decoration); | 917 this._updateBreakpointDecoration(decoration); |
| 918 if (!lineDecorations.length) { | 918 if (!lineDecorations.length) { |
| 919 this._willAddInlineDecorationsForTest(); | 919 this._willAddInlineDecorationsForTest(); |
| 920 this._breakpointManager | 920 this._breakpointManager |
| (...skipping 18 matching lines...) Expand all Loading... |
| 939 for (var decoration of decorations) { | 939 for (var decoration of decorations) { |
| 940 var location = decoration.handle.resolve(); | 940 var location = decoration.handle.resolve(); |
| 941 if (!location) | 941 if (!location) |
| 942 continue; | 942 continue; |
| 943 columns.add(location.columnNumber); | 943 columns.add(location.columnNumber); |
| 944 } | 944 } |
| 945 var updateWasScheduled = false; | 945 var updateWasScheduled = false; |
| 946 for (var location of possibleLocations) { | 946 for (var location of possibleLocations) { |
| 947 if (columns.has(location.columnNumber)) | 947 if (columns.has(location.columnNumber)) |
| 948 continue; | 948 continue; |
| 949 var handle = this._textEditor.textEditorPositionHandle(location.lineNumb
er, location.columnNumber); | 949 var handle = this.textEditor.textEditorPositionHandle(location.lineNumbe
r, location.columnNumber); |
| 950 var decoration = | 950 var decoration = |
| 951 new Sources.JavaScriptSourceFrame.BreakpointDecoration(this._textEdi
tor, handle, '', false, null); | 951 new Sources.JavaScriptSourceFrame.BreakpointDecoration(this.textEdit
or, handle, '', false, null); |
| 952 decoration.element.addEventListener('click', this._inlineBreakpointClick
.bind(this, decoration), true); | 952 decoration.element.addEventListener('click', this._inlineBreakpointClick
.bind(this, decoration), true); |
| 953 decoration.element.addEventListener( | 953 decoration.element.addEventListener( |
| 954 'contextmenu', this._inlineBreakpointContextMenu.bind(this, decorati
on), true); | 954 'contextmenu', this._inlineBreakpointContextMenu.bind(this, decorati
on), true); |
| 955 this._breakpointDecorations.add(decoration); | 955 this._breakpointDecorations.add(decoration); |
| 956 updateWasScheduled = true; | 956 updateWasScheduled = true; |
| 957 this._updateBreakpointDecoration(decoration); | 957 this._updateBreakpointDecoration(decoration); |
| 958 } | 958 } |
| 959 this._didAddInlineDecorationsForTest(updateWasScheduled); | 959 this._didAddInlineDecorationsForTest(updateWasScheduled); |
| 960 } | 960 } |
| 961 } | 961 } |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1182 /** | 1182 /** |
| 1183 * @param {number} lineNumber | 1183 * @param {number} lineNumber |
| 1184 * @param {boolean} onlyDisable | 1184 * @param {boolean} onlyDisable |
| 1185 */ | 1185 */ |
| 1186 _toggleBreakpoint(lineNumber, onlyDisable) { | 1186 _toggleBreakpoint(lineNumber, onlyDisable) { |
| 1187 var decorations = this._lineBreakpointDecorations(lineNumber); | 1187 var decorations = this._lineBreakpointDecorations(lineNumber); |
| 1188 if (!decorations.length) { | 1188 if (!decorations.length) { |
| 1189 this._createNewBreakpoint(lineNumber, '', true); | 1189 this._createNewBreakpoint(lineNumber, '', true); |
| 1190 return; | 1190 return; |
| 1191 } | 1191 } |
| 1192 var hasDisabled = this._textEditor.hasLineClass(lineNumber, 'cm-breakpoint-d
isabled'); | 1192 var hasDisabled = this.textEditor.hasLineClass(lineNumber, 'cm-breakpoint-di
sabled'); |
| 1193 var breakpoints = decorations.map(decoration => decoration.breakpoint).filte
r(breakpoint => !!breakpoint); | 1193 var breakpoints = decorations.map(decoration => decoration.breakpoint).filte
r(breakpoint => !!breakpoint); |
| 1194 for (var breakpoint of breakpoints) { | 1194 for (var breakpoint of breakpoints) { |
| 1195 if (onlyDisable) | 1195 if (onlyDisable) |
| 1196 breakpoint.setEnabled(hasDisabled); | 1196 breakpoint.setEnabled(hasDisabled); |
| 1197 else | 1197 else |
| 1198 breakpoint.remove(); | 1198 breakpoint.remove(); |
| 1199 } | 1199 } |
| 1200 } | 1200 } |
| 1201 | 1201 |
| 1202 /** | 1202 /** |
| 1203 * @param {number} lineNumber | 1203 * @param {number} lineNumber |
| 1204 * @param {string} condition | 1204 * @param {string} condition |
| 1205 * @param {boolean} enabled | 1205 * @param {boolean} enabled |
| 1206 */ | 1206 */ |
| 1207 _createNewBreakpoint(lineNumber, condition, enabled) { | 1207 _createNewBreakpoint(lineNumber, condition, enabled) { |
| 1208 findPossibleBreakpoints.call(this, lineNumber) | 1208 findPossibleBreakpoints.call(this, lineNumber) |
| 1209 .then(checkNextLineIfNeeded.bind(this, lineNumber, 4)) | 1209 .then(checkNextLineIfNeeded.bind(this, lineNumber, 4)) |
| 1210 .then(setBreakpoint.bind(this, condition, enabled)); | 1210 .then(setBreakpoint.bind(this, condition, enabled)); |
| 1211 | 1211 |
| 1212 /** | 1212 /** |
| 1213 * @this {!Sources.JavaScriptSourceFrame} | 1213 * @this {!Sources.JavaScriptSourceFrame} |
| 1214 * @param {number} lineNumber | 1214 * @param {number} lineNumber |
| 1215 * @return {!Promise<?Array<!Workspace.UILocation>>} | 1215 * @return {!Promise<?Array<!Workspace.UILocation>>} |
| 1216 */ | 1216 */ |
| 1217 function findPossibleBreakpoints(lineNumber) { | 1217 function findPossibleBreakpoints(lineNumber) { |
| 1218 const maxLengthToCheck = 1024; | 1218 const maxLengthToCheck = 1024; |
| 1219 if (lineNumber >= this._textEditor.linesCount) | 1219 if (lineNumber >= this.textEditor.linesCount) |
| 1220 return Promise.resolve(/** @type {?Array<!Workspace.UILocation>} */ ([])
); | 1220 return Promise.resolve(/** @type {?Array<!Workspace.UILocation>} */ ([])
); |
| 1221 if (this._textEditor.line(lineNumber).length >= maxLengthToCheck) | 1221 if (this.textEditor.line(lineNumber).length >= maxLengthToCheck) |
| 1222 return Promise.resolve(/** @type {?Array<!Workspace.UILocation>} */ ([])
); | 1222 return Promise.resolve(/** @type {?Array<!Workspace.UILocation>} */ ([])
); |
| 1223 return this._breakpointManager | 1223 return this._breakpointManager |
| 1224 .possibleBreakpoints(this._debuggerSourceCode, new Common.TextRange(li
neNumber, 0, lineNumber + 1, 0)) | 1224 .possibleBreakpoints(this._debuggerSourceCode, new Common.TextRange(li
neNumber, 0, lineNumber + 1, 0)) |
| 1225 .then(locations => locations.length ? locations : null); | 1225 .then(locations => locations.length ? locations : null); |
| 1226 } | 1226 } |
| 1227 | 1227 |
| 1228 /** | 1228 /** |
| 1229 * @this {!Sources.JavaScriptSourceFrame} | 1229 * @this {!Sources.JavaScriptSourceFrame} |
| 1230 * @param {number} currentLineNumber | 1230 * @param {number} currentLineNumber |
| 1231 * @param {number} linesToCheck | 1231 * @param {number} linesToCheck |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1317 */ | 1317 */ |
| 1318 Sources.JavaScriptSourceFrame.BreakpointDecoration = class { | 1318 Sources.JavaScriptSourceFrame.BreakpointDecoration = class { |
| 1319 /** | 1319 /** |
| 1320 * @param {!TextEditor.CodeMirrorTextEditor} textEditor | 1320 * @param {!TextEditor.CodeMirrorTextEditor} textEditor |
| 1321 * @param {!TextEditor.TextEditorPositionHandle} handle | 1321 * @param {!TextEditor.TextEditorPositionHandle} handle |
| 1322 * @param {string} condition | 1322 * @param {string} condition |
| 1323 * @param {boolean} enabled | 1323 * @param {boolean} enabled |
| 1324 * @param {?Bindings.BreakpointManager.Breakpoint} breakpoint | 1324 * @param {?Bindings.BreakpointManager.Breakpoint} breakpoint |
| 1325 */ | 1325 */ |
| 1326 constructor(textEditor, handle, condition, enabled, breakpoint) { | 1326 constructor(textEditor, handle, condition, enabled, breakpoint) { |
| 1327 this._textEditor = textEditor; | 1327 this.textEditor = textEditor; |
| 1328 this.handle = handle; | 1328 this.handle = handle; |
| 1329 this.condition = condition; | 1329 this.condition = condition; |
| 1330 this.enabled = enabled; | 1330 this.enabled = enabled; |
| 1331 this.breakpoint = breakpoint; | 1331 this.breakpoint = breakpoint; |
| 1332 this.element = UI.Icon.create('smallicon-inline-breakpoint'); | 1332 this.element = UI.Icon.create('smallicon-inline-breakpoint'); |
| 1333 this.element.classList.toggle('cm-inline-breakpoint', true); | 1333 this.element.classList.toggle('cm-inline-breakpoint', true); |
| 1334 | 1334 |
| 1335 /** @type {?TextEditor.TextEditorBookMark} */ | 1335 /** @type {?TextEditor.TextEditorBookMark} */ |
| 1336 this.bookmark = null; | 1336 this.bookmark = null; |
| 1337 } | 1337 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1356 this.element.setIconType('smallicon-inline-breakpoint-conditional'); | 1356 this.element.setIconType('smallicon-inline-breakpoint-conditional'); |
| 1357 this.element.classList.toggle('cm-inline-disabled', !this.enabled); | 1357 this.element.classList.toggle('cm-inline-disabled', !this.enabled); |
| 1358 } | 1358 } |
| 1359 | 1359 |
| 1360 show() { | 1360 show() { |
| 1361 if (this.bookmark) | 1361 if (this.bookmark) |
| 1362 return; | 1362 return; |
| 1363 var location = this.handle.resolve(); | 1363 var location = this.handle.resolve(); |
| 1364 if (!location) | 1364 if (!location) |
| 1365 return; | 1365 return; |
| 1366 this.bookmark = this._textEditor.addBookmark( | 1366 this.bookmark = this.textEditor.addBookmark( |
| 1367 location.lineNumber, location.columnNumber, this.element, | 1367 location.lineNumber, location.columnNumber, this.element, |
| 1368 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol); | 1368 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol); |
| 1369 this.bookmark[Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSym
bolForTest] = this.element; | 1369 this.bookmark[Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSym
bolForTest] = this.element; |
| 1370 } | 1370 } |
| 1371 | 1371 |
| 1372 hide() { | 1372 hide() { |
| 1373 if (!this.bookmark) | 1373 if (!this.bookmark) |
| 1374 return; | 1374 return; |
| 1375 this.bookmark.clear(); | 1375 this.bookmark.clear(); |
| 1376 this.bookmark = null; | 1376 this.bookmark = null; |
| 1377 } | 1377 } |
| 1378 }; | 1378 }; |
| 1379 | 1379 |
| 1380 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol = Symbol('book
mark'); | 1380 Sources.JavaScriptSourceFrame.BreakpointDecoration.bookmarkSymbol = Symbol('book
mark'); |
| 1381 Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSymbolForTest = Symbo
l('element'); | 1381 Sources.JavaScriptSourceFrame.BreakpointDecoration._elementSymbolForTest = Symbo
l('element'); |
| OLD | NEW |