From 2a47bf0775e01a8ae802c4a01a06146df2fd04d7 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 15:58:07 +0100 Subject: [PATCH 1/6] Improve type checking in ol.geom.flat --- src/ol/geom/flatgeom.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index 588858d624..fdc9f8f24b 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -488,6 +488,7 @@ ol.geom.flat.linearRingsContainsXY = ol.geom.flat.linearRingsGetInteriorPoint = function(flatCoordinates, offset, ends, stride, y, opt_point) { var i, ii, x, x1, x2, y1, y2; + /** @type {Array.} */ var intersections = []; // Calculate intersections with the horizontal line var end = ends[0]; From 58b4d73f3bad08b427a205ba5d3b332521e83090 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 15:58:29 +0100 Subject: [PATCH 2/6] Improve type checking in ol.geom.simplify --- src/ol/geom/simplifygeom.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/geom/simplifygeom.js b/src/ol/geom/simplifygeom.js index 427f8b22ce..0a917b636e 100644 --- a/src/ol/geom/simplifygeom.js +++ b/src/ol/geom/simplifygeom.js @@ -86,6 +86,7 @@ ol.geom.simplify.douglasPeucker = function(flatCoordinates, offset, end, var markers = new MarkerArray(n); markers[0] = 1; markers[n - 1] = 1; + /** @type {Array.} */ var stack = [offset, end - stride]; var index = 0; var i; From 8ed6d760f72ab7a1e96f048ad1df1d59aac699e2 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 15:52:26 +0100 Subject: [PATCH 3/6] Improve type checking in ol.color.fromString --- src/ol/color/color.js | 94 ++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/ol/color/color.js b/src/ol/color/color.js index c4f3a4f476..55bfe3f30d 100644 --- a/src/ol/color/color.js +++ b/src/ol/color/color.js @@ -142,56 +142,60 @@ ol.color.equals = function(color1, color2) { * @param {ol.Color=} opt_color Color. * @return {ol.Color} Color. */ -ol.color.fromString = (function() { +ol.color.fromString = ( + /** + * @return {function(string, ol.Color=): ol.Color} + */ + function() { - // We maintain a small cache of parsed strings. To provide cheap LRU-like - // semantics, whenever the cache grows too large we simply delete an - // arbitrary 25% of the entries. + // We maintain a small cache of parsed strings. To provide cheap LRU-like + // semantics, whenever the cache grows too large we simply delete an + // arbitrary 25% of the entries. - /** - * @const - * @type {number} - */ - var MAX_CACHE_SIZE = 1024; - - /** - * @type {Object.} - */ - var cache = {}; - - /** - * @type {number} - */ - var cacheSize = 0; - - return ( /** - * @param {string} s String. - * @param {ol.Color=} opt_color Color. - * @return {ol.Color} Color. + * @const + * @type {number} */ - function(s, opt_color) { - var color; - if (cache.hasOwnProperty(s)) { - color = cache[s]; - } else { - if (cacheSize >= MAX_CACHE_SIZE) { - var i = 0; - var key; - for (key in cache) { - if (i++ & 3 === 0) { - delete cache[key]; - } - } - } - color = ol.color.fromStringInternal_(s); - cache[s] = color; - ++cacheSize; - } - return ol.color.returnOrUpdate(color, opt_color); - }); + var MAX_CACHE_SIZE = 1024; -})(); + /** + * @type {Object.} + */ + var cache = {}; + + /** + * @type {number} + */ + var cacheSize = 0; + + return ( + /** + * @param {string} s String. + * @param {ol.Color=} opt_color Color. + * @return {ol.Color} Color. + */ + function(s, opt_color) { + var color; + if (cache.hasOwnProperty(s)) { + color = cache[s]; + } else { + if (cacheSize >= MAX_CACHE_SIZE) { + var i = 0; + var key; + for (key in cache) { + if (i++ & 3 === 0) { + delete cache[key]; + } + } + } + color = ol.color.fromStringInternal_(s); + cache[s] = color; + ++cacheSize; + } + return ol.color.returnOrUpdate(color, opt_color); + }); + + })(); /** From 7ee274794826e36ace44fecbc1bff5272cae456b Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 17:58:20 +0100 Subject: [PATCH 4/6] Always use goog.vec.Mat4.Number instead of goog.vec.Mat.AnyType --- src/ol/color/color.js | 2 +- src/ol/geom/flatgeom.js | 2 +- src/ol/geom/simplegeometry.js | 2 +- src/ol/render/canvas/canvasimmediate.js | 4 ++-- src/ol/render/canvas/canvasreplay.js | 12 ++++++------ src/ol/renderer/canvas/canvaslayerrenderer.js | 6 +++--- src/ol/vec/mat4.js | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/ol/color/color.js b/src/ol/color/color.js index 55bfe3f30d..765cc22614 100644 --- a/src/ol/color/color.js +++ b/src/ol/color/color.js @@ -318,7 +318,7 @@ ol.color.toString = function(color) { /** * @param {ol.Color} color Color. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {ol.Color=} opt_color Color. * @return {ol.Color} Transformed color. */ diff --git a/src/ol/geom/flatgeom.js b/src/ol/geom/flatgeom.js index fdc9f8f24b..14f129081f 100644 --- a/src/ol/geom/flatgeom.js +++ b/src/ol/geom/flatgeom.js @@ -736,7 +736,7 @@ ol.geom.flat.squaredDistance = function(x1, y1, x2, y2) { /** * @param {Array.} flatCoordinates Flat coordinates. * @param {number} stride Stride. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {Array.=} opt_dest Destination. * @return {Array.} Transformed coordinates. */ diff --git a/src/ol/geom/simplegeometry.js b/src/ol/geom/simplegeometry.js index 29a92f6b97..2f24d9d28f 100644 --- a/src/ol/geom/simplegeometry.js +++ b/src/ol/geom/simplegeometry.js @@ -230,7 +230,7 @@ ol.geom.SimpleGeometry.prototype.transform = function(transformFn) { /** * @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {Array.=} opt_dest Destination. * @return {Array.} Transformed flat coordinates. */ diff --git a/src/ol/render/canvas/canvasimmediate.js b/src/ol/render/canvas/canvasimmediate.js index d3c96591bf..7576e1d6ca 100644 --- a/src/ol/render/canvas/canvasimmediate.js +++ b/src/ol/render/canvas/canvasimmediate.js @@ -21,7 +21,7 @@ goog.require('ol.vec.Mat4'); * @param {CanvasRenderingContext2D} context Context. * @param {number} pixelRatio Pixel ratio. * @param {ol.Extent} extent Extent. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @struct */ ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform) { @@ -46,7 +46,7 @@ ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform) { /** * @private - * @type {goog.vec.Mat4.AnyType} + * @type {goog.vec.Mat4.Number} */ this.transform_ = transform; diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index 9b69bb1c55..81fe9ede56 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -160,7 +160,7 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry) { /** * @private * @param {CanvasRenderingContext2D} context Context. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @param {Array.<*>} instructions Instructions array. @@ -305,7 +305,7 @@ ol.render.canvas.Replay.prototype.replay_ = /** * @param {CanvasRenderingContext2D} context Context. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @return {T|undefined} Callback result. @@ -321,7 +321,7 @@ ol.render.canvas.Replay.prototype.replay = /** * @param {CanvasRenderingContext2D} context Context. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @param {function(ol.geom.Geometry, Object): T=} opt_geometryCallback @@ -1231,7 +1231,7 @@ ol.render.canvas.ReplayGroup = function(pixelRatio, tolerance) { /** * @param {CanvasRenderingContext2D} context Context. * @param {ol.Extent} extent Extent. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @return {T|undefined} Callback result. @@ -1252,7 +1252,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(context, extent, * @param {Array.} zs Z-indices array. * @param {CanvasRenderingContext2D} context Context. * @param {ol.Extent} extent Extent. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @param {function(ol.geom.Geometry, Object): T} geometryCallback Geometry @@ -1286,7 +1286,7 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = * @param {Array.} zs Z-indices array. * @param {CanvasRenderingContext2D} context Context. * @param {ol.Extent} extent Extent. - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @param {function(ol.geom.Geometry): boolean} renderGeometryFunction Render * geometry function. * @return {T|undefined} Callback result. diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index f3a0366338..e590979ff0 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -76,7 +76,7 @@ ol.renderer.canvas.Layer.prototype.composeFrame = * @param {ol.render.EventType} type Event type. * @param {CanvasRenderingContext2D} context Context. * @param {ol.FrameState} frameState Frame state. - * @param {goog.vec.Mat4.AnyType=} opt_transform Transform. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. * @private */ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = @@ -97,7 +97,7 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = /** * @param {CanvasRenderingContext2D} context Context. * @param {ol.FrameState} frameState Frame state. - * @param {goog.vec.Mat4.AnyType=} opt_transform Transform. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. * @protected */ ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = @@ -110,7 +110,7 @@ ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = /** * @param {CanvasRenderingContext2D} context Context. * @param {ol.FrameState} frameState Frame state. - * @param {goog.vec.Mat4.AnyType=} opt_transform Transform. + * @param {goog.vec.Mat4.Number=} opt_transform Transform. * @protected */ ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = diff --git a/src/ol/vec/mat4.js b/src/ol/vec/mat4.js index 0f024243c4..54e7df7e71 100644 --- a/src/ol/vec/mat4.js +++ b/src/ol/vec/mat4.js @@ -35,8 +35,8 @@ ol.vec.Mat4.makeTransform2D = function(mat, translateX1, translateY1, /** * Returns true if mat1 and mat2 represent the same 2D transformation. - * @param {goog.vec.Mat4.AnyType} mat1 Matrix 1. - * @param {goog.vec.Mat4.AnyType} mat2 Matrix 2. + * @param {goog.vec.Mat4.Number} mat1 Matrix 1. + * @param {goog.vec.Mat4.Number} mat2 Matrix 2. * @return {boolean} Equal 2D. */ ol.vec.Mat4.equals2D = function(mat1, mat2) { From c97588c1e2f49bdc8f279f5ae232f4d7aff27952 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 20:24:20 +0100 Subject: [PATCH 5/6] Use assertInstanceof instead of getVectorLayer --- .../renderer/canvas/canvasvectorlayerrenderer.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index dc31b669b0..fd39e7fe2e 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -133,7 +133,8 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = */ ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ = function() { - var vectorLayer = this.getVectorLayer(); + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); var renderGeometryFunction = vectorLayer.getRenderGeometryFunction(); if (!goog.isDef(renderGeometryFunction)) { renderGeometryFunction = goog.functions.TRUE; @@ -142,14 +143,6 @@ ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ = }; -/** - * @return {ol.layer.Vector} Vector layer. - */ -ol.renderer.canvas.VectorLayer.prototype.getVectorLayer = function() { - return /** @type {ol.layer.Vector} */ (this.getLayer()); -}; - - /** * Handle changes in image style state. * @param {goog.events.Event} event Image style change event. @@ -175,7 +168,8 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = return; } - var vectorLayer = this.getVectorLayer(); + var vectorLayer = this.getLayer(); + goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); var vectorSource = vectorLayer.getVectorSource(); var frameStateExtent = frameState.extent; var frameStateResolution = frameState.view2DState.resolution; From 1499af397d9852eded193a8b06ea9d8bad71a49f Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 13 Dec 2013 20:29:45 +0100 Subject: [PATCH 6/6] Use assertInstanceof instead of getVectorSource --- src/ol/layer/vectorlayer.js | 9 --------- src/ol/renderer/canvas/canvasvectorlayerrenderer.js | 4 +++- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js index 0856167791..7c69c0c77c 100644 --- a/src/ol/layer/vectorlayer.js +++ b/src/ol/layer/vectorlayer.js @@ -2,7 +2,6 @@ goog.provide('ol.layer.Vector'); goog.require('ol.feature'); goog.require('ol.layer.Layer'); -goog.require('ol.source.Vector'); /** @@ -63,14 +62,6 @@ goog.exportProperty( ol.layer.Vector.prototype.getStyleFunction); -/** - * @return {ol.source.Source} Vector source. - */ -ol.layer.Vector.prototype.getVectorSource = function() { - return /** @type {ol.source.Vector} */ (this.getSource()); -}; - - /** * @param {function(ol.geom.Geometry): boolean|undefined} renderGeometryFunction * Render geometry function. diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index fd39e7fe2e..a4bbdfb362 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -11,6 +11,7 @@ goog.require('ol.layer.Vector'); goog.require('ol.render.canvas.ReplayGroup'); goog.require('ol.renderer.canvas.Layer'); goog.require('ol.renderer.vector'); +goog.require('ol.source.Vector'); goog.require('ol.style.ImageState'); @@ -170,7 +171,8 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = var vectorLayer = this.getLayer(); goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector); - var vectorSource = vectorLayer.getVectorSource(); + var vectorSource = vectorLayer.getSource(); + goog.asserts.assertInstanceof(vectorSource, ol.source.Vector); var frameStateExtent = frameState.extent; var frameStateResolution = frameState.view2DState.resolution; var pixelRatio = frameState.devicePixelRatio;