From c78754abbaaa007af5e324fe1dec4f51dbf178d3 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 28 Apr 2013 19:41:37 +0200 Subject: [PATCH 01/15] Activate more compiler checks --- buildcfg/base.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/buildcfg/base.json b/buildcfg/base.json index 4a0fc293c1..9435a339fe 100644 --- a/buildcfg/base.json +++ b/buildcfg/base.json @@ -6,7 +6,10 @@ "accessControls": "ERROR", "ambiguousFunctionDecl": "ERROR", "checkDebuggerStatement": "WARNING", + "checkEventfulObjectDisposal": "ERROR", + "checkProvides": "ERROR", "checkRegExp": "ERROR", + "checkStructDictInheritance": "ERROR", "checkTypes": "ERROR", "checkVars": "ERROR", "const": "ERROR", @@ -14,20 +17,25 @@ "deprecated": "ERROR", "duplicate": "ERROR", "duplicateMessage": "ERROR", + "es3": "ERROR", "es5Strict": "ERROR", "externsValidation": "ERROR", "fileoverviewTags": "ERROR", "globalThis": "ERROR", "internetExplorerChecks": "ERROR", "invalidCasts": "ERROR", + "misplacedTypeAnnotation": "ERROR", "missingProperties": "ERROR", "nonStandardJsDocs": "ERROR", "strictModuleDepCheck": "ERROR", + "suspiciousCode": "ERROR", "typeInvalidation": "ERROR", + "tweakValidation": "ERROR", "undefinedNames": "ERROR", "undefinedVars": "ERROR", "unknownDefines": "ERROR", "uselessCode": "ERROR", + "violatedModuleDep": "ERROR", "visibility": "ERROR" }, From 9d92b9ee3719a809b7c6cd18c281dce30cabf00b Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 18 Nov 2013 16:55:42 +0100 Subject: [PATCH 02/15] Use templates in ol.structs.LRUCache --- src/ol/structs/lrucache.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ol/structs/lrucache.js b/src/ol/structs/lrucache.js index 81c6d01022..12e8e5d49c 100644 --- a/src/ol/structs/lrucache.js +++ b/src/ol/structs/lrucache.js @@ -10,6 +10,7 @@ goog.require('goog.object'); * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring * items from the cache is the responsibility of the user. * @constructor + * @template T */ ol.structs.LRUCache = function() { @@ -96,7 +97,7 @@ ol.structs.LRUCache.prototype.containsKey = function(key) { /** - * @param {function(this: S, *, string, ol.structs.LRUCache): ?} f The function + * @param {function(this: S, T, string, ol.structs.LRUCache): ?} f The function * to call for every entry from the oldest to the newer. This function takes * 3 arguments (the entry value, the entry key and the LRUCache object). * The return value is ignored. @@ -114,7 +115,7 @@ ol.structs.LRUCache.prototype.forEach = function(f, opt_obj) { /** * @param {string} key Key. - * @return {*} Value. + * @return {T} Value. */ ol.structs.LRUCache.prototype.get = function(key) { var entry = this.entries_[key]; @@ -175,7 +176,7 @@ ol.structs.LRUCache.prototype.getValues = function() { /** - * @return {*} Last value. + * @return {T} Last value. */ ol.structs.LRUCache.prototype.peekLast = function() { goog.asserts.assert(!goog.isNull(this.oldest_)); @@ -193,7 +194,7 @@ ol.structs.LRUCache.prototype.peekLastKey = function() { /** - * @return {*} value Value. + * @return {T} value Value. */ ol.structs.LRUCache.prototype.pop = function() { goog.asserts.assert(!goog.isNull(this.oldest_)); @@ -215,7 +216,7 @@ ol.structs.LRUCache.prototype.pop = function() { /** * @param {string} key Key. - * @param {*} value Value. + * @param {T} value Value. */ ol.structs.LRUCache.prototype.set = function(key, value) { goog.asserts.assert(!(key in {})); From 353555f740fc6566833e36d526efba09509d8e8e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 18 Nov 2013 16:55:54 +0100 Subject: [PATCH 03/15] Use templates in ol.structs.PriorityQueue --- src/ol/structs/priorityqueue.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/ol/structs/priorityqueue.js b/src/ol/structs/priorityqueue.js index 74bfb08e42..b303d6c64c 100644 --- a/src/ol/structs/priorityqueue.js +++ b/src/ol/structs/priorityqueue.js @@ -15,25 +15,26 @@ goog.require('goog.object'); * @see http://hg.python.org/cpython/file/2.7/Lib/heapq.py * * @constructor - * @param {function(?): number} priorityFunction Priority function. - * @param {function(?): string} keyFunction Key function. + * @param {function(T): number} priorityFunction Priority function. + * @param {function(T): string} keyFunction Key function. + * @template T */ ol.structs.PriorityQueue = function(priorityFunction, keyFunction) { /** - * @type {function(?): number} + * @type {function(T): number} * @private */ this.priorityFunction_ = priorityFunction; /** - * @type {function(?): string} + * @type {function(T): string} * @private */ this.keyFunction_ = keyFunction; /** - * @type {Array} + * @type {Array.} * @private */ this.elements_ = []; @@ -88,7 +89,7 @@ ol.structs.PriorityQueue.prototype.clear = function() { /** * Remove and return the highest-priority element. O(log N). - * @return {*} Element. + * @return {T} Element. */ ol.structs.PriorityQueue.prototype.dequeue = function() { var elements = this.elements_; @@ -112,7 +113,7 @@ ol.structs.PriorityQueue.prototype.dequeue = function() { /** * Enqueue an element. O(log N). - * @param {*} element Element. + * @param {T} element Element. */ ol.structs.PriorityQueue.prototype.enqueue = function(element) { goog.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_)); @@ -197,7 +198,7 @@ ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) { /** - * @param {*} element Element. + * @param {T} element Element. * @return {boolean} Is queued. */ ol.structs.PriorityQueue.prototype.isQueued = function(element) { From 2d6354bb92c66416775647ddf3cebeacfcf26c4e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 18 Nov 2013 17:48:05 +0100 Subject: [PATCH 04/15] Use ol.structs.LRUCache template in ol.TileCache --- src/ol/tilecache.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/ol/tilecache.js b/src/ol/tilecache.js index 366a8ce364..48b363cb3b 100644 --- a/src/ol/tilecache.js +++ b/src/ol/tilecache.js @@ -16,7 +16,7 @@ ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048; /** * @constructor - * @extends {ol.structs.LRUCache} + * @extends {ol.structs.LRUCache.} * @param {number=} opt_highWaterMark High water mark. */ ol.TileCache = function(opt_highWaterMark) { @@ -48,10 +48,7 @@ ol.TileCache.prototype.canExpireCache = function() { ol.TileCache.prototype.expireCache = function(usedTiles) { var tile, zKey; while (this.canExpireCache()) { - tile = /** @type {ol.Tile} */ (this.peekLast()); - // TODO: Enforce ol.Tile in ol.TileCache#set - goog.asserts.assert(tile instanceof ol.Tile, - 'ol.TileCache#expireCache only works with ol.Tile values.'); + tile = this.peekLast(); zKey = tile.tileCoord.z.toString(); if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { break; From 78380feb3009ea837da8c634416ab805b5b419bc Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 18 Nov 2013 21:19:52 +0100 Subject: [PATCH 05/15] Use ol.structs.PriorityQueue template in ol.TileQueue --- src/ol/tilequeue.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/tilequeue.js b/src/ol/tilequeue.js index 5dad4a292f..57d0791caa 100644 --- a/src/ol/tilequeue.js +++ b/src/ol/tilequeue.js @@ -17,7 +17,7 @@ ol.TilePriorityFunction; /** * @constructor - * @extends {ol.structs.PriorityQueue} + * @extends {ol.structs.PriorityQueue.} * @param {ol.TilePriorityFunction} tilePriorityFunction * Tile priority function. * @param {function(): ?} tileChangeCallback From e487e1b21597218d70b16bf55d848459c51e0e1d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 10:57:45 +0100 Subject: [PATCH 06/15] Improve type checking in ol.Collection --- src/ol/collection.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/collection.js b/src/ol/collection.js index 2d11d303be..be85ad78c4 100644 --- a/src/ol/collection.js +++ b/src/ol/collection.js @@ -75,7 +75,7 @@ ol.Collection = function(opt_array) { /** * @private - * @type {Array} + * @type {Array.<*>} */ this.array_ = opt_array || []; @@ -112,7 +112,7 @@ ol.Collection.prototype.extend = function(arr) { /** * Iterate over each element, calling the provided callback. - * @param {function(this: S, T, number, Array.): ?} f The function to call + * @param {function(this: S, T, number, Array.): *} f The function to call * for every element. This function takes 3 arguments (the element, the * index and the array). The return value is ignored. * @param {S=} opt_obj The object to be used as the value of 'this' within f. From d3981e28915c99ed7b2e0918129c4cfb103a4038 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:01:10 +0100 Subject: [PATCH 07/15] Improve type checking in ol.renderer.canvas.Map --- src/ol/renderer/canvas/canvasmaprenderer.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 751a87192f..1b0cc78c28 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -122,7 +122,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { for (i = 0, ii = layersArray.length; i < ii; ++i) { layer = layersArray[i]; - layerRenderer = this.getLayerRenderer(layer); + layerRenderer = + /** @type {ol.renderer.canvas.Layer} */ (this.getLayerRenderer(layer)); layerState = layerStates[goog.getUid(layer)]; if (!layerState.visible || layerState.sourceState != ol.source.State.READY || @@ -144,6 +145,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { var dy = goog.vec.Mat4.getElement(transform, 1, 3); var dw = image.width * goog.vec.Mat4.getElement(transform, 0, 0); var dh = image.height * goog.vec.Mat4.getElement(transform, 1, 1); + goog.asserts.assert(goog.isNumber(image.width)); + goog.asserts.assert(goog.isNumber(image.height)); context.drawImage(image, 0, 0, image.width, image.height, Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh)); } else { From 68bf12b5e1890be06ee77e2d5ffc162cb536232a Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:01:57 +0100 Subject: [PATCH 08/15] Improve type checking in ol.renderer.dom.Map --- src/ol/renderer/dom/domlayerrenderer.js | 1 - src/ol/renderer/dom/dommaprenderer.js | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/renderer/dom/domlayerrenderer.js b/src/ol/renderer/dom/domlayerrenderer.js index 66ecde9bd3..e42c6f3fc1 100644 --- a/src/ol/renderer/dom/domlayerrenderer.js +++ b/src/ol/renderer/dom/domlayerrenderer.js @@ -28,7 +28,6 @@ goog.inherits(ol.renderer.dom.Layer, ol.renderer.Layer); /** - * @protected * @return {!Element} Target. */ ol.renderer.dom.Layer.prototype.getTarget = function() { diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index 3a8dfc49d7..f05b9326de 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -93,7 +93,8 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { var layerKey; for (layerKey in this.getLayerRenderers()) { if (!(layerKey in layerStates)) { - layerRenderer = this.getLayerRendererByKey(layerKey); + layerRenderer = /** @type {ol.renderer.dom.Layer} */ + (this.getLayerRendererByKey(layerKey)); goog.dom.removeNode(layerRenderer.getTarget()); } } From 0221f74e5c8dbbc3c260bd76a9a00d4272e31c18 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:02:40 +0100 Subject: [PATCH 09/15] Improve type checking in ol.renderer.dom.TileLayer --- src/ol/renderer/dom/domtilelayerrenderer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 12b8e29b33..68733fbc16 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -383,6 +383,7 @@ ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent, opt_tileRange) { var tileRange = this.tileGrid_.getTileRangeForExtentAndZ( extent, this.tileCoordOrigin_.z, opt_tileRange); + /** @type {Array.} */ var tilesToRemove = []; var tile, tileCoordKey; for (tileCoordKey in this.tiles_) { From a613b193602734fadcb3a7dff4d779a33044bb9e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:03:13 +0100 Subject: [PATCH 10/15] Improve type checking in ol.renderer.Layer --- src/ol/renderer/layerrenderer.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 8dc5cf489a..36bf1863ea 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -129,10 +129,16 @@ ol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) { if (tileSource.canExpireCache()) { frameState.postRenderFunctions.push( - goog.partial(function(tileSource, map, frameState) { - var tileSourceKey = goog.getUid(tileSource).toString(); - tileSource.expireCache(frameState.usedTiles[tileSourceKey]); - }, tileSource)); + goog.partial( + /** + * @param {ol.source.Tile} tileSource Tile source. + * @param {ol.Map} map Map. + * @param {ol.FrameState} frameState Frame state. + */ + function(tileSource, map, frameState) { + var tileSourceKey = goog.getUid(tileSource).toString(); + tileSource.expireCache(frameState.usedTiles[tileSourceKey]); + }, tileSource)); } }; From 2ba33b8cadfcce89c8e47ca24a004d70e2262370 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:03:32 +0100 Subject: [PATCH 11/15] Improve type checking in ol.renderer.webgl.ImageLayer --- src/ol/renderer/webgl/webglimagelayerrenderer.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index 688ca4d015..0249e1c336 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -114,11 +114,16 @@ ol.renderer.webgl.ImageLayer.prototype.renderFrame = texture = this.createTexture_(image_); if (!goog.isNull(this.texture)) { frameState.postRenderFunctions.push( - goog.partial(function(gl, texture) { - if (!gl.isContextLost()) { - gl.deleteTexture(texture); - } - }, gl, this.texture)); + goog.partial( + /** + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLTexture} texture Texture. + */ + function(gl, texture) { + if (!gl.isContextLost()) { + gl.deleteTexture(texture); + } + }, gl, this.texture)); } } } From 06b145649996dc7c0bcd31dad82867c5783ba877 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:03:53 +0100 Subject: [PATCH 12/15] Improve type checking in ol.renderer.webgl.Layer --- src/ol/renderer/webgl/webgllayerrenderer.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index f99258937b..73395f96dc 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -124,12 +124,18 @@ ol.renderer.webgl.Layer.prototype.bindFramebuffer = this.framebufferDimension != framebufferDimension) { frameState.postRenderFunctions.push( - goog.partial(function(gl, framebuffer, texture) { - if (!gl.isContextLost()) { - gl.deleteFramebuffer(framebuffer); - gl.deleteTexture(texture); - } - }, gl, this.framebuffer, this.texture)); + goog.partial( + /** + * @param {WebGLRenderingContext} gl GL. + * @param {WebGLFramebuffer} framebuffer Framebuffer. + * @param {WebGLTexture} texture Texture. + */ + function(gl, framebuffer, texture) { + if (!gl.isContextLost()) { + gl.deleteFramebuffer(framebuffer); + gl.deleteTexture(texture); + } + }, gl, this.framebuffer, this.texture)); var texture = gl.createTexture(); gl.bindTexture(goog.webgl.TEXTURE_2D, texture); From 64021b130abf1f6445d2e9ff8de2947a93b7d877 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:04:40 +0100 Subject: [PATCH 13/15] Improve type checking in ol.renderer.webgl.TileLayer --- src/ol/renderer/webgl/webgltilelayerrenderer.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index e60139653b..63e336e0d5 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -279,6 +279,9 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = this.manageTilePyramid( frameState, tileSource, tileGrid, projection, extent, z, tileLayer.getPreload(), + /** + * @param {ol.Tile} tile Tile. + */ function(tile) { if (tile.getState() == ol.TileState.LOADED && !mapRenderer.isTileTextureLoaded(tile) && From d91479df06d455180e4ab6b5a26c22df6c2041b3 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:06:36 +0100 Subject: [PATCH 14/15] Improve type checking in ol.source.DebugTile --- src/ol/source/debugtilesource.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ol/source/debugtilesource.js b/src/ol/source/debugtilesource.js index 15a7b1bb15..32c7a1905f 100644 --- a/src/ol/source/debugtilesource.js +++ b/src/ol/source/debugtilesource.js @@ -61,7 +61,8 @@ ol.DebugTile_.prototype.getImage = function(opt_context) { canvas.width = tileSize[0]; canvas.height = tileSize[1]; - var context = canvas.getContext('2d'); + var context = /** @type {CanvasRenderingContext2D} */ + (canvas.getContext('2d')); context.strokeStyle = 'black'; context.strokeRect(0.5, 0.5, tileSize[0] + 0.5, tileSize[1] + 0.5); From a646753124216beceff8d8709af26a2fa6c946ca Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Wed, 20 Nov 2013 11:07:22 +0100 Subject: [PATCH 15/15] Improve type checking in ol.TileCache --- src/ol/tilecache.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/tilecache.js b/src/ol/tilecache.js index 48b363cb3b..baca04fb4a 100644 --- a/src/ol/tilecache.js +++ b/src/ol/tilecache.js @@ -48,7 +48,7 @@ ol.TileCache.prototype.canExpireCache = function() { ol.TileCache.prototype.expireCache = function(usedTiles) { var tile, zKey; while (this.canExpireCache()) { - tile = this.peekLast(); + tile = /** @type {ol.Tile} */ (this.peekLast()); zKey = tile.tileCoord.z.toString(); if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) { break;