1
>
/*---------------------------------------------------------------------------------------------
markerService.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { isFalsyOrEmpty, isNonEmptyArray } from '../../../base/common/arrays.js';
7
>
import { MicrotaskEmitter } from '../../../base/common/event.js';
8
>
import { Iterable } from '../../../base/common/iterator.js';
9
>
import { IDisposable, toDisposable } from '../../../base/common/lifecycle.js';
10
>
import { ResourceMap, ResourceSet } from '../../../base/common/map.js';
11
>
import { Schemas } from '../../../base/common/network.js';
12
>
import { URI } from '../../../base/common/uri.js';
13
>
import { localize } from '../../../nls.js';
14
>
import { IMarker, IMarkerData, IMarkerReadOptions, IMarkerService, IResourceMarker, MarkerSeverity, MarkerStatistics } from './markers.js';
15
>
16
>
export const unsupportedSchemas = new Set([
17
>
Schemas.inMemory,
18
>
Schemas.vscodeSourceControl,
19
>
Schemas.walkThrough,
20
>
Schemas.walkThroughSnippet,
21
>
Schemas.vscodeChatCodeBlock,
22
>
Schemas.vscodeTerminal
23
>
]);
24
>
25
>
class DoubleResourceMap<V> {
26
>
27
>
private _byResource = new ResourceMap<Map<string, V>>();
28
>
private _byOwner = new Map<string, ResourceMap<V>>();
29
>
30
>
set(resource: URI, owner: string, value: V) {
31
>
let ownerMap = this._byResource.get(resource);
32
>
if (!ownerMap) {
33
>
ownerMap = new Map();
34
>
this._byResource.set(resource, ownerMap);
35
>
}
36
>
ownerMap.set(owner, value);
37
>
38
>
let resourceMap = this._byOwner.get(owner);
39
>
if (!resourceMap) {
40
>
resourceMap = new ResourceMap();
41
>
this._byOwner.set(owner, resourceMap);
42
>
}
43
>
resourceMap.set(resource, value);
44
>
}
45
>
46
>
get(resource: URI, owner: string): V | undefined {
47
const ownerMap = this._byResource.get(resource);
48
return ownerMap?.get(owner);
49
}
51
>
delete(resource: URI, owner: string): boolean {
52
let removedA = false;
53
let removedB = false;