@@ -43,6 +43,12 @@ func NewMissingMemberFixer(changeTracker *change.Tracker, program *compiler.Prog
4343 }
4444}
4545
46+ func (f * MissingMemberFixer ) createNodeBuilder () (* checker.NodeBuilder , map [* ast.IdentifierNode ]* ast.Symbol ) {
47+ idToSymbol := make (map [* ast.IdentifierNode ]* ast.Symbol )
48+ nodeBuilder := checker .NewNodeBuilderEx (f .Checker , f .ChangeTracker .EmitContext , idToSymbol )
49+ return nodeBuilder , idToSymbol
50+ }
51+
4652func (f * MissingMemberFixer ) createMemberFromSymbol (symbol * ast.Symbol , enclosingDeclaration * ast.Node , sourceFile * ast.SourceFile , body * ast.FunctionBody , preserveOptional PreserveOptionalFlags ) []* ast.Node {
4753 declarations := symbol .Declarations
4854 declaration := core .FirstOrNil (declarations )
@@ -63,23 +69,19 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
6369 }
6470
6571 t := f .Checker .GetTypeOfSymbolAtLocation (symbol , enclosingDeclaration )
72+ nodeBuilder , idToSymbol := f .createNodeBuilder ()
6673 var nodes []* ast.Node
6774
6875 switch kind {
6976 case ast .KindPropertySignature , ast .KindPropertyDeclaration :
70- idToSymbol := make (map [* ast.IdentifierNode ]* ast.Symbol )
71- builder := checker .NewNodeBuilderEx (f .Checker , f .ChangeTracker .EmitContext , idToSymbol )
72- typeNode := f .importTypeNode (builder .TypeToTypeNode (t , enclosingDeclaration , flags , nodebuilder .InternalFlagsNone , nil ), idToSymbol )
77+ typeNode := f .createTypeNode (t , enclosingDeclaration , flags , nodeBuilder , idToSymbol )
7378 var questionToken * ast.TokenNode
7479 if optional && preserveOptional & PreserveOptionalFlagsProperty != 0 {
7580 questionToken = f .ChangeTracker .NodeFactory .NewToken (ast .KindQuestionToken )
7681 }
7782 return append (nodes , f .ChangeTracker .NodeFactory .NewPropertyDeclaration (modifiers , createPropertyName (f .ChangeTracker .NodeFactory , declarationName , quotePreference ), questionToken , typeNode , nil /*initializer*/ ))
7883
7984 case ast .KindGetAccessor , ast .KindSetAccessor :
80- idToSymbol := make (map [* ast.IdentifierNode ]* ast.Symbol )
81- builder := checker .NewNodeBuilderEx (f .Checker , f .ChangeTracker .EmitContext , idToSymbol )
82- typeNode := f .importTypeNode (builder .TypeToTypeNode (t , enclosingDeclaration , flags , nodebuilder .InternalFlagsNone , nil ), idToSymbol )
8385 accessors := ast .GetAllAccessorDeclarations (symbol .Declarations , declaration )
8486 var orderedAccessors []* ast.Node
8587 if accessors .SecondAccessor == nil {
@@ -93,7 +95,7 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
9395 nodes = append (nodes ,
9496 f .ChangeTracker .NodeFactory .NewGetAccessorDeclaration (
9597 modifiers , createPropertyName (f .ChangeTracker .NodeFactory , declarationName , quotePreference ),
96- nil /*typeParameters*/ , nil /*parameters*/ , f .ChangeTracker . NodeFactory . DeepCloneNode ( typeNode ), nil /*fullSignature*/ , f .createBody (body , ambient , quotePreference )),
98+ nil /*typeParameters*/ , nil /*parameters*/ , f .createTypeNode ( t , enclosingDeclaration , flags , nodeBuilder , idToSymbol ), nil /*fullSignature*/ , f .createBody (body , ambient , quotePreference )),
9799 )
98100 }
99101
@@ -105,7 +107,7 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
105107
106108 nodes = append (nodes , f .ChangeTracker .NodeFactory .NewSetAccessorDeclaration (
107109 modifiers , createPropertyName (f .ChangeTracker .NodeFactory , declarationName , quotePreference ),
108- nil /*typeParameters*/ , createDummyParameters (f .ChangeTracker .NodeFactory , 1 , []string {parameter .Name ().Text ()}, []* ast.TypeNode {typeNode }, 1 , ast .IsInJSFile (enclosingDeclaration )),
110+ nil /*typeParameters*/ , createDummyParameters (f .ChangeTracker .NodeFactory , 1 , []string {parameter .Name ().Text ()}, []* ast.TypeNode {f . createTypeNode ( t , enclosingDeclaration , flags , nodeBuilder , idToSymbol ) }, 1 , ast .IsInJSFile (enclosingDeclaration )),
109111 nil /*type*/ , nil /*fullSignature*/ , f .createBody (body , ambient , quotePreference )),
110112 )
111113 }
@@ -159,6 +161,10 @@ func (f *MissingMemberFixer) createMemberFromSymbol(symbol *ast.Symbol, enclosin
159161 return nil
160162}
161163
164+ func (f * MissingMemberFixer ) createTypeNode (t * checker.Type , enclosingDeclaration * ast.Node , flags nodebuilder.Flags , nodeBuilder * checker.NodeBuilder , idToSymbol map [* ast.IdentifierNode ]* ast.Symbol ) * ast.TypeNode {
165+ return f .importTypeNode (nodeBuilder .TypeToTypeNode (t , enclosingDeclaration , flags , nodebuilder .InternalFlagsNone , nil /*tracker*/ ), idToSymbol )
166+ }
167+
162168func (f * MissingMemberFixer ) createModifiers (symbol * ast.Symbol , declaration * ast.Node ) * ast.ModifierList {
163169 modifierFlags := ast .ModifierFlagsNone
164170 if declaration != nil {
@@ -192,9 +198,8 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignature(signature *
192198 flags |= nodebuilder .FlagsUseSingleQuotesForStringLiteralType
193199 }
194200
195- idToSymbol := make (map [* ast.IdentifierNode ]* ast.Symbol )
196- builder := checker .NewNodeBuilderEx (f .Checker , f .ChangeTracker .EmitContext , idToSymbol )
197- signatureDeclaration := builder .SignatureToSignatureDeclaration (signature , kind , enclosingDeclaration , flags , nodebuilder .InternalFlagsAllowUnresolvedNames , nil /*tracker*/ )
201+ nodeBuilder , idToSymbol := f .createNodeBuilder ()
202+ signatureDeclaration := nodeBuilder .SignatureToSignatureDeclaration (signature , kind , enclosingDeclaration , flags , nodebuilder .InternalFlagsAllowUnresolvedNames , nil /*tracker*/ )
198203 if signatureDeclaration == nil {
199204 return nil
200205 }
@@ -288,6 +293,7 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignatures(signatures
288293 return nil
289294 }
290295
296+ nodeBuilder , idToSymbol := f .createNodeBuilder ()
291297 maxArgsSignature := signatures [0 ]
292298 minArgumentCount := signatures [0 ].MinArgumentCount ()
293299
@@ -331,12 +337,12 @@ func (f *MissingMemberFixer) createSignatureDeclarationFromSignatures(signatures
331337
332338 return f .ChangeTracker .NodeFactory .NewMethodDeclaration (
333339 modifiers , nil /*asteriskToken*/ , methodName , core .IfElse (optional , f .ChangeTracker .NodeFactory .NewToken (ast .KindQuestionToken ), nil ),
334- nil /*typeParameters*/ , parameters , f .getReturnTypeFromSignatures (signatures , enclosingDeclaration ),
340+ nil /*typeParameters*/ , parameters , f .getReturnTypeFromSignatures (signatures , enclosingDeclaration , nodeBuilder , idToSymbol ),
335341 nil /*fullSignature*/ , f .createBody (body , false /*ambient*/ , quotePreference ),
336342 )
337343}
338344
339- func (f * MissingMemberFixer ) getReturnTypeFromSignatures (signatures []* checker.Signature , enclosingDeclaration * ast.Node ) * ast.TypeNode {
345+ func (f * MissingMemberFixer ) getReturnTypeFromSignatures (signatures []* checker.Signature , enclosingDeclaration * ast.Node , nodeBuilder * checker. NodeBuilder , idToSymbol map [ * ast. IdentifierNode ] * ast. Symbol ) * ast.TypeNode {
340346 if len (signatures ) == 0 {
341347 return nil
342348 }
@@ -347,9 +353,7 @@ func (f *MissingMemberFixer) getReturnTypeFromSignatures(signatures []*checker.S
347353 }
348354
349355 unionType := f .Checker .GetUnionType (returnTypes )
350- idToSymbol := make (map [* ast.IdentifierNode ]* ast.Symbol )
351- builder := checker .NewNodeBuilderEx (f .Checker , f .ChangeTracker .EmitContext , idToSymbol )
352- return f .importTypeNode (builder .TypeToTypeNode (unionType , enclosingDeclaration , nodebuilder .FlagsNoTruncation , nodebuilder .InternalFlagsAllowUnresolvedNames , nil /*typeArguments*/ ), idToSymbol )
356+ return f .importTypeNode (nodeBuilder .TypeToTypeNode (unionType , enclosingDeclaration , nodebuilder .FlagsNoTruncation , nodebuilder .InternalFlagsAllowUnresolvedNames , nil /*typeArguments*/ ), idToSymbol )
353357}
354358
355359func (f * MissingMemberFixer ) importTypeNode (typeNode * ast.TypeNode , idToSymbol map [* ast.IdentifierNode ]* ast.Symbol ) * ast.TypeNode {
0 commit comments