From 1cdd040c9660836de1aef5ba6d9c1acd7b962698 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Tue, 30 Oct 2018 18:45:42 +0100 Subject: [PATCH] Throw when calling abstract methods; fix abstract return types --- src/ol/ImageBase.js | 9 +++- src/ol/format/Feature.js | 33 ++++++++++---- src/ol/format/JSONFeature.js | 29 +++++++++--- src/ol/format/TextFeature.js | 25 ++++++++--- src/ol/format/XMLFeature.js | 5 ++- src/ol/geom/Geometry.js | 41 ++++++++++++----- src/ol/geom/SimpleGeometry.js | 9 +++- src/ol/layer/Base.js | 13 ++++-- src/ol/render/ReplayGroup.js | 14 ++++-- src/ol/render/webgl/Replay.js | 26 ++++++++--- src/ol/render/webgl/TextureReplay.js | 14 +++--- src/ol/renderer/Map.js | 20 ++++++--- src/ol/renderer/canvas/IntermediateCanvas.js | 12 ++++- src/ol/renderer/canvas/Layer.js | 12 ++++- src/ol/renderer/webgl/Layer.js | 12 ++++- src/ol/source/Image.js | 7 ++- src/ol/source/Source.js | 7 ++- src/ol/source/Tile.js | 9 ++-- src/ol/style/Image.js | 46 +++++++++++++++----- src/ol/util.js | 9 ++++ src/ol/webgl/Shader.js | 5 ++- test/spec/ol/render/webgl/index.test.js | 1 + 22 files changed, 273 insertions(+), 85 deletions(-) diff --git a/src/ol/ImageBase.js b/src/ol/ImageBase.js index f512a0924f..2ec8c6393b 100644 --- a/src/ol/ImageBase.js +++ b/src/ol/ImageBase.js @@ -1,6 +1,7 @@ /** * @module ol/ImageBase */ +import {abstract} from './util.js'; import EventTarget from './events/Target.js'; import EventType from './events/EventType.js'; @@ -63,7 +64,9 @@ class ImageBase extends EventTarget { * @abstract * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image. */ - getImage() {} + getImage() { + return abstract(); + } /** * @return {number} PixelRatio. @@ -90,7 +93,9 @@ class ImageBase extends EventTarget { * Load not yet loaded URI. * @abstract */ - load() {} + load() { + abstract(); + } } diff --git a/src/ol/format/Feature.js b/src/ol/format/Feature.js index 4e3c20be15..e439e887af 100644 --- a/src/ol/format/Feature.js +++ b/src/ol/format/Feature.js @@ -2,6 +2,7 @@ * @module ol/format/Feature */ import {assign} from '../obj.js'; +import {abstract} from '../util.js'; import {get as getProjection, equivalent as equivalentProjection, transformExtent} from '../proj.js'; @@ -122,7 +123,9 @@ class FeatureFormat { * @abstract * @return {import("./FormatType.js").default} Format. */ - getType() {} + getType() { + return abstract(); + } /** * Read a single feature from a source. @@ -132,7 +135,9 @@ class FeatureFormat { * @param {ReadOptions=} opt_options Read options. * @return {import("../Feature.js").FeatureLike} Feature. */ - readFeature(source, opt_options) {} + readFeature(source, opt_options) { + return abstract(); + } /** * Read all features from a source. @@ -142,7 +147,9 @@ class FeatureFormat { * @param {ReadOptions=} opt_options Read options. * @return {Array} Features. */ - readFeatures(source, opt_options) {} + readFeatures(source, opt_options) { + return abstract(); + } /** * Read a single geometry from a source. @@ -152,7 +159,9 @@ class FeatureFormat { * @param {ReadOptions=} opt_options Read options. * @return {import("../geom/Geometry.js").default} Geometry. */ - readGeometry(source, opt_options) {} + readGeometry(source, opt_options) { + return abstract(); + } /** * Read the projection from a source. @@ -161,7 +170,9 @@ class FeatureFormat { * @param {Document|Node|Object|string} source Source. * @return {import("../proj/Projection.js").default} Projection. */ - readProjection(source) {} + readProjection(source) { + return abstract(); + } /** * Encode a feature in this format. @@ -171,7 +182,9 @@ class FeatureFormat { * @param {WriteOptions=} opt_options Write options. * @return {string} Result. */ - writeFeature(feature, opt_options) {} + writeFeature(feature, opt_options) { + return abstract(); + } /** * Encode an array of features in this format. @@ -181,7 +194,9 @@ class FeatureFormat { * @param {WriteOptions=} opt_options Write options. * @return {string} Result. */ - writeFeatures(features, opt_options) {} + writeFeatures(features, opt_options) { + return abstract(); + } /** * Write a single geometry in this format. @@ -191,7 +206,9 @@ class FeatureFormat { * @param {WriteOptions=} opt_options Write options. * @return {string} Result. */ - writeGeometry(geometry, opt_options) {} + writeGeometry(geometry, opt_options) { + return abstract(); + } } export default FeatureFormat; diff --git a/src/ol/format/JSONFeature.js b/src/ol/format/JSONFeature.js index 547946da53..8677fad1d9 100644 --- a/src/ol/format/JSONFeature.js +++ b/src/ol/format/JSONFeature.js @@ -1,6 +1,7 @@ /** * @module ol/format/JSONFeature */ +import {abstract} from '../util.js'; import FeatureFormat from '../format/Feature.js'; import FormatType from '../format/FormatType.js'; @@ -59,7 +60,9 @@ class JSONFeature extends FeatureFormat { * @protected * @return {import("../Feature.js").default} Feature. */ - readFeatureFromObject(object, opt_options) {} + readFeatureFromObject(object, opt_options) { + return abstract(); + } /** * @abstract @@ -68,7 +71,9 @@ class JSONFeature extends FeatureFormat { * @protected * @return {Array} Features. */ - readFeaturesFromObject(object, opt_options) {} + readFeaturesFromObject(object, opt_options) { + return abstract(); + } /** * Read a geometry. @@ -90,7 +95,9 @@ class JSONFeature extends FeatureFormat { * @protected * @return {import("../geom/Geometry.js").default} Geometry. */ - readGeometryFromObject(object, opt_options) {} + readGeometryFromObject(object, opt_options) { + return abstract(); + } /** * Read the projection. @@ -109,7 +116,9 @@ class JSONFeature extends FeatureFormat { * @protected * @return {import("../proj/Projection.js").default} Projection. */ - readProjectionFromObject(object) {} + readProjectionFromObject(object) { + return abstract(); + } /** * Encode a feature as string. @@ -129,7 +138,9 @@ class JSONFeature extends FeatureFormat { * @param {import("./Feature.js").WriteOptions=} opt_options Write options. * @return {Object} Object. */ - writeFeatureObject(feature, opt_options) {} + writeFeatureObject(feature, opt_options) { + return abstract(); + } /** * Encode an array of features as string. @@ -149,7 +160,9 @@ class JSONFeature extends FeatureFormat { * @param {import("./Feature.js").WriteOptions=} opt_options Write options. * @return {Object} Object. */ - writeFeaturesObject(features, opt_options) {} + writeFeaturesObject(features, opt_options) { + return abstract(); + } /** * Encode a geometry as string. @@ -169,7 +182,9 @@ class JSONFeature extends FeatureFormat { * @param {import("./Feature.js").WriteOptions=} opt_options Write options. * @return {Object} Object. */ - writeGeometryObject(geometry, opt_options) {} + writeGeometryObject(geometry, opt_options) { + return abstract(); + } } diff --git a/src/ol/format/TextFeature.js b/src/ol/format/TextFeature.js index d5f9b09933..926ae832e4 100644 --- a/src/ol/format/TextFeature.js +++ b/src/ol/format/TextFeature.js @@ -1,6 +1,7 @@ /** * @module ol/format/TextFeature */ +import {abstract} from '../util.js'; import FeatureFormat from '../format/Feature.js'; import FormatType from '../format/FormatType.js'; @@ -43,7 +44,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {import("../Feature.js").default} Feature. */ - readFeatureFromText(text, opt_options) {} + readFeatureFromText(text, opt_options) { + return abstract(); + } /** * Read the features from the source. @@ -64,7 +67,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {Array} Features. */ - readFeaturesFromText(text, opt_options) {} + readFeaturesFromText(text, opt_options) { + return abstract(); + } /** * Read the geometry from the source. @@ -85,7 +90,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {import("../geom/Geometry.js").default} Geometry. */ - readGeometryFromText(text, opt_options) {} + readGeometryFromText(text, opt_options) { + return abstract(); + } /** * Read the projection from the source. @@ -126,7 +133,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {string} Text. */ - writeFeatureText(feature, opt_options) {} + writeFeatureText(feature, opt_options) { + return abstract(); + } /** * Encode an array of features as string. @@ -147,7 +156,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {string} Text. */ - writeFeaturesText(features, opt_options) {} + writeFeaturesText(features, opt_options) { + return abstract(); + } /** * Write a single geometry. @@ -168,7 +179,9 @@ class TextFeature extends FeatureFormat { * @protected * @return {string} Text. */ - writeGeometryText(geometry, opt_options) {} + writeGeometryText(geometry, opt_options) { + return abstract(); + } } diff --git a/src/ol/format/XMLFeature.js b/src/ol/format/XMLFeature.js index ba03bf0cf9..b0bed3b402 100644 --- a/src/ol/format/XMLFeature.js +++ b/src/ol/format/XMLFeature.js @@ -1,6 +1,7 @@ /** * @module ol/format/XMLFeature */ +import {abstract} from '../util.js'; import {extend} from '../array.js'; import FeatureFormat from '../format/Feature.js'; import FormatType from '../format/FormatType.js'; @@ -122,7 +123,9 @@ class XMLFeature extends FeatureFormat { * @protected * @return {Array} Features. */ - readFeaturesFromNode(node, opt_options) {} + readFeaturesFromNode(node, opt_options) { + return abstract(); + } /** * @inheritDoc diff --git a/src/ol/geom/Geometry.js b/src/ol/geom/Geometry.js index db0f44d270..846c53ff54 100644 --- a/src/ol/geom/Geometry.js +++ b/src/ol/geom/Geometry.js @@ -1,6 +1,7 @@ /** * @module ol/geom/Geometry */ +import {abstract} from '../util.js'; import BaseObject from '../Object.js'; import {createEmpty, getHeight, returnOrUpdate} from '../extent.js'; import {transform2D} from '../geom/flat/transform.js'; @@ -69,7 +70,9 @@ class Geometry extends BaseObject { * @abstract * @return {!Geometry} Clone. */ - clone() {} + clone() { + return abstract(); + } /** * @abstract @@ -79,7 +82,9 @@ class Geometry extends BaseObject { * @param {number} minSquaredDistance Minimum squared distance. * @return {number} Minimum squared distance. */ - closestPointXY(x, y, closestPoint, minSquaredDistance) {} + closestPointXY(x, y, closestPoint, minSquaredDistance) { + return abstract(); + } /** * @param {number} x X. @@ -121,7 +126,9 @@ class Geometry extends BaseObject { * @protected * @return {import("../extent.js").Extent} extent Extent. */ - computeExtent(extent) {} + computeExtent(extent) { + return abstract(); + } /** * Get the extent of the geometry. @@ -145,7 +152,9 @@ class Geometry extends BaseObject { * @param {import("../coordinate.js").Coordinate} anchor The rotation center. * @api */ - rotate(angle, anchor) {} + rotate(angle, anchor) { + abstract(); + } /** * Scale the geometry (with an optional origin). This modifies the geometry @@ -158,7 +167,9 @@ class Geometry extends BaseObject { * of the geometry extent). * @api */ - scale(sx, opt_sy, opt_anchor) {} + scale(sx, opt_sy, opt_anchor) { + abstract(); + } /** * Create a simplified version of this geometry. For linestrings, this uses @@ -182,14 +193,18 @@ class Geometry extends BaseObject { * @param {number} squaredTolerance Squared tolerance. * @return {Geometry} Simplified geometry. */ - getSimplifiedGeometry(squaredTolerance) {} + getSimplifiedGeometry(squaredTolerance) { + return abstract(); + } /** * Get the type of this geometry. * @abstract * @return {import("./GeometryType.js").default} Geometry type. */ - getType() {} + getType() { + return abstract(); + } /** * Apply a transform function to each coordinate of the geometry. @@ -199,7 +214,9 @@ class Geometry extends BaseObject { * @abstract * @param {import("../proj.js").TransformFunction} transformFn Transform. */ - applyTransform(transformFn) {} + applyTransform(transformFn) { + abstract(); + } /** * Test if the geometry and the passed extent intersect. @@ -207,7 +224,9 @@ class Geometry extends BaseObject { * @param {import("../extent.js").Extent} extent Extent. * @return {boolean} `true` if the geometry and the extent intersect. */ - intersectsExtent(extent) {} + intersectsExtent(extent) { + return abstract(); + } /** * Translate the geometry. This modifies the geometry coordinates in place. If @@ -217,7 +236,9 @@ class Geometry extends BaseObject { * @param {number} deltaY Delta Y. * @api */ - translate(deltaX, deltaY) {} + translate(deltaX, deltaY) { + abstract(); + } /** * Transform each coordinate of the geometry from one coordinate reference diff --git a/src/ol/geom/SimpleGeometry.js b/src/ol/geom/SimpleGeometry.js index 055be375b2..e9be66396e 100644 --- a/src/ol/geom/SimpleGeometry.js +++ b/src/ol/geom/SimpleGeometry.js @@ -1,6 +1,7 @@ /** * @module ol/geom/SimpleGeometry */ +import {abstract} from '../util.js'; import {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js'; import Geometry from '../geom/Geometry.js'; import GeometryLayout from '../geom/GeometryLayout.js'; @@ -52,7 +53,9 @@ class SimpleGeometry extends Geometry { * @abstract * @return {Array} Coordinates. */ - getCoordinates() {} + getCoordinates() { + return abstract(); + } /** * Return the first coordinate of the geometry. @@ -158,7 +161,9 @@ class SimpleGeometry extends Geometry { * @param {!Array} coordinates Coordinates. * @param {GeometryLayout=} opt_layout Layout. */ - setCoordinates(coordinates, opt_layout) {} + setCoordinates(coordinates, opt_layout) { + abstract(); + } /** * @param {GeometryLayout|undefined} layout Layout. diff --git a/src/ol/layer/Base.js b/src/ol/layer/Base.js index b9a4807f0a..e1199863cc 100644 --- a/src/ol/layer/Base.js +++ b/src/ol/layer/Base.js @@ -1,6 +1,7 @@ /** * @module ol/layer/Base */ +import {abstract} from '../util.js'; import BaseObject from '../Object.js'; import LayerProperty from '../layer/Property.js'; import {clamp} from '../math.js'; @@ -105,7 +106,9 @@ class BaseLayer extends BaseObject { * modified in place). * @return {Array} Array of layers. */ - getLayersArray(opt_array) {} + getLayersArray(opt_array) { + return abstract(); + } /** * @abstract @@ -113,7 +116,9 @@ class BaseLayer extends BaseObject { * states (to be modified in place). * @return {Array} List of layer states. */ - getLayerStatesArray(opt_states) {} + getLayerStatesArray(opt_states) { + return abstract(); + } /** * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it @@ -162,7 +167,9 @@ class BaseLayer extends BaseObject { * @abstract * @return {import("../source/State.js").default} Source state. */ - getSourceState() {} + getSourceState() { + return abstract(); + } /** * Return the visibility of the layer (`true` or `false`). diff --git a/src/ol/render/ReplayGroup.js b/src/ol/render/ReplayGroup.js index e6f85cf0c4..0cf176a3f5 100644 --- a/src/ol/render/ReplayGroup.js +++ b/src/ol/render/ReplayGroup.js @@ -1,6 +1,8 @@ /** * @module ol/render/ReplayGroup */ +import {abstract} from '../util.js'; + /** * Base class for replay groups. */ @@ -11,20 +13,26 @@ class ReplayGroup { * @param {import("./ReplayType.js").default} replayType Replay type. * @return {import("./VectorContext.js").default} Replay. */ - getReplay(zIndex, replayType) {} + getReplay(zIndex, replayType) { + return abstract(); + } /** * @abstract * @return {boolean} Is empty. */ - isEmpty() {} + isEmpty() { + return abstract(); + } /** * @abstract * @param {boolean} group Group with previous replay * @return {Array<*>} The resulting instruction group */ - addDeclutter(group) {} + addDeclutter(group) { + return abstract(); + } } export default ReplayGroup; diff --git a/src/ol/render/webgl/Replay.js b/src/ol/render/webgl/Replay.js index c53fd2fad3..ba850bd74a 100644 --- a/src/ol/render/webgl/Replay.js +++ b/src/ol/render/webgl/Replay.js @@ -1,7 +1,7 @@ /** * @module ol/render/webgl/Replay */ - +import {abstract} from '../../util.js'; import {getCenter} from '../../extent.js'; import VectorContext from '../VectorContext.js'; import { @@ -122,13 +122,17 @@ class WebGLReplay extends VectorContext { * @param {import("../../webgl/Context.js").default} context WebGL context. * @return {function()} Delete resources function. */ - getDeleteResourcesFunction(context) {} + getDeleteResourcesFunction(context) { + return abstract(); + } /** * @abstract * @param {import("../../webgl/Context.js").default} context Context. */ - finish(context) {} + finish(context) { + abstract(); + } /** * @abstract @@ -142,7 +146,9 @@ class WebGLReplay extends VectorContext { import("./polygonreplay/defaultshader/Locations.js").default| import("./texturereplay/defaultshader/Locations.js").default} Locations. */ - setUpProgram(gl, context, size, pixelRatio) {} + setUpProgram(gl, context, size, pixelRatio) { + return abstract(); + } /** * @abstract @@ -153,7 +159,9 @@ class WebGLReplay extends VectorContext { import("./polygonreplay/defaultshader/Locations.js").default| import("./texturereplay/defaultshader/Locations.js").default} locations Locations. */ - shutDownProgram(gl, locations) {} + shutDownProgram(gl, locations) { + abstract(); + } /** * @abstract @@ -163,7 +171,9 @@ class WebGLReplay extends VectorContext { * @param {Object} skippedFeaturesHash Ids of features to skip. * @param {boolean} hitDetection Hit detection mode. */ - drawReplay(gl, context, skippedFeaturesHash, hitDetection) {} + drawReplay(gl, context, skippedFeaturesHash, hitDetection) { + abstract(); + } /** * @abstract @@ -176,7 +186,9 @@ class WebGLReplay extends VectorContext { * @return {T|undefined} Callback result. * @template T */ - drawHitDetectionReplayOneByOne(gl, context, skippedFeaturesHash, featureCallback, opt_hitExtent) {} + drawHitDetectionReplayOneByOne(gl, context, skippedFeaturesHash, featureCallback, opt_hitExtent) { + return abstract(); + } /** * @protected diff --git a/src/ol/render/webgl/TextureReplay.js b/src/ol/render/webgl/TextureReplay.js index 102ada911d..0e1f023716 100644 --- a/src/ol/render/webgl/TextureReplay.js +++ b/src/ol/render/webgl/TextureReplay.js @@ -1,7 +1,7 @@ /** * @module ol/render/webgl/TextureReplay */ -import {getUid} from '../../util.js'; +import {abstract, getUid} from '../../util.js'; import {intersects} from '../../extent.js'; import {isEmpty} from '../../obj.js'; import {fragment, vertex} from '../webgl/texturereplay/defaultshader.js'; @@ -460,16 +460,20 @@ class WebGLTextureReplay extends WebGLReplay { * @abstract * @protected * @param {boolean=} opt_all Return hit detection textures with regular ones. - * @returns {Array} Textures. + * @return {Array} Textures. */ - getTextures(opt_all) {} + getTextures(opt_all) { + return abstract(); + } /** * @abstract * @protected - * @returns {Array} Textures. + * @return {Array} Textures. */ - getHitDetectionTextures() {} + getHitDetectionTextures() { + return abstract(); + } } diff --git a/src/ol/renderer/Map.js b/src/ol/renderer/Map.js index 63be249396..55adca952b 100644 --- a/src/ol/renderer/Map.js +++ b/src/ol/renderer/Map.js @@ -1,7 +1,7 @@ /** * @module ol/renderer/Map */ -import {getUid} from '../util.js'; +import {abstract, getUid} from '../util.js'; import Disposable from '../Disposable.js'; import {listen, unlistenByKey} from '../events.js'; import EventType from '../events/EventType.js'; @@ -11,7 +11,9 @@ import {visibleAtResolution} from '../layer/Layer.js'; import {shared as iconImageCache} from '../style/IconImageCache.js'; import {compose as composeTransform, invert as invertTransform, setFromArray as transformSetFromArray} from '../transform.js'; - +/** + * @abstract + */ class MapRenderer extends Disposable { /** @@ -51,7 +53,9 @@ class MapRenderer extends Disposable { * @param {import("../render/EventType.js").default} type Event type. * @param {import("../PluggableMap.js").FrameState} frameState Frame state. */ - dispatchRenderEvent(type, frameState) {} + dispatchRenderEvent(type, frameState) { + abstract(); + } /** * Register layer renderer constructors. @@ -179,7 +183,9 @@ class MapRenderer extends Disposable { * @return {T|undefined} Callback result. * @template S,T,U */ - forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, thisArg, layerFilter, thisArg2) {} + forEachLayerAtPixel(pixel, frameState, hitTolerance, callback, thisArg, layerFilter, thisArg2) { + return abstract(); + } /** * @param {import("../coordinate.js").Coordinate} coordinate Coordinate. @@ -290,11 +296,13 @@ class MapRenderer extends Disposable { } /** - * @abstract * Render. + * @abstract * @param {?import("../PluggableMap.js").FrameState} frameState Frame state. */ - renderFrame(frameState) {} + renderFrame(frameState) { + abstract(); + } /** * @param {import("../PluggableMap.js").FrameState} frameState Frame state. diff --git a/src/ol/renderer/canvas/IntermediateCanvas.js b/src/ol/renderer/canvas/IntermediateCanvas.js index d90687cddd..a4ca6bf514 100644 --- a/src/ol/renderer/canvas/IntermediateCanvas.js +++ b/src/ol/renderer/canvas/IntermediateCanvas.js @@ -1,12 +1,16 @@ /** * @module ol/renderer/canvas/IntermediateCanvas */ +import {abstract} from '../../util.js'; import {scale as scaleCoordinate} from '../../coordinate.js'; import {createCanvasContext2D} from '../../dom.js'; import {containsExtent, intersects} from '../../extent.js'; import CanvasLayerRenderer from '../canvas/Layer.js'; import {create as createTransform, apply as applyTransform} from '../../transform.js'; +/** + * @abstract + */ class IntermediateCanvasRenderer extends CanvasLayerRenderer { /** @@ -80,13 +84,17 @@ class IntermediateCanvasRenderer extends CanvasLayerRenderer { * @abstract * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Canvas. */ - getImage() {} + getImage() { + return abstract(); + } /** * @abstract * @return {!import("../../transform.js").Transform} Image transform. */ - getImageTransform() {} + getImageTransform() { + return abstract(); + } /** * @inheritDoc diff --git a/src/ol/renderer/canvas/Layer.js b/src/ol/renderer/canvas/Layer.js index a7005643d8..4f8b718cc8 100644 --- a/src/ol/renderer/canvas/Layer.js +++ b/src/ol/renderer/canvas/Layer.js @@ -1,6 +1,7 @@ /** * @module ol/renderer/canvas/Layer */ +import {abstract} from '../../util.js'; import {getBottomLeft, getBottomRight, getTopLeft, getTopRight} from '../../extent.js'; import {TRUE} from '../../functions.js'; import RenderEvent from '../../render/Event.js'; @@ -10,6 +11,9 @@ import CanvasImmediateRenderer from '../../render/canvas/Immediate.js'; import LayerRenderer from '../Layer.js'; import {create as createTransform, apply as applyTransform, compose as composeTransform} from '../../transform.js'; +/** + * @abstract + */ class CanvasLayerRenderer extends LayerRenderer { /** @@ -167,7 +171,9 @@ class CanvasLayerRenderer extends LayerRenderer { * @param {import("../../layer/Layer.js").State} layerState Layer state. * @param {CanvasRenderingContext2D} context Context. */ - composeFrame(frameState, layerState, context) {} + composeFrame(frameState, layerState, context) { + abstract(); + } /** * @abstract @@ -175,7 +181,9 @@ class CanvasLayerRenderer extends LayerRenderer { * @param {import("../../layer/Layer.js").State} layerState Layer state. * @return {boolean} whether composeFrame should be called. */ - prepareFrame(frameState, layerState) {} + prepareFrame(frameState, layerState) { + return abstract(); + } } export default CanvasLayerRenderer; diff --git a/src/ol/renderer/webgl/Layer.js b/src/ol/renderer/webgl/Layer.js index accfe3be1d..457d6fb79e 100644 --- a/src/ol/renderer/webgl/Layer.js +++ b/src/ol/renderer/webgl/Layer.js @@ -1,6 +1,7 @@ /** * @module ol/renderer/webgl/Layer */ +import {abstract} from '../../util.js'; import RenderEvent from '../../render/Event.js'; import RenderEventType from '../../render/EventType.js'; import WebGLImmediateRenderer from '../../render/webgl/Immediate.js'; @@ -14,6 +15,9 @@ import {ARRAY_BUFFER, FRAMEBUFFER, FLOAT, TEXTURE_2D, import WebGLBuffer from '../../webgl/Buffer.js'; import {createEmptyTexture} from '../../webgl/Context.js'; +/** + * @abstract + */ class WebGLLayerRenderer extends LayerRenderer { /** @@ -236,7 +240,9 @@ class WebGLLayerRenderer extends LayerRenderer { * @param {import("../../webgl/Context.js").default} context Context. * @return {boolean} whether composeFrame should be called. */ - prepareFrame(frameState, layerState, context) {} + prepareFrame(frameState, layerState, context) { + return abstract(); + } /** * @abstract @@ -248,7 +254,9 @@ class WebGLLayerRenderer extends LayerRenderer { * @return {T|undefined} Callback result. * @template S,T,U */ - forEachLayerAtPixel(pixel, frameState, callback, thisArg) {} + forEachLayerAtPixel(pixel, frameState, callback, thisArg) { + return abstract(); + } } diff --git a/src/ol/source/Image.js b/src/ol/source/Image.js index 2c83fd0d3c..c12e3517e9 100644 --- a/src/ol/source/Image.js +++ b/src/ol/source/Image.js @@ -1,8 +1,8 @@ /** * @module ol/source/Image */ +import {abstract} from '../util.js'; import {ENABLE_RASTER_REPROJECTION} from '../reproj/common.js'; - import ImageState from '../ImageState.js'; import {linearFindNearest} from '../array.js'; import Event from '../events/Event.js'; @@ -81,6 +81,7 @@ class ImageSourceEvent extends Event { * Abstract base class; normally only used for creating subclasses and not * instantiated in apps. * Base class for sources providing a single image. + * @abstract * @api */ class ImageSource extends Source { @@ -188,7 +189,9 @@ class ImageSource extends Source { * @return {import("../ImageBase.js").default} Single image. * @protected */ - getImageInternal(extent, resolution, pixelRatio, projection) {} + getImageInternal(extent, resolution, pixelRatio, projection) { + return abstract(); + } /** * Handle image change events. diff --git a/src/ol/source/Source.js b/src/ol/source/Source.js index e04d661261..f65cbc8fba 100644 --- a/src/ol/source/Source.js +++ b/src/ol/source/Source.js @@ -1,7 +1,7 @@ /** * @module ol/source/Source */ - +import {abstract} from '../util.js'; import BaseObject from '../Object.js'; import {get as getProjection} from '../proj.js'; import SourceState from './State.js'; @@ -44,6 +44,7 @@ import SourceState from './State.js'; * Base class for {@link module:ol/layer/Layer~Layer} sources. * * A generic `change` event is triggered when the state of the source changes. + * @abstract * @api */ class Source extends BaseObject { @@ -123,7 +124,9 @@ class Source extends BaseObject { * @abstract * @return {Array|undefined} Resolutions. */ - getResolutions() {} + getResolutions() { + return abstract(); + } /** * Get the state of the source, see {@link module:ol/source/State~State} for possible states. diff --git a/src/ol/source/Tile.js b/src/ol/source/Tile.js index 79d0e80fa1..75b1952413 100644 --- a/src/ol/source/Tile.js +++ b/src/ol/source/Tile.js @@ -1,7 +1,7 @@ /** * @module ol/source/Tile */ - +import {abstract} from '../util.js'; import TileCache from '../TileCache.js'; import TileState from '../TileState.js'; import Event from '../events/Event.js'; @@ -31,6 +31,7 @@ import {wrapX, getForProjection as getTileGridForProjection} from '../tilegrid.j * Abstract base class; normally only used for creating subclasses and not * instantiated in apps. * Base class for sources providing images divided into a tile grid. + * @abstract * @api */ class TileSource extends Source { @@ -199,7 +200,9 @@ class TileSource extends Source { * @param {import("../proj/Projection.js").default} projection Projection. * @return {!import("../Tile.js").default} Tile. */ - getTile(z, x, y, pixelRatio, projection) {} + getTile(z, x, y, pixelRatio, projection) { + return abstract(); + } /** * Return the tile grid of the tile source. @@ -292,8 +295,8 @@ class TileSource extends Source { } /** - * @abstract * Marks a tile coord as being used, without triggering a load. + * @abstract * @param {number} z Tile coordinate z. * @param {number} x Tile coordinate x. * @param {number} y Tile coordinate y. diff --git a/src/ol/style/Image.js b/src/ol/style/Image.js index acbcb76514..cd962418f3 100644 --- a/src/ol/style/Image.js +++ b/src/ol/style/Image.js @@ -1,6 +1,7 @@ /** * @module ol/style/Image */ +import {abstract} from '../util.js'; /** @@ -17,6 +18,7 @@ * A base class used for creating subclasses and not instantiated in * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and * {@link module:ol/style/RegularShape~RegularShape}. + * @abstract * @api */ class ImageStyle { @@ -117,7 +119,9 @@ class ImageStyle { * @abstract * @return {Array} Anchor. */ - getAnchor() {} + getAnchor() { + return abstract(); + } /** * Get the image element for the symbolizer. @@ -125,46 +129,60 @@ class ImageStyle { * @param {number} pixelRatio Pixel ratio. * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element. */ - getImage(pixelRatio) {} + getImage(pixelRatio) { + return abstract(); + } /** * @abstract * @param {number} pixelRatio Pixel ratio. * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element. */ - getHitDetectionImage(pixelRatio) {} + getHitDetectionImage(pixelRatio) { + return abstract(); + } /** * @abstract * @return {import("../ImageState.js").default} Image state. */ - getImageState() {} + getImageState() { + return abstract(); + } /** * @abstract * @return {import("../size.js").Size} Image size. */ - getImageSize() {} + getImageSize() { + return abstract(); + } /** * @abstract * @return {import("../size.js").Size} Size of the hit-detection image. */ - getHitDetectionImageSize() {} + getHitDetectionImageSize() { + return abstract(); + } /** * Get the origin of the symbolizer. * @abstract * @return {Array} Origin. */ - getOrigin() {} + getOrigin() { + return abstract(); + } /** * Get the size of the symbolizer (in pixels). * @abstract * @return {import("../size.js").Size} Size. */ - getSize() {} + getSize() { + return abstract(); + } /** * Set the opacity. @@ -220,13 +238,17 @@ class ImageStyle { * @return {import("../events.js").EventsKey|undefined} Listener key. * @template T */ - listenImageChange(listener, thisArg) {} + listenImageChange(listener, thisArg) { + return abstract(); + } /** * Load not yet loaded URI. * @abstract */ - load() {} + load() { + abstract(); + } /** * @abstract @@ -234,7 +256,9 @@ class ImageStyle { * @param {T} thisArg Value to use as `this` when executing `listener`. * @template T */ - unlistenImageChange(listener, thisArg) {} + unlistenImageChange(listener, thisArg) { + abstract(); + } } export default ImageStyle; diff --git a/src/ol/util.js b/src/ol/util.js index 7b580fd926..855c4ab808 100644 --- a/src/ol/util.js +++ b/src/ol/util.js @@ -2,6 +2,15 @@ * @module ol/util */ +/** + * @return {?} Any return. + */ +export function abstract() { + return /** @type {?} */ ((function() { + throw new Error('Unimplemented abstract method.'); + })()); +} + /** * Inherit the prototype methods from one constructor into another. * diff --git a/src/ol/webgl/Shader.js b/src/ol/webgl/Shader.js index bf1fd81e4e..ed9e0f0566 100644 --- a/src/ol/webgl/Shader.js +++ b/src/ol/webgl/Shader.js @@ -1,6 +1,7 @@ /** * @module ol/webgl/Shader */ +import {abstract} from '../util.js'; /** * @abstract @@ -31,7 +32,9 @@ class WebGLShader { * @abstract * @return {number} Type. */ - getType() {} + getType() { + return abstract(); + } /** * @return {string} Source. diff --git a/test/spec/ol/render/webgl/index.test.js b/test/spec/ol/render/webgl/index.test.js index 683b51e522..9aa651e165 100644 --- a/test/spec/ol/render/webgl/index.test.js +++ b/test/spec/ol/render/webgl/index.test.js @@ -4,6 +4,7 @@ describe('ol.render.Replay', function() { let replay; beforeEach(function() { replay = new WebGLReplay(5, [-180, -90, 180, 90]); + replay.drawReplay = replay.shutDownProgram = function() {}; });