/**
     * Release resources associated with this CircuitElement, called when it will no longer be used.
     * @public
     */
    dispose() {
      assert && assert( !this.circuitElementDisposed, 'circuit element was already disposed' );
      this.circuitElementDisposed = true;

      // Notify about intent to dispose first because dispose listeners may need to access state
      this.disposeEmitterCircuitElement.emit();
      this.disposeEmitterCircuitElement.dispose();

      this.startVertexProperty.unlink( this.linkVertexListener );
      this.endVertexProperty.unlink( this.linkVertexListener );

      this.startPositionProperty.hasListener( this.vertexMovedListener ) && this.startPositionProperty.unlink( this.vertexMovedListener );
      this.endPositionProperty.hasListener( this.vertexMovedListener ) && this.endPositionProperty.unlink( this.vertexMovedListener );

      super.dispose();
    }
 animation.finishEmitter.addListener( function() {
   self.animatingProperty.value = false;
   positionProperty.unlink( listener );
   positionProperty.dispose();
 } );