private doProcessEdge()

in server/src/jsonStore.ts [263:353]


	private doProcessEdge(label: EdgeLabels, outV: Id, inV: Id, property?: ItemEdgeProperties): void {
		const from: Vertex | undefined = this.vertices.all.get(outV);
		const to: Vertex | undefined = this.vertices.all.get(inV);
		if (from === undefined) {
			throw new Error(`No vertex found for Id ${outV}`);
		}
		if (to === undefined) {
			throw new Error(`No vertex found for Id ${inV}`);
		}
		let values: any[] | undefined;
		switch (label) {
			case EdgeLabels.contains:
				values = this.out.contains.get(from.id);
				if (values === undefined) {
					values = [ to as any ];
					this.out.contains.set(from.id, values);
				} else {
					values.push(to);
				}
				this.in.contains.set(to.id, from as any);
				break;
			case EdgeLabels.item:
				values = this.out.item.get(from.id);
				let itemTarget: ItemTarget | undefined;
				if (property !== undefined) {
					switch (property) {
						case ItemEdgeProperties.references:
							itemTarget = { type: property, range: to as Range };
							break;
						case ItemEdgeProperties.declarations:
							itemTarget = { type: property, range: to as Range };
							break;
						case ItemEdgeProperties.definitions:
							itemTarget = { type: property, range: to as Range };
							break;
						case ItemEdgeProperties.referenceResults:
							itemTarget = { type: property, result: to as ReferenceResult };
							break;
						case ItemEdgeProperties.referenceLinks:
							itemTarget = { type: property, result: to as Moniker };
					}
				} else {
					itemTarget = to as Range;
				}
				if (itemTarget !== undefined) {
					if (values === undefined) {
						values = [ itemTarget ];
						this.out.item.set(from.id, values);
					} else {
						values.push(itemTarget);
					}
				}
				break;
			case EdgeLabels.next:
				this.out.next.set(from.id, to);
				break;
			case EdgeLabels.moniker:
				this.out.moniker.set(from.id, to as Moniker);
				values = this.in.moniker.get(to.id);
				if (values === undefined) {
					values = [];
					this.in.moniker.set(to.id, values);
				}
				values.push(from);
				break;
			case EdgeLabels.textDocument_documentSymbol:
				this.out.documentSymbol.set(from.id, to as DocumentSymbolResult);
				break;
			case EdgeLabels.textDocument_foldingRange:
				this.out.foldingRange.set(from.id, to as FoldingRangeResult);
				break;
			case EdgeLabels.textDocument_documentLink:
				this.out.documentLink.set(from.id, to as DocumentLinkResult);
				break;
			case EdgeLabels.textDocument_diagnostic:
				this.out.diagnostic.set(from.id, to as DiagnosticResult);
				break;
			case EdgeLabels.textDocument_definition:
				this.out.definition.set(from.id, to as DefinitionResult);
				break;
			case EdgeLabels.textDocument_typeDefinition:
				this.out.typeDefinition.set(from.id, to as TypeDefinitionResult);
				break;
			case EdgeLabels.textDocument_hover:
				this.out.hover.set(from.id, to as HoverResult);
				break;
			case EdgeLabels.textDocument_references:
				this.out.references.set(from.id, to as ReferenceResult);
				break;
		}
	}