diff --git a/src/commands/revealResource.ts b/src/commands/revealResource.ts index 5e5413eb..72a47f86 100644 --- a/src/commands/revealResource.ts +++ b/src/commands/revealResource.ts @@ -9,6 +9,7 @@ import { VSCodeRevealOptions } from '../../api/src/index'; import { ext } from '../extensionVariables'; import { ResourceGroupsItem } from '../tree/ResourceGroupsItem'; import { ResourceTreeDataProviderBase } from '../tree/ResourceTreeDataProviderBase'; +import { localize } from '../utils/localize'; export async function revealResource(context: IActionContext, resourceId: string, options?: VSCodeRevealOptions): Promise { setTelemetryPropertiesForId(context, resourceId); @@ -17,6 +18,8 @@ export async function revealResource(context: IActionContext, resourceId: string const item: ResourceGroupsItem | undefined = await (ext.v2.api.resources.azureResourceTreeDataProvider as ResourceTreeDataProviderBase).findItemById(resourceId); if (item) { await ext.appResourceTreeView.reveal(item as unknown as AzExtTreeItem, options ?? { expand: false, focus: true, select: true }); + } else { + void context.ui.showWarningMessage(localize('resourceNotFound', 'Resource with id "${0}" not found.', resourceId)); } } catch (error) { context.telemetry.properties.revealError = parseError(error).message; diff --git a/src/tree/BranchDataItemCache.ts b/src/tree/BranchDataItemCache.ts index 4a90de60..4021ea6d 100644 --- a/src/tree/BranchDataItemCache.ts +++ b/src/tree/BranchDataItemCache.ts @@ -29,8 +29,7 @@ export class BranchDataItemCache { return this.branchItemToResourceGroupsItemCache.get(branchItem); } - getItemForBranchItemById(branchItem: ResourceModelBase): ResourceGroupsItem | undefined { - const id = this.getIdForBranchItem(branchItem); + getItemForBranchItemById(id: string | undefined): ResourceGroupsItem | undefined { if (!id) { return undefined; } @@ -39,7 +38,7 @@ export class BranchDataItemCache { } createOrGetItem(branchItem: ResourceModelBase, createItem: () => T): T { - const cachedItem = this.getItemForBranchItemById(branchItem) as T | undefined; + const cachedItem = this.getItemForBranchItemById(this.getIdForBranchItem(branchItem)) as T | undefined; if (cachedItem) { cachedItem.branchItem = branchItem; this.addBranchItem(branchItem, cachedItem); diff --git a/src/tree/ResourceTreeDataProviderBase.ts b/src/tree/ResourceTreeDataProviderBase.ts index f7d1c4ae..27b043a4 100644 --- a/src/tree/ResourceTreeDataProviderBase.ts +++ b/src/tree/ResourceTreeDataProviderBase.ts @@ -101,7 +101,10 @@ export abstract class ResourceTreeDataProviderBase extends vscode.Disposable imp } async findItemById(id: string): Promise { - let element: ResourceGroupsItem | undefined = undefined; + let element: ResourceGroupsItem | undefined = this.itemCache.getItemForBranchItemById(id); + if (element) { + return element; + } outerLoop: while (true) { const children: ResourceGroupsItem[] | null | undefined = await this.getChildren(element);