// Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Copyright 2005 Google Inc. All Rights Reserved. /** * @fileoverview Implements the disposable interface. The dispose method is used * to clean up references and resources. */ goog.provide('goog.Disposable'); goog.provide('goog.dispose'); /** * Class that provides the basic implementation for disposable objects. If your * class holds one or more references to COM objects, DOM nodes, or other * disposable objects, it should extend this class or implement the disposable * interface. * @constructor */ goog.Disposable = function() {}; /** * Whether the object has been disposed of. * @type {boolean} * @private */ goog.Disposable.prototype.disposed_ = false; /** * @return {boolean} Whether the object has been disposed of. */ goog.Disposable.prototype.isDisposed = function() { return this.disposed_; }; /** * @return {boolean} Whether the object has been disposed of. * @deprecated Use {@link #isDisposed} instead. */ goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed; /** * Disposes of the object. If the object hasn't already been disposed of, calls * {@link #disposeInternal}. Classes that extend {@code goog.Disposable} should * override {@link #disposeInternal} in order to delete references to COM * objects, DOM nodes, and other disposable objects. */ goog.Disposable.prototype.dispose = function() { if (!this.disposed_) { // Set disposed_ to true first, in case during the chain of disposal this // gets disposed recursively. this.disposed_ = true; this.disposeInternal(); } }; /** * Deletes or nulls out any references to COM objects, DOM nodes, or other * disposable objects. Classes that extend {@code goog.Disposable} should * override this method. For example: * <pre> * mypackage.MyClass = function() { * goog.Disposable.call(this); * // Constructor logic specific to MyClass. * ... * }; * goog.inherits(mypackage.MyClass, goog.Disposable); * * mypackage.MyClass.prototype.disposeInternal = function() { * mypackage.MyClass.superClass_.disposeInternal.call(this); * // Dispose logic specific to MyClass. * ... * }; * </pre> * @protected */ goog.Disposable.prototype.disposeInternal = function() { // No-op in the base class. }; /** * Calls {@code dispose} on the argument if it supports it. If obj is not an * object with a dispose() method, this is a no-op. * @param {*} obj The object to dispose of. */ goog.dispose = function(obj) { if (obj && typeof obj.dispose == 'function') { obj.dispose(); } };