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;
}
}