diff --git a/examples/api-samples/src/browser/contribution-filter/sample-filtered-command-contribution.ts b/examples/api-samples/src/browser/contribution-filter/sample-filtered-command-contribution.ts index e0c83ffed64de..f97be1c9c9dfc 100644 --- a/examples/api-samples/src/browser/contribution-filter/sample-filtered-command-contribution.ts +++ b/examples/api-samples/src/browser/contribution-filter/sample-filtered-command-contribution.ts @@ -14,7 +14,7 @@ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 // ***************************************************************************** -import { Command, CommandContribution, CommandRegistry, FilterContribution, ContributionFilterRegistry, bindContribution, Filter } from '@theia/core/lib/common'; +import { Command, CommandContribution, CommandRegistry, ContributionFilterRegistry, FilterContribution, bindContribution } from '@theia/core/lib/common'; import { injectable, interfaces } from '@theia/core/shared/inversify'; export namespace SampleFilteredCommand { @@ -58,8 +58,8 @@ export class SampleFilterAndCommandContribution implements FilterContribution, C contrib => contrib.constructor !== this.constructor ]); registry.addFilters('*', [ - // filter a contribution based on its class name - filterClassName(name => name !== 'SampleFilteredCommandContribution') + // filter a contribution based on its class type + contrib => !(contrib instanceof SampleFilteredCommandContribution) ]); } } @@ -69,12 +69,3 @@ export function bindSampleFilteredCommandContribution(bind: interfaces.Bind): vo bind(SampleFilterAndCommandContribution).toSelf().inSingletonScope(); bindContribution(bind, SampleFilterAndCommandContribution, [CommandContribution, FilterContribution]); } - -function filterClassName(filter: Filter): Filter { - return object => { - const className = object?.constructor?.name; - return className - ? filter(className) - : false; - }; -} diff --git a/packages/core/src/common/contribution-filter/contribution-filter.ts b/packages/core/src/common/contribution-filter/contribution-filter.ts index cf754310471e4..baa9c0d743986 100644 --- a/packages/core/src/common/contribution-filter/contribution-filter.ts +++ b/packages/core/src/common/contribution-filter/contribution-filter.ts @@ -50,6 +50,15 @@ export const FilterContribution = Symbol('FilterContribution'); export interface FilterContribution { /** * Use the registry to register your contribution filters. + * * Note that filtering contributions based on their class (constructor) name is discouraged. + * Class names are minified in production builds and therefore not reliable. + * Use instance of checks or direct constructor comparison instead: + * + * ```ts + * registry.addFilters('*', [ + * contrib => !(contrib instanceof SampleFilteredCommandContribution) + * ]); + * ``` */ registerContributionFilters(registry: ContributionFilterRegistry): void; }