diff --git a/src/services/findAllReferences.ts b/src/services/findAllReferences.ts index c9fc3eb05dfa1..204de12a10c96 100644 --- a/src/services/findAllReferences.ts +++ b/src/services/findAllReferences.ts @@ -604,11 +604,16 @@ namespace ts.FindAllReferences.Core { function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol: Symbol, checker: TypeChecker): Symbol | undefined { const bindingElement = getObjectBindingElementWithoutPropertyName(symbol); - if (bindingElement) { - const typeOfPattern = checker.getTypeAtLocation(bindingElement.parent); - return typeOfPattern && checker.getPropertyOfType(typeOfPattern, (bindingElement.name).text); + if (!bindingElement) return undefined; + + const typeOfPattern = checker.getTypeAtLocation(bindingElement.parent); + const propSymbol = typeOfPattern && checker.getPropertyOfType(typeOfPattern, (bindingElement.name).text); + if (propSymbol && propSymbol.flags & SymbolFlags.Accessor) { + // See GH#16922 + Debug.assert(!!(propSymbol.flags & SymbolFlags.Transient)); + return (propSymbol as TransientSymbol).target; } - return undefined; + return propSymbol; } /** diff --git a/tests/cases/fourslash/findAllRefsDestructureGetter.ts b/tests/cases/fourslash/findAllRefsDestructureGetter.ts new file mode 100644 index 0000000000000..b21e6186eb272 --- /dev/null +++ b/tests/cases/fourslash/findAllRefsDestructureGetter.ts @@ -0,0 +1,22 @@ +/// + +////class Test { +//// get [|{| "isDefinition": true, "isWriteAccess": true |}x|]() { return 0; } +//// +//// set [|{| "isDefinition": true, "isWriteAccess": true |}y|](a: number) {} +////} +////const { [|{| "isDefinition": true, "isWriteAccess": true |}x|], [|{| "isDefinition": true, "isWriteAccess": true |}y|] } = new Test(); +////[|x|]; [|y|]; + +const [x0, y0, x1, y1, x2, y2] = test.ranges(); +verify.referenceGroups(x0, [{ definition: "(property) Test.x: number", ranges: [x0, x1, x2] }]); +verify.referenceGroups([x1, x2], [ + { definition: "(property) Test.x: number", ranges: [x0] }, + { definition: "const x: number", ranges: [x1, x2] }, +]); + +verify.referenceGroups(y0, [{ definition: "(property) Test.y: number", ranges: [y0, y1, y2] }]); +verify.referenceGroups([y1, y2], [ + { definition: "(property) Test.y: number", ranges: [y0] }, + { definition: "const y: number", ranges: [y1, y2] }, +]);