diff --git a/packages/isolated-extension-api/src/extension/comand-registry.ts b/packages/isolated-extension-api/src/extension/comand-registry.ts index c221939746a5d..02d1b409b1577 100644 --- a/packages/isolated-extension-api/src/extension/comand-registry.ts +++ b/packages/isolated-extension-api/src/extension/comand-registry.ts @@ -9,9 +9,9 @@ * Red Hat, Inc. - initial API and implementation */ import { CommandRegistryExt, EXTENSION_RPC_CONTEXT as Ext, CommandRegistryMain } from '../api/extension-api'; -import { Disposable } from '@theia/core/lib/common/disposable'; import { RPCProtocol } from '../api/rpc-protocol'; import * as theia from 'theia'; +import { Disposable } from './types-impl'; export type Handler = (...args: any[]) => T | PromiseLike; diff --git a/packages/isolated-extension-api/src/extension/extension-context.ts b/packages/isolated-extension-api/src/extension/extension-context.ts index e04044e02fc9e..50785ae12ce45 100644 --- a/packages/isolated-extension-api/src/extension/extension-context.ts +++ b/packages/isolated-extension-api/src/extension/extension-context.ts @@ -9,10 +9,10 @@ * Red Hat, Inc. - initial API and implementation */ import { MAIN_RPC_CONTEXT } from '../api/extension-api'; -import { Disposable } from '@theia/core/lib/common/disposable'; import { RPCProtocol } from '../api/rpc-protocol'; import * as theia from 'theia'; import { CommandRegistryImpl } from './comand-registry'; +import { Disposable } from './types-impl'; export function createAPI(rpc: RPCProtocol): typeof theia { const commandRegistryExt = rpc.set(MAIN_RPC_CONTEXT.COMMAND_REGISTRY_EXT, new CommandRegistryImpl(rpc)); @@ -23,7 +23,8 @@ export function createAPI(rpc: RPCProtocol): typeof theia { } }; return { - commands + commands, + Disposable: Disposable }; } diff --git a/packages/isolated-extension-api/src/extension/types-impl.ts b/packages/isolated-extension-api/src/extension/types-impl.ts new file mode 100644 index 0000000000000..0b5bc854716b4 --- /dev/null +++ b/packages/isolated-extension-api/src/extension/types-impl.ts @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ + +export class Disposable { + private disposable: undefined | (() => void); + + constructor(func: () => void) { + this.disposable = func; + } + /** + * Dispose this object. + */ + dispose(): void { + if (this.disposable) { + this.disposable(); + this.disposable = undefined; + } + } + + static create(func: () => void): Disposable { + return new Disposable(func); + } +} diff --git a/packages/isolated-extension-api/src/theia.d.ts b/packages/isolated-extension-api/src/theia.d.ts index 06725d37083dd..f2b9510c66027 100644 --- a/packages/isolated-extension-api/src/theia.d.ts +++ b/packages/isolated-extension-api/src/theia.d.ts @@ -8,9 +8,21 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -//import { Disposable } from '@theia/core/lib/common/disposable'; declare module 'theia' { + + export class Disposable { + + constructor(func: () => void); + /** + * Dispose this object. + */ + dispose(): void; + + static create(func: () => void): Disposable; + + } + /** * A command is a unique identifier of a function * which can be executed by a user via a keyboard shortcut,