diff --git a/examples/bind-input.js b/examples/bind-input.js index 6668f1bed7..52deeb0c07 100644 --- a/examples/bind-input.js +++ b/examples/bind-input.js @@ -57,9 +57,10 @@ brightness.bindTo('value', layer, 'brightness') var rotation = new ol.dom.Input(document.getElementById('rotation')); -rotation.bindTo('value', map.getView(), 'rotation') +rotation.bindTo('value', /** @type {ol.View2D} */ (map.getView()), 'rotation') .transform(parseFloat, String); var resolution = new ol.dom.Input(document.getElementById('resolution')); -resolution.bindTo('value', map.getView(), 'resolution') +resolution.bindTo('value', + /** @type {ol.View2D} */ (map.getView()), 'resolution') .transform(parseFloat, String); diff --git a/examples/device-orientation.js b/examples/device-orientation.js index 318dc6468d..caf1f8cf98 100644 --- a/examples/device-orientation.js +++ b/examples/device-orientation.js @@ -6,6 +6,10 @@ goog.require('ol.dom.Input'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); +var view = new ol.View2D({ + center: [0, 0], + zoom: 2 +}); var map = new ol.Map({ layers: [ new ol.layer.Tile({ @@ -14,12 +18,8 @@ var map = new ol.Map({ ], renderers: ol.RendererHints.createFromQueryData(), target: 'map', - view: new ol.View2D({ - center: [0, 0], - zoom: 2 - }) + view: view }); -var view = map.getView(); var deviceOrientation = new ol.DeviceOrientation(); var track = new ol.dom.Input(document.getElementById('track')); diff --git a/examples/geolocation.js b/examples/geolocation.js index fc0d2ac62e..850e1b226f 100644 --- a/examples/geolocation.js +++ b/examples/geolocation.js @@ -24,7 +24,7 @@ var map = new ol.Map({ }); var geolocation = new ol.Geolocation(); -geolocation.bindTo('projection', map.getView()); +geolocation.bindTo('projection', /** @type {ol.View2D} */ (map.getView())); var track = new ol.dom.Input(document.getElementById('track')); track.bindTo('checked', geolocation, 'tracking'); diff --git a/examples/vector-layer-sld.js b/examples/vector-layer-sld.js index 585cc66c09..89f2ba710d 100644 --- a/examples/vector-layer-sld.js +++ b/examples/vector-layer-sld.js @@ -36,8 +36,10 @@ xhr.onload = function() { zoom: 1 }) }); - var units = map.getView().getProjection().getUnits(); - var sld = new ol.parser.ogc.SLD().read(xhr.responseText, units); + var units = map.getView().getView2D().getProjection().getUnits(); + var sld = new ol.parser.ogc.SLD().read(xhr.responseText, { + units: units + }); var style = sld.namedLayers['countries'].userStyles[0]; var vector = new ol.layer.Vector({ source: new ol.source.Vector({ diff --git a/src/ol/attribution.js b/src/ol/attribution.js index 560e52facf..3c95c8b83d 100644 --- a/src/ol/attribution.js +++ b/src/ol/attribution.js @@ -21,6 +21,7 @@ goog.require('ol.TileRange'); * * @constructor * @param {olx.AttributionOptions} options Attribution options. + * @struct * @todo stability experimental */ ol.Attribution = function(options) { diff --git a/src/ol/canvas/canvas.js b/src/ol/canvas/canvas.js index 266718953d..99bcd99217 100644 --- a/src/ol/canvas/canvas.js +++ b/src/ol/canvas/canvas.js @@ -9,15 +9,19 @@ goog.require('goog.dom.TagName'); * @const * @type {boolean} */ -ol.canvas.SUPPORTED = (function() { - if (!('HTMLCanvasElement' in goog.global)) { - return false; - } - try { - var canvas = /** @type {HTMLCanvasElement} */ - (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(canvas.getContext('2d')); - } catch (e) { - return false; - } -})(); +ol.canvas.SUPPORTED = ( + /** + * @return {boolean} Canvas supported. + */ + function() { + if (!('HTMLCanvasElement' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(canvas.getContext('2d')); + } catch (e) { + return false; + } + })(); diff --git a/src/ol/control/zoomcontrol.js b/src/ol/control/zoomcontrol.js index f31b6aaa66..5c8fe4ca4a 100644 --- a/src/ol/control/zoomcontrol.js +++ b/src/ol/control/zoomcontrol.js @@ -2,10 +2,12 @@ goog.provide('ol.control.Zoom'); +goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); goog.require('goog.events.EventType'); +goog.require('ol.View2D'); goog.require('ol.animation'); goog.require('ol.control.Control'); goog.require('ol.css'); @@ -77,8 +79,11 @@ ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) { browserEvent.preventDefault(); var map = this.getMap(); // FIXME works for View2D only - var view = map.getView().getView2D(); - var currentResolution = view.getResolution(); + var view = map.getView(); + goog.asserts.assert(goog.isDef(view)); + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var currentResolution = view2D.getResolution(); if (goog.isDef(currentResolution)) { if (this.duration_ > 0) { map.beforeRender(ol.animation.zoom({ @@ -87,7 +92,7 @@ ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) { easing: ol.easing.easeOut })); } - var newResolution = view.constrainResolution(currentResolution, delta); - view.setResolution(newResolution); + var newResolution = view2D.constrainResolution(currentResolution, delta); + view2D.setResolution(newResolution); } }; diff --git a/src/ol/dom/dom.js b/src/ol/dom/dom.js index 3cf809611e..44d86b8b43 100644 --- a/src/ol/dom/dom.js +++ b/src/ol/dom/dom.js @@ -31,7 +31,7 @@ ol.dom.setTransform = function(element, value) { /** * @param {Element} element Element. - * @param {goog.vec.Mat4.AnyType} transform Matrix. + * @param {goog.vec.Mat4.Number} transform Matrix. * @param {number=} opt_precision Precision. */ ol.dom.transformElement2D = function(element, transform, opt_precision) { diff --git a/src/ol/interaction/dragpaninteraction.js b/src/ol/interaction/dragpaninteraction.js index d98a801639..2b2b3231d4 100644 --- a/src/ol/interaction/dragpaninteraction.js +++ b/src/ol/interaction/dragpaninteraction.js @@ -84,11 +84,13 @@ ol.interaction.DragPan.prototype.handleDragEnd = function(mapBrowserEvent) { // FIXME works for View2D only var map = mapBrowserEvent.map; - var view = map.getView().getView2D(); + var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); if (this.kinetic_ && this.kinetic_.end()) { - var view2DState = view.getView2DState(); + var view2D = view.getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); var distance = this.kinetic_.getDistance(); var angle = this.kinetic_.getAngle(); this.kineticPreRenderFn_ = this.kinetic_.pan(view2DState.center); @@ -99,8 +101,8 @@ ol.interaction.DragPan.prototype.handleDragEnd = function(mapBrowserEvent) { centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle) ]); - dest = view.constrainCenter(dest); - view.setCenter(dest); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest); } map.requestRenderFrame(); }; diff --git a/src/ol/interaction/dragrotateandzoominteraction.js b/src/ol/interaction/dragrotateandzoominteraction.js index b2588a2af3..fdef314122 100644 --- a/src/ol/interaction/dragrotateandzoominteraction.js +++ b/src/ol/interaction/dragrotateandzoominteraction.js @@ -105,13 +105,14 @@ ol.interaction.DragRotateAndZoom.prototype.handleDragEnd = function(mapBrowserEvent) { var map = mapBrowserEvent.map; // FIXME works for View2D only - var view = map.getView().getView2D(); + var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); - var view2DState = view.getView2DState(); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); var direction = this.lastScaleDelta_ - 1; map.withFrozenRendering(function() { - ol.interaction.Interaction.rotate(map, view, view2DState.rotation); - ol.interaction.Interaction.zoom(map, view, view2DState.resolution, + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation); + ol.interaction.Interaction.zoom(map, view2D, view2DState.resolution, undefined, ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction); }); diff --git a/src/ol/interaction/dragrotateinteraction.js b/src/ol/interaction/dragrotateinteraction.js index 06a85e3eb9..eceed9dfc6 100644 --- a/src/ol/interaction/dragrotateinteraction.js +++ b/src/ol/interaction/dragrotateinteraction.js @@ -74,11 +74,12 @@ ol.interaction.DragRotate.prototype.handleDrag = function(mapBrowserEvent) { ol.interaction.DragRotate.prototype.handleDragEnd = function(mapBrowserEvent) { var map = mapBrowserEvent.map; // FIXME works for View2D only - var view = map.getView().getView2D(); + var view = map.getView(); view.setHint(ol.ViewHint.INTERACTING, -1); - var view2DState = view.getView2DState(); - ol.interaction.Interaction.rotate(map, view, view2DState.rotation, undefined, - ol.interaction.DRAGROTATE_ANIMATION_DURATION); + var view2D = view.getView2D(); + var view2DState = view2D.getView2DState(); + ol.interaction.Interaction.rotate(map, view2D, view2DState.rotation, + undefined, ol.interaction.DRAGROTATE_ANIMATION_DURATION); }; diff --git a/src/ol/interaction/interaction.js b/src/ol/interaction/interaction.js index b4b9c6f86d..2fdbf57cdf 100644 --- a/src/ol/interaction/interaction.js +++ b/src/ol/interaction/interaction.js @@ -2,8 +2,10 @@ goog.provide('ol.interaction.Interaction'); +goog.require('goog.asserts'); goog.require('goog.events.EventTarget'); goog.require('ol.MapBrowserEvent'); +goog.require('ol.View2D'); goog.require('ol.animation'); goog.require('ol.easing'); @@ -58,12 +60,13 @@ ol.interaction.Interaction.prototype.setMap = function(map) { /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {ol.Coordinate} delta Delta. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.pan = function( map, view, delta, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); var currentCenter = view.getCenter(); if (goog.isDef(currentCenter)) { if (goog.isDef(opt_duration) && opt_duration > 0) { @@ -82,13 +85,14 @@ ol.interaction.Interaction.pan = function( /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {number|undefined} rotation Rotation. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); rotation = view.constrainRotation(rotation, 0); ol.interaction.Interaction.rotateWithoutConstraints( map, view, rotation, opt_anchor, opt_duration); @@ -97,13 +101,14 @@ ol.interaction.Interaction.rotate = /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {number|undefined} rotation Rotation. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); if (goog.isDefAndNotNull(rotation)) { var currentRotation = view.getRotation(); var currentCenter = view.getCenter(); @@ -125,6 +130,7 @@ ol.interaction.Interaction.rotateWithoutConstraints = if (goog.isDefAndNotNull(opt_anchor)) { var center = view.calculateCenterRotate(rotation, opt_anchor); map.withFrozenRendering(function() { + goog.asserts.assertInstanceof(view, ol.View2D); view.setCenter(center); view.setRotation(rotation); }); @@ -137,7 +143,7 @@ ol.interaction.Interaction.rotateWithoutConstraints = /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {number|undefined} resolution Resolution to go to. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. @@ -152,6 +158,7 @@ ol.interaction.Interaction.rotateWithoutConstraints = */ ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) { + goog.asserts.assertInstanceof(view, ol.View2D); resolution = view.constrainResolution(resolution, 0, opt_direction); ol.interaction.Interaction.zoomWithoutConstraints( map, view, resolution, opt_anchor, opt_duration); @@ -160,13 +167,14 @@ ol.interaction.Interaction.zoom = /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {number} delta Delta from previous zoom level. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); var currentResolution = view.getResolution(); var resolution = view.constrainResolution(currentResolution, delta, 0); ol.interaction.Interaction.zoomWithoutConstraints( @@ -176,13 +184,14 @@ ol.interaction.Interaction.zoomByDelta = /** * @param {ol.Map} map Map. - * @param {ol.View2D} view View. + * @param {ol.IView2D} view View. * @param {number|undefined} resolution Resolution to go to. * @param {ol.Coordinate=} opt_anchor Anchor coordinate. * @param {number=} opt_duration Duration. */ ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) { + goog.asserts.assertInstanceof(view, ol.View2D); if (goog.isDefAndNotNull(resolution)) { var currentResolution = view.getResolution(); var currentCenter = view.getCenter(); @@ -204,6 +213,7 @@ ol.interaction.Interaction.zoomWithoutConstraints = if (goog.isDefAndNotNull(opt_anchor)) { var center = view.calculateCenterZoom(resolution, opt_anchor); map.withFrozenRendering(function() { + goog.asserts.assertInstanceof(view, ol.View2D); view.setCenter(center); view.setResolution(resolution); }); diff --git a/src/ol/interaction/touchpaninteraction.js b/src/ol/interaction/touchpaninteraction.js index 3f2efb7cb6..026fd6c881 100644 --- a/src/ol/interaction/touchpaninteraction.js +++ b/src/ol/interaction/touchpaninteraction.js @@ -5,6 +5,7 @@ goog.require('goog.asserts'); goog.require('ol.Kinetic'); goog.require('ol.Pixel'); goog.require('ol.PreRenderFunction'); +goog.require('ol.View2D'); goog.require('ol.coordinate'); goog.require('ol.interaction.Touch'); @@ -64,15 +65,16 @@ ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) { var deltaX = this.lastCentroid[0] - centroid[0]; var deltaY = centroid[1] - this.lastCentroid[1]; var map = mapBrowserEvent.map; - var view = map.getView().getView2D(); - var view2DState = view.getView2DState(); + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); + var view2DState = view2D.getView2DState(); var center = [deltaX, deltaY]; ol.coordinate.scale(center, view2DState.resolution); ol.coordinate.rotate(center, view2DState.rotation); ol.coordinate.add(center, view2DState.center); - center = view.constrainCenter(center); + center = view2D.constrainCenter(center); map.requestRenderFrame(); - view.setCenter(center); + view2D.setCenter(center); } this.lastCentroid = centroid; }; @@ -84,12 +86,14 @@ ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) { ol.interaction.TouchPan.prototype.handleTouchEnd = function(mapBrowserEvent) { var map = mapBrowserEvent.map; - var view = map.getView(); + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); if (this.targetTouches.length === 0) { if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) { var distance = this.kinetic_.getDistance(); var angle = this.kinetic_.getAngle(); - var center = view.getCenter(); + var center = view2D.getCenter(); + goog.asserts.assert(goog.isDef(center)); this.kineticPreRenderFn_ = this.kinetic_.pan(center); map.beforeRender(this.kineticPreRenderFn_); var centerpx = map.getPixelFromCoordinate(center); @@ -97,8 +101,8 @@ ol.interaction.TouchPan.prototype.handleTouchEnd = centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle) ]); - dest = view.constrainCenter(dest); - view.setCenter(dest); + dest = view2D.constrainCenter(dest); + view2D.setCenter(dest); } map.requestRenderFrame(); return false; @@ -116,12 +120,13 @@ ol.interaction.TouchPan.prototype.handleTouchStart = function(mapBrowserEvent) { if (this.targetTouches.length > 0) { var map = mapBrowserEvent.map; - var view = map.getView(); + var view2D = map.getView().getView2D(); + goog.asserts.assertInstanceof(view2D, ol.View2D); this.lastCentroid = null; map.requestRenderFrame(); if (!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) { - view.setCenter(mapBrowserEvent.frameState.view2DState.center); + view2D.setCenter(mapBrowserEvent.frameState.view2DState.center); this.kineticPreRenderFn_ = null; } if (this.kinetic_) { diff --git a/src/ol/iview.js b/src/ol/iview.js index 5b7663bd1d..37d828d3e2 100644 --- a/src/ol/iview.js +++ b/src/ol/iview.js @@ -25,3 +25,10 @@ ol.IView.prototype.getView2D = function() { */ ol.IView.prototype.getView3D = function() { }; + + +/** + * @return {boolean} Is defined. + */ +ol.IView.prototype.isDef = function() { +}; diff --git a/src/ol/iview2d.js b/src/ol/iview2d.js index cd3cb188f4..0969e6d696 100644 --- a/src/ol/iview2d.js +++ b/src/ol/iview2d.js @@ -59,3 +59,10 @@ ol.IView2D.prototype.getRotation = function() { */ ol.IView2D.prototype.getView2DState = function() { }; + + +/** + * @return {boolean} Is defined. + */ +ol.IView2D.prototype.isDef = function() { +}; diff --git a/src/ol/iview3d.js b/src/ol/iview3d.js index c74f9acf6b..b54f7d7e42 100644 --- a/src/ol/iview3d.js +++ b/src/ol/iview3d.js @@ -8,3 +8,10 @@ goog.provide('ol.IView3D'); */ ol.IView3D = function() { }; + + +/** + * @return {boolean} Is defined. + */ +ol.IView3D.prototype.isDef = function() { +}; diff --git a/src/ol/kinetic.js b/src/ol/kinetic.js index 7bdbf1a3d4..56833aed1b 100644 --- a/src/ol/kinetic.js +++ b/src/ol/kinetic.js @@ -13,6 +13,7 @@ goog.require('ol.animation'); * @param {number} minVelocity Minimum velocity (pixels/millisecond). * @param {number} delay Delay to consider to calculate the kinetic * initial values (milliseconds). + * @struct * @todo stability experimental */ ol.Kinetic = function(decay, minVelocity, delay) { diff --git a/src/ol/layer/imagelayer.js b/src/ol/layer/imagelayer.js index d75edf8ded..9f8d1bf4e3 100644 --- a/src/ol/layer/imagelayer.js +++ b/src/ol/layer/imagelayer.js @@ -1,7 +1,6 @@ goog.provide('ol.layer.Image'); goog.require('ol.layer.Layer'); -goog.require('ol.source.Image'); @@ -15,11 +14,3 @@ ol.layer.Image = function(options) { goog.base(this, options); }; goog.inherits(ol.layer.Image, ol.layer.Layer); - - -/** - * @return {ol.source.Image} Single image source. - */ -ol.layer.Image.prototype.getImageSource = function() { - return /** @type {ol.source.Image} */ (this.getSource()); -}; diff --git a/src/ol/layer/layerbase.js b/src/ol/layer/layerbase.js index 389f3afef7..8ddeeb3c32 100644 --- a/src/ol/layer/layerbase.js +++ b/src/ol/layer/layerbase.js @@ -84,10 +84,11 @@ ol.layer.Base.prototype.dispatchChangeEvent = function() { /** - * @return {number} Brightness. + * @return {number|undefined} Brightness. */ ol.layer.Base.prototype.getBrightness = function() { - return /** @type {number} */ (this.get(ol.layer.LayerProperty.BRIGHTNESS)); + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.BRIGHTNESS)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -96,10 +97,11 @@ goog.exportProperty( /** - * @return {number} Contrast. + * @return {number|undefined} Contrast. */ ol.layer.Base.prototype.getContrast = function() { - return /** @type {number} */ (this.get(ol.layer.LayerProperty.CONTRAST)); + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.CONTRAST)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -108,10 +110,10 @@ goog.exportProperty( /** - * @return {number} Hue. + * @return {number|undefined} Hue. */ ol.layer.Base.prototype.getHue = function() { - return /** @type {number} */ (this.get(ol.layer.LayerProperty.HUE)); + return /** @type {number|undefined} */ (this.get(ol.layer.LayerProperty.HUE)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -168,10 +170,10 @@ ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod; /** - * @return {number} MaxResolution. + * @return {number|undefined} MaxResolution. */ ol.layer.Base.prototype.getMaxResolution = function() { - return /** @type {number} */ ( + return /** @type {number|undefined} */ ( this.get(ol.layer.LayerProperty.MAX_RESOLUTION)); }; goog.exportProperty( @@ -181,10 +183,10 @@ goog.exportProperty( /** - * @return {number} MinResolution. + * @return {number|undefined} MinResolution. */ ol.layer.Base.prototype.getMinResolution = function() { - return /** @type {number} */ ( + return /** @type {number|undefined} */ ( this.get(ol.layer.LayerProperty.MIN_RESOLUTION)); }; goog.exportProperty( @@ -194,10 +196,11 @@ goog.exportProperty( /** - * @return {number} Opacity. + * @return {number|undefined} Opacity. */ ol.layer.Base.prototype.getOpacity = function() { - return /** @type {number} */ (this.get(ol.layer.LayerProperty.OPACITY)); + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.OPACITY)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -206,10 +209,11 @@ goog.exportProperty( /** - * @return {number} Saturation. + * @return {number|undefined} Saturation. */ ol.layer.Base.prototype.getSaturation = function() { - return /** @type {number} */ (this.get(ol.layer.LayerProperty.SATURATION)); + return /** @type {number|undefined} */ ( + this.get(ol.layer.LayerProperty.SATURATION)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -224,10 +228,11 @@ ol.layer.Base.prototype.getSourceState = goog.abstractMethod; /** - * @return {boolean} Visible. + * @return {boolean|undefined} Visible. */ ol.layer.Base.prototype.getVisible = function() { - return /** @type {boolean} */ (this.get(ol.layer.LayerProperty.VISIBLE)); + return /** @type {boolean|undefined} */ ( + this.get(ol.layer.LayerProperty.VISIBLE)); }; goog.exportProperty( ol.layer.Base.prototype, @@ -253,7 +258,7 @@ goog.exportProperty( * [2] https://github.com/WebKit/webkit/commit/8f4765e569 * [3] https://www.w3.org/Bugs/Public/show_bug.cgi?id=15647 * - * @param {number} brightness Brightness. + * @param {number|undefined} brightness Brightness. */ ol.layer.Base.prototype.setBrightness = function(brightness) { this.set(ol.layer.LayerProperty.BRIGHTNESS, brightness); @@ -269,7 +274,7 @@ goog.exportProperty( * grey. A value of 1 will leave the contrast unchanged. Other values are * linear multipliers on the effect (and values over 1 are permitted). * - * @param {number} contrast Contrast. + * @param {number|undefined} contrast Contrast. */ ol.layer.Base.prototype.setContrast = function(contrast) { this.set(ol.layer.LayerProperty.CONTRAST, contrast); @@ -283,7 +288,7 @@ goog.exportProperty( /** * Apply a hue-rotation to the layer. A value of 0 will leave the hue * unchanged. Other values are radians around the color circle. - * @param {number} hue Hue. + * @param {number|undefined} hue Hue. */ ol.layer.Base.prototype.setHue = function(hue) { this.set(ol.layer.LayerProperty.HUE, hue); @@ -295,7 +300,7 @@ goog.exportProperty( /** - * @param {number} maxResolution MaxResolution. + * @param {number|undefined} maxResolution MaxResolution. */ ol.layer.Base.prototype.setMaxResolution = function(maxResolution) { this.set(ol.layer.LayerProperty.MAX_RESOLUTION, maxResolution); @@ -307,7 +312,7 @@ goog.exportProperty( /** - * @param {number} minResolution MinResolution. + * @param {number|undefined} minResolution MinResolution. */ ol.layer.Base.prototype.setMinResolution = function(minResolution) { this.set(ol.layer.LayerProperty.MIN_RESOLUTION, minResolution); @@ -319,7 +324,7 @@ goog.exportProperty( /** - * @param {number} opacity Opacity. + * @param {number|undefined} opacity Opacity. */ ol.layer.Base.prototype.setOpacity = function(opacity) { this.set(ol.layer.LayerProperty.OPACITY, opacity); @@ -336,7 +341,7 @@ goog.exportProperty( * values are linear multipliers of the effect (and values over 1 are * permitted). * - * @param {number} saturation Saturation. + * @param {number|undefined} saturation Saturation. */ ol.layer.Base.prototype.setSaturation = function(saturation) { this.set(ol.layer.LayerProperty.SATURATION, saturation); @@ -348,7 +353,7 @@ goog.exportProperty( /** - * @param {boolean} visible Visible. + * @param {boolean|undefined} visible Visible. */ ol.layer.Base.prototype.setVisible = function(visible) { this.set(ol.layer.LayerProperty.VISIBLE, visible); diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index 4e00e74c5d..89fb0b5256 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -142,11 +142,11 @@ ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) { /** - * @return {ol.Collection} Collection of layers. + * @return {ol.Collection|undefined} Collection of layers. * @todo stability experimental */ ol.layer.Group.prototype.getLayers = function() { - return /** @type {ol.Collection} */ (this.get( + return /** @type {ol.Collection|undefined} */ (this.get( ol.layer.GroupProperty.LAYERS)); }; goog.exportProperty( @@ -156,7 +156,7 @@ goog.exportProperty( /** - * @param {ol.Collection} layers Collection of layers. + * @param {ol.Collection|undefined} layers Collection of layers. * @todo stability experimental */ ol.layer.Group.prototype.setLayers = function(layers) { diff --git a/src/ol/layer/tilelayer.js b/src/ol/layer/tilelayer.js index f8ba630d95..bb5c62e4cb 100644 --- a/src/ol/layer/tilelayer.js +++ b/src/ol/layer/tilelayer.js @@ -1,7 +1,6 @@ goog.provide('ol.layer.Tile'); goog.require('ol.layer.Layer'); -goog.require('ol.source.Tile'); /** @@ -44,14 +43,6 @@ goog.exportProperty( ol.layer.Tile.prototype.getPreload); -/** - * @return {ol.source.Tile} Source. - */ -ol.layer.Tile.prototype.getTileSource = function() { - return /** @type {ol.source.Tile} */ (this.getSource()); -}; - - /** * @param {number} preload Preload. * @todo stability experimental diff --git a/src/ol/map.js b/src/ol/map.js index 7caf96bcc0..a455b20d05 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -621,11 +621,16 @@ goog.exportProperty( /** * Get the collection of layers associated with this map. - * @return {ol.Collection} Layers. + * @return {ol.Collection|undefined} Layers. * @todo stability experimental */ ol.Map.prototype.getLayers = function() { - return this.getLayerGroup().getLayers(); + var layerGroup = this.getLayerGroup(); + if (goog.isDef(layerGroup)) { + return layerGroup.getLayers(); + } else { + return undefined; + } }; @@ -661,7 +666,7 @@ goog.exportProperty( /** * Get the view associated with this map. This can be a 2D or 3D view. A 2D * view manages properties such as center and resolution. - * @return {ol.View} View. + * @return {ol.View|undefined} View. * @todo stability experimental */ ol.Map.prototype.getView = function() { diff --git a/src/ol/proj/proj.js b/src/ol/proj/proj.js index 1a686a9282..bcb3f31e2d 100644 --- a/src/ol/proj/proj.js +++ b/src/ol/proj/proj.js @@ -59,6 +59,7 @@ ol.METERS_PER_UNIT[ol.proj.Units.METERS] = 1; /** * @constructor * @param {olx.ProjectionOptions} options Projection options. + * @struct * @todo stability experimental */ ol.proj.Projection = function(options) { @@ -200,6 +201,7 @@ ol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) { * @param {Proj4js.Proj} proj4jsProj Proj4js projection. * @param {olx.Proj4jsProjectionOptions} options Proj4js projection options. * @private + * @struct */ ol.Proj4jsProjection_ = function(proj4jsProj, options) { diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 7f5f477058..da01e396aa 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -1,5 +1,6 @@ goog.provide('ol.renderer.canvas.ImageLayer'); +goog.require('goog.asserts'); goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('goog.vec.Mat4'); @@ -9,6 +10,7 @@ goog.require('ol.ViewHint'); goog.require('ol.layer.Image'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.source.Image'); @@ -47,15 +49,6 @@ ol.renderer.canvas.ImageLayer.prototype.getImage = function() { }; -/** - * @protected - * @return {ol.layer.Image} Single image layer. - */ -ol.renderer.canvas.ImageLayer.prototype.getImageLayer = function() { - return /** @type {ol.layer.Image} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -76,8 +69,10 @@ ol.renderer.canvas.ImageLayer.prototype.renderFrame = var viewRotation = view2DState.rotation; var image; - var imageLayer = this.getImageLayer(); - var imageSource = imageLayer.getImageSource(); + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); var hints = frameState.viewHints; diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 9a20c3bedd..1df4741065 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -13,6 +13,7 @@ goog.require('ol.layer.Tile'); goog.require('ol.layer.Vector'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.ImageLayer'); +goog.require('ol.renderer.canvas.Layer'); goog.require('ol.renderer.canvas.TileLayer'); goog.require('ol.renderer.canvas.VectorLayer'); goog.require('ol.source.State'); @@ -114,8 +115,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { for (i = 0, ii = layersArray.length; i < ii; ++i) { layer = layersArray[i]; - layerRenderer = - /** @type {ol.renderer.canvas.Layer} */ (this.getLayerRenderer(layer)); + layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); layerState = layerStates[goog.getUid(layer)]; if (!layerState.visible || layerState.sourceState != ol.source.State.READY || diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index d445fbba87..3b7dbc7ba0 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -18,6 +18,7 @@ goog.require('ol.extent'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); +goog.require('ol.source.Tile'); @@ -85,15 +86,6 @@ ol.renderer.canvas.TileLayer.prototype.getImage = function() { }; -/** - * @protected - * @return {ol.layer.Tile} Tile layer. - */ -ol.renderer.canvas.TileLayer.prototype.getTileLayer = function() { - return /** @type {ol.layer.Tile} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -174,8 +166,10 @@ ol.renderer.canvas.TileLayer.prototype.renderFrame = var view2DState = frameState.view2DState; var projection = view2DState.projection; - var tileLayer = this.getTileLayer(); - var tileSource = tileLayer.getTileSource(); + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGrid(); if (goog.isNull(tileGrid)) { tileGrid = ol.tilegrid.getForProjection(projection); diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index 8c8a3fa7c9..7d6be8b57a 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -1,5 +1,6 @@ goog.provide('ol.renderer.dom.ImageLayer'); +goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.events'); @@ -11,6 +12,7 @@ goog.require('ol.ViewHint'); goog.require('ol.dom'); goog.require('ol.layer.Image'); goog.require('ol.renderer.dom.Layer'); +goog.require('ol.source.Image'); @@ -35,7 +37,7 @@ ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) { /** * @private - * @type {goog.vec.Mat4.AnyType} + * @type {goog.vec.Mat4.Number} */ this.transform_ = goog.vec.Mat4.createNumberIdentity(); @@ -43,15 +45,6 @@ ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) { goog.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer); -/** - * @protected - * @return {ol.layer.Image} Image layer. - */ -ol.renderer.dom.ImageLayer.prototype.getImageLayer = function() { - return /** @type {ol.layer.Image} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -64,8 +57,10 @@ ol.renderer.dom.ImageLayer.prototype.renderFrame = var viewRotation = view2DState.rotation; var image = this.image_; - var imageLayer = this.getImageLayer(); - var imageSource = imageLayer.getImageSource(); + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); var hints = frameState.viewHints; @@ -123,7 +118,7 @@ ol.renderer.dom.ImageLayer.prototype.renderFrame = /** - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. * @private */ ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) { diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index f05b9326de..2e135d5192 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -9,6 +9,7 @@ goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.dom.ImageLayer'); +goog.require('ol.renderer.dom.Layer'); goog.require('ol.renderer.dom.TileLayer'); goog.require('ol.source.State'); @@ -93,8 +94,8 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { var layerKey; for (layerKey in this.getLayerRenderers()) { if (!(layerKey in layerStates)) { - layerRenderer = /** @type {ol.renderer.dom.Layer} */ - (this.getLayerRendererByKey(layerKey)); + layerRenderer = this.getLayerRendererByKey(layerKey); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); goog.dom.removeNode(layerRenderer.getTarget()); } } diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 467efe6200..58936b2248 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -20,6 +20,7 @@ goog.require('ol.dom'); goog.require('ol.extent'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.dom.Layer'); +goog.require('ol.source.Tile'); goog.require('ol.tilegrid.TileGrid'); @@ -65,15 +66,6 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) { goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer); -/** - * @protected - * @return {ol.layer.Tile} Tile layer. - */ -ol.renderer.dom.TileLayer.prototype.getTileLayer = function() { - return /** @type {ol.layer.Tile} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -91,8 +83,10 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = var view2DState = frameState.view2DState; var projection = view2DState.projection; - var tileLayer = this.getTileLayer(); - var tileSource = tileLayer.getTileSource(); + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGrid(); if (goog.isNull(tileGrid)) { tileGrid = ol.tilegrid.getForProjection(projection); @@ -312,7 +306,7 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) { /** * @private - * @type {goog.vec.Mat4.AnyType} + * @type {goog.vec.Mat4.Number} */ this.transform_ = goog.vec.Mat4.createNumberIdentity(); @@ -421,7 +415,7 @@ ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = /** - * @param {goog.vec.Mat4.AnyType} transform Transform. + * @param {goog.vec.Mat4.Number} transform Transform. */ ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) { if (!goog.vec.Mat4.equals(transform, this.transform_)) { diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index a5cdc483d6..bd7ecd8e07 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -20,6 +20,8 @@ goog.require('ol.source.Tile'); * @extends {goog.Disposable} * @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.layer.Layer} layer Layer. + * @suppress {checkStructDictInheritance} + * @struct */ ol.renderer.Layer = function(mapRenderer, layer) { diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index f02a33f6fd..7d9e75fc20 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -18,6 +18,8 @@ goog.require('ol.renderer.Layer'); * @extends {goog.Disposable} * @param {Element} container Container. * @param {ol.Map} map Map. + * @suppress {checkStructDictInheritance} + * @struct */ ol.renderer.Map = function(container, map) { diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index 0249e1c336..58cdddc483 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -12,6 +12,7 @@ goog.require('ol.ImageState'); goog.require('ol.ViewHint'); goog.require('ol.layer.Image'); goog.require('ol.renderer.webgl.Layer'); +goog.require('ol.source.Image'); @@ -71,15 +72,6 @@ ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) { }; -/** - * @protected - * @return {ol.layer.Image} Tile layer. - */ -ol.renderer.webgl.ImageLayer.prototype.getImageLayer = function() { - return /** @type {ol.layer.Image} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -95,8 +87,10 @@ ol.renderer.webgl.ImageLayer.prototype.renderFrame = var image = this.image_; var texture = this.texture; - var imageLayer = this.getImageLayer(); - var imageSource = imageLayer.getImageSource(); + var imageLayer = this.getLayer(); + goog.asserts.assertInstanceof(imageLayer, ol.layer.Image); + var imageSource = imageLayer.getSource(); + goog.asserts.assertInstanceof(imageSource, ol.source.Image); var hints = frameState.viewHints; diff --git a/src/ol/renderer/webgl/webglmapcolorshader.js b/src/ol/renderer/webgl/webglmapcolorshader.js index 44bc6f212e..eeff8162d2 100644 --- a/src/ol/renderer/webgl/webglmapcolorshader.js +++ b/src/ol/renderer/webgl/webglmapcolorshader.js @@ -8,6 +8,7 @@ goog.require('ol.webgl.shader'); /** * @constructor * @extends {ol.webgl.shader.Fragment} + * @struct */ ol.renderer.webgl.map.shader.ColorFragment = function() { goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE); @@ -43,6 +44,7 @@ ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? /** * @constructor * @extends {ol.webgl.shader.Vertex} + * @struct */ ol.renderer.webgl.map.shader.ColorVertex = function() { goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE); @@ -79,6 +81,7 @@ ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. + * @struct */ ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) { diff --git a/src/ol/renderer/webgl/webglmapdefaultshader.js b/src/ol/renderer/webgl/webglmapdefaultshader.js index 8cf05e438f..47aff44a22 100644 --- a/src/ol/renderer/webgl/webglmapdefaultshader.js +++ b/src/ol/renderer/webgl/webglmapdefaultshader.js @@ -8,6 +8,7 @@ goog.require('ol.webgl.shader'); /** * @constructor * @extends {ol.webgl.shader.Fragment} + * @struct */ ol.renderer.webgl.map.shader.DefaultFragment = function() { goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE); @@ -43,6 +44,7 @@ ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? /** * @constructor * @extends {ol.webgl.shader.Vertex} + * @struct */ ol.renderer.webgl.map.shader.DefaultVertex = function() { goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE); @@ -79,6 +81,7 @@ ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. + * @struct */ ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) { diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 1dc503ef90..a99699aa9c 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -20,6 +20,7 @@ goog.require('ol.layer.Image'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.webgl.ImageLayer'); +goog.require('ol.renderer.webgl.Layer'); goog.require('ol.renderer.webgl.TileLayer'); goog.require('ol.renderer.webgl.map.shader.Color'); goog.require('ol.renderer.webgl.map.shader.Default'); @@ -520,6 +521,7 @@ ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) { this.textureCache_.clear(); this.textureCacheFrameMarkerCount_ = 0; goog.object.forEach(this.getLayerRenderers(), function(layerRenderer) { + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); layerRenderer.handleWebGLContextLost(); }); }; @@ -596,6 +598,7 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { for (i = 0, ii = layersArray.length; i < ii; ++i) { layer = layersArray[i]; layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); layerState = frameState.layerStates[goog.getUid(layer)]; if (layerState.visible && layerState.sourceState == ol.source.State.READY && @@ -682,6 +685,7 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { } layerRenderer = this.getLayerRenderer(layer); + goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); gl.uniformMatrix4fv( locations.u_texCoordMatrix, false, layerRenderer.getTexCoordMatrix()); gl.uniformMatrix4fv(locations.u_projectionMatrix, false, diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 31a25952fb..64f836c862 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -4,6 +4,7 @@ goog.provide('ol.renderer.webgl.TileLayer'); goog.require('goog.array'); +goog.require('goog.asserts'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); goog.require('goog.vec.Vec4'); @@ -16,6 +17,7 @@ goog.require('ol.layer.Tile'); goog.require('ol.math'); goog.require('ol.renderer.webgl.Layer'); goog.require('ol.renderer.webgl.tilelayer.shader'); +goog.require('ol.source.Tile'); goog.require('ol.structs.Buffer'); @@ -92,15 +94,6 @@ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() { }; -/** - * @protected - * @return {ol.layer.Tile} Tile layer. - */ -ol.renderer.webgl.TileLayer.prototype.getTileLayer = function() { - return /** @type {ol.layer.Tile} */ (this.getLayer()); -}; - - /** * @inheritDoc */ @@ -122,8 +115,10 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var view2DState = frameState.view2DState; var projection = view2DState.projection; - var tileLayer = this.getTileLayer(); - var tileSource = tileLayer.getTileSource(); + var tileLayer = this.getLayer(); + goog.asserts.assertInstanceof(tileLayer, ol.layer.Tile); + var tileSource = tileLayer.getSource(); + goog.asserts.assertInstanceof(tileSource, ol.source.Tile); var tileGrid = tileSource.getTileGrid(); if (goog.isNull(tileGrid)) { tileGrid = ol.tilegrid.getForProjection(projection); diff --git a/src/ol/renderer/webgl/webgltilelayershader.js b/src/ol/renderer/webgl/webgltilelayershader.js index 8d8169042c..6cbb58103b 100644 --- a/src/ol/renderer/webgl/webgltilelayershader.js +++ b/src/ol/renderer/webgl/webgltilelayershader.js @@ -8,6 +8,7 @@ goog.require('ol.webgl.shader'); /** * @constructor * @extends {ol.webgl.shader.Fragment} + * @struct */ ol.renderer.webgl.tilelayer.shader.Fragment = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE); @@ -43,6 +44,7 @@ ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? /** * @constructor * @extends {ol.webgl.shader.Vertex} + * @struct */ ol.renderer.webgl.tilelayer.shader.Vertex = function() { goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE); @@ -79,6 +81,7 @@ ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. + * @struct */ ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) { diff --git a/src/ol/source/imagewmssource.js b/src/ol/source/imagewmssource.js index 6f7d6ddd2a..dcc3596e8d 100644 --- a/src/ol/source/imagewmssource.js +++ b/src/ol/source/imagewmssource.js @@ -109,7 +109,9 @@ ol.source.ImageWMS.prototype.getFeatureInfoForPixel = var size = map.getSize(); goog.asserts.assert(goog.isDefAndNotNull(size)); var extent = view.calculateExtent(size); - var url = this.imageUrlFunction(extent, size, view.getProjection()); + var projection = view.getProjection(); + goog.asserts.assert(goog.isDef(projection)); + var url = this.imageUrlFunction(extent, size, projection); goog.asserts.assert(goog.isDef(url), 'ol.source.ImageWMS#imageUrlFunction does not return a URL'); ol.source.wms.getFeatureInfo(url, pixel, this.getFeatureInfoOptions_, success, diff --git a/src/ol/source/tilewmssource.js b/src/ol/source/tilewmssource.js index 7f5e849cbb..67cb7467f5 100644 --- a/src/ol/source/tilewmssource.js +++ b/src/ol/source/tilewmssource.js @@ -157,11 +157,13 @@ ol.source.TileWMS.prototype.getFeatureInfoForPixel = function(pixel, map, success, opt_error) { var coord = map.getCoordinateFromPixel(pixel), view2D = map.getView().getView2D(), - projection = view2D.getProjection(), - tileGrid = goog.isNull(this.tileGrid) ? - ol.tilegrid.getForProjection(projection) : this.tileGrid, - tileCoord = tileGrid.getTileCoordForCoordAndResolution(coord, - view2D.getResolution()), + projection = view2D.getProjection(); + goog.asserts.assert(goog.isDef(projection)); + var tileGrid = goog.isNull(this.tileGrid) ? + ol.tilegrid.getForProjection(projection) : this.tileGrid; + var resolution = view2D.getResolution(); + goog.asserts.assert(goog.isDef(resolution)); + var tileCoord = tileGrid.getTileCoordForCoordAndResolution(coord, resolution), tileExtent = tileGrid.getTileCoordExtent(tileCoord), offset = map.getPixelFromCoordinate(ol.extent.getTopLeft(tileExtent)), url = this.tileUrlFunction(tileCoord, projection); diff --git a/src/ol/structs/buffer.js b/src/ol/structs/buffer.js index 1a3aad615f..b18052ffe3 100644 --- a/src/ol/structs/buffer.js +++ b/src/ol/structs/buffer.js @@ -28,6 +28,7 @@ ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG; * @param {Array.=} opt_arr Array. * @param {number=} opt_used Used. * @param {number=} opt_usage Usage. + * @struct * @todo stability experimental */ ol.structs.Buffer = function(opt_arr, opt_used, opt_usage) { diff --git a/src/ol/structs/integerset.js b/src/ol/structs/integerset.js index 17fc2ebc53..dc292443eb 100644 --- a/src/ol/structs/integerset.js +++ b/src/ol/structs/integerset.js @@ -9,6 +9,7 @@ goog.require('goog.asserts'); * This implementation is designed for the case when the number of distinct * integer ranges is small. * @constructor + * @struct * @param {Array.=} opt_arr Array. */ ol.structs.IntegerSet = function(opt_arr) { diff --git a/src/ol/structs/lrucache.js b/src/ol/structs/lrucache.js index 12e8e5d49c..3fc7a2427d 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 + * @struct * @template T */ ol.structs.LRUCache = function() { diff --git a/src/ol/structs/priorityqueue.js b/src/ol/structs/priorityqueue.js index b303d6c64c..72b4019475 100644 --- a/src/ol/structs/priorityqueue.js +++ b/src/ol/structs/priorityqueue.js @@ -17,6 +17,7 @@ goog.require('goog.object'); * @constructor * @param {function(T): number} priorityFunction Priority function. * @param {function(T): string} keyFunction Key function. + * @struct * @template T */ ol.structs.PriorityQueue = function(priorityFunction, keyFunction) { diff --git a/src/ol/structs/rbush.js b/src/ol/structs/rbush.js index 3be4c3a03b..8f45d27cb6 100644 --- a/src/ol/structs/rbush.js +++ b/src/ol/structs/rbush.js @@ -36,6 +36,7 @@ goog.require('ol.extent'); * @param {number} height Height. * @param {Array.>} children Children. * @param {?T} value Value. + * @struct * @template T */ ol.structs.RBushNode = function(extent, height, children, value) { @@ -160,6 +161,7 @@ ol.structs.RBushNode.prototype.isLeaf = function() { * @constructor * @param {number=} opt_maxEntries Max entries. * @see https://github.com/mourner/rbush + * @struct * @template T */ ol.structs.RBush = function(opt_maxEntries) { diff --git a/src/ol/tilecache.js b/src/ol/tilecache.js index baca04fb4a..643ed75ce9 100644 --- a/src/ol/tilecache.js +++ b/src/ol/tilecache.js @@ -18,6 +18,7 @@ ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048; * @constructor * @extends {ol.structs.LRUCache.} * @param {number=} opt_highWaterMark High water mark. + * @struct */ ol.TileCache = function(opt_highWaterMark) { diff --git a/src/ol/tilegrid/tilegrid.js b/src/ol/tilegrid/tilegrid.js index 08ee4e4614..36950abc08 100644 --- a/src/ol/tilegrid/tilegrid.js +++ b/src/ol/tilegrid/tilegrid.js @@ -28,6 +28,7 @@ ol.DEFAULT_MAX_ZOOM = 42; /** * @constructor * @param {olx.tilegrid.TileGridOptions} options Tile grid options. + * @struct * @todo stability experimental */ ol.tilegrid.TileGrid = function(options) { diff --git a/src/ol/tilegrid/wmtstilegrid.js b/src/ol/tilegrid/wmtstilegrid.js index 3393aced51..e91427a43a 100644 --- a/src/ol/tilegrid/wmtstilegrid.js +++ b/src/ol/tilegrid/wmtstilegrid.js @@ -11,6 +11,7 @@ goog.require('ol.tilegrid.TileGrid'); * @constructor * @extends {ol.tilegrid.TileGrid} * @param {olx.tilegrid.WMTSOptions} options WMTS options. + * @struct * @todo stability experimental */ ol.tilegrid.WMTS = function(options) { diff --git a/src/ol/tilegrid/xyztilegrid.js b/src/ol/tilegrid/xyztilegrid.js index 6325d3602b..239e282bc8 100644 --- a/src/ol/tilegrid/xyztilegrid.js +++ b/src/ol/tilegrid/xyztilegrid.js @@ -13,6 +13,7 @@ goog.require('ol.tilegrid.TileGrid'); * @constructor * @extends {ol.tilegrid.TileGrid} * @param {olx.tilegrid.XYZOptions} options XYZ options. + * @struct * @todo stability experimental */ ol.tilegrid.XYZ = function(options) { diff --git a/src/ol/tilequeue.js b/src/ol/tilequeue.js index 57d0791caa..e0426a5cb4 100644 --- a/src/ol/tilequeue.js +++ b/src/ol/tilequeue.js @@ -22,6 +22,7 @@ ol.TilePriorityFunction; * Tile priority function. * @param {function(): ?} tileChangeCallback * Function called on each tile change event. + * @struct */ ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) { diff --git a/src/ol/tilerange.js b/src/ol/tilerange.js index a53723ed53..cf09683c53 100644 --- a/src/ol/tilerange.js +++ b/src/ol/tilerange.js @@ -15,6 +15,7 @@ goog.require('ol.TileCoord'); * @param {number} maxX Maximum X. * @param {number} minY Minimum Y. * @param {number} maxY Maximum Y. + * @struct */ ol.TileRange = function(minX, maxX, minY, maxY) { diff --git a/src/ol/vec/mat4.js b/src/ol/vec/mat4.js index c6dae319a1..faba66a6f0 100644 --- a/src/ol/vec/mat4.js +++ b/src/ol/vec/mat4.js @@ -97,7 +97,7 @@ ol.vec.Mat4.makeSaturation = function(matrix, value) { * transformed vector into resultVec. The input vector is multiplied against the * upper 2x4 matrix omitting the projective component. * - * @param {goog.vec.Mat4.AnyType} mat The matrix supplying the transformation. + * @param {goog.vec.Mat4.Number} mat The matrix supplying the transformation. * @param {Array.} vec The 3 element vector to transform. * @param {Array.} resultVec The 3 element vector to receive the results * (may be vec). diff --git a/src/ol/view.js b/src/ol/view.js index 9d727e3b4d..ffee86ba59 100644 --- a/src/ol/view.js +++ b/src/ol/view.js @@ -47,13 +47,31 @@ ol.View.prototype.getHints = function() { /** * @inheritDoc */ -ol.View.prototype.getView2D = goog.abstractMethod; +ol.View.prototype.getView2D = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return null; +}; /** * @inheritDoc */ -ol.View.prototype.getView3D = goog.abstractMethod; +ol.View.prototype.getView3D = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return null; +}; + + +/** + * @inheritDoc + */ +ol.View.prototype.isDef = function() { + // FIXME for some reason, we can't use goog.abstractMethod here + goog.asserts.fail(); + return false; +}; /** diff --git a/src/ol/webgl/shader.js b/src/ol/webgl/shader.js index a06fd5c401..f9a2271724 100644 --- a/src/ol/webgl/shader.js +++ b/src/ol/webgl/shader.js @@ -9,6 +9,7 @@ goog.require('ol.webgl'); /** * @constructor * @param {string} source Source. + * @struct */ ol.webgl.Shader = function(source) { @@ -46,6 +47,7 @@ ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE; * @constructor * @extends {ol.webgl.Shader} * @param {string} source Source. + * @struct */ ol.webgl.shader.Fragment = function(source) { goog.base(this, source); @@ -66,6 +68,7 @@ ol.webgl.shader.Fragment.prototype.getType = function() { * @constructor * @extends {ol.webgl.Shader} * @param {string} source Source. + * @struct */ ol.webgl.shader.Vertex = function(source) { goog.base(this, source); diff --git a/src/ol/webgl/shader.mustache b/src/ol/webgl/shader.mustache index 14ecdd6947..ed62dc9718 100644 --- a/src/ol/webgl/shader.mustache +++ b/src/ol/webgl/shader.mustache @@ -8,6 +8,7 @@ goog.require('ol.webgl.shader'); /** * @constructor * @extends {ol.webgl.shader.Fragment} + * @struct */ {{className}}Fragment = function() { goog.base(this, {{className}}Fragment.SOURCE); @@ -43,6 +44,7 @@ goog.addSingletonGetter({{className}}Fragment); /** * @constructor * @extends {ol.webgl.shader.Vertex} + * @struct */ {{className}}Vertex = function() { goog.base(this, {{className}}Vertex.SOURCE); @@ -79,6 +81,7 @@ goog.addSingletonGetter({{className}}Vertex); * @constructor * @param {WebGLRenderingContext} gl GL. * @param {WebGLProgram} program Program. + * @struct */ {{namespace}}.Locations = function(gl, program) { {{#getUniforms}}