Skip to content

Commit 794a957

Browse files
committed
Move declarationMetadata to be a member of AstDeclaration instead of SignatureMetadata
1 parent 51e77b4 commit 794a957

4 files changed

Lines changed: 18 additions & 19 deletions

File tree

‎apps/api-extractor/src/analyzer/AstDeclaration.ts‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ export class AstDeclaration {
5454
*/
5555
public signatureMetadata: unknown;
5656

57+
/**
58+
* Additional information that is calculated later by the `Collector`. The actual type is `DeclarationMetadata`,
59+
* but we declare it as `unknown` because it's not meant to be accessed outside the `Collector`.
60+
* Stores non-ancillary state. If `SignatureMetadata.isAncillary=true`, then this property will point to
61+
* the main declaration's object.
62+
*/
63+
public declarationMetadata: unknown;
64+
5765
// NOTE: This array becomes immutable after astSymbol.analyze() sets astSymbol.analyzed=true
5866
private readonly _analyzedChildren: AstDeclaration[] = [];
5967

‎apps/api-extractor/src/collector/Collector.ts‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,11 @@ export class Collector {
279279
}
280280
return symbolOrDeclaration.symbolMetadata as SymbolMetadata;
281281
} else {
282-
// Fetching the SignatureMetadata always constructs the DeclarationMetadata
283-
return this.fetchSignatureMetadata(symbolOrDeclaration).declarationMetadata!;
282+
if (symbolOrDeclaration.declarationMetadata === undefined) {
283+
// Fetching the SymbolMetadata always constructs the DeclarationMetadata
284+
this._fetchSymbolMetadata(symbolOrDeclaration.astSymbol);
285+
}
286+
return symbolOrDeclaration.declarationMetadata as DeclarationMetadata;
284287
}
285288
}
286289

@@ -591,8 +594,7 @@ export class Collector {
591594

592595
for (const astDeclaration of astSymbol.astDeclarations) {
593596
// We know we solved this above
594-
const signatureMetadata: SignatureMetadata = astDeclaration.signatureMetadata as SignatureMetadata;
595-
const declarationMetadata: DeclarationMetadata = signatureMetadata.declarationMetadata!;
597+
const declarationMetadata: DeclarationMetadata = astDeclaration.declarationMetadata as DeclarationMetadata;
596598

597599
const effectiveReleaseTag: ReleaseTag = declarationMetadata.effectiveReleaseTag;
598600

@@ -668,7 +670,7 @@ export class Collector {
668670
+ ' to another declaration');
669671
}
670672

671-
if (mainMetadata.declarationMetadata || ancillaryMetadata.declarationMetadata) {
673+
if (mainAstDeclaration.declarationMetadata || ancillaryAstDeclaration.declarationMetadata) {
672674
throw new InternalError('Invalid call to _addAncillaryDeclaration() because the declaration metadata'
673675
+ ' has already been constructed');
674676
}
@@ -814,13 +816,11 @@ export class Collector {
814816
declarationMetadata.tsdocComment = parserContext.docComment;
815817
}
816818

817-
signatureMetadata.declarationMetadata = declarationMetadata;
819+
astDeclaration.declarationMetadata = declarationMetadata;
818820

819821
// Lastly, share the result with any ancillary declarations
820822
for (const ancillaryDeclaration of signatureMetadata.ancillaryDeclarations) {
821-
const ancillarySignatureMetadata: InternalSignatureMetadata
822-
= ancillaryDeclaration.signatureMetadata as InternalSignatureMetadata;
823-
ancillarySignatureMetadata.declarationMetadata = declarationMetadata;
823+
ancillaryDeclaration.declarationMetadata = declarationMetadata;
824824
}
825825
}
826826

‎apps/api-extractor/src/collector/DeclarationMetadata.ts‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ export interface IDeclarationMetadataOptions {
2121

2222
/**
2323
* Stores the Collector's additional analysis for an `AstDeclaration`. This object is assigned to
24-
* `AstDeclaration.signatureMetadata.declarationMetadata` but consumers must always obtain it by
25-
* calling `Collector.fetchMetadata().
24+
* `AstDeclaration.declarationMetadata` but consumers must always obtain it by calling `Collector.fetchMetadata().
2625
*
2726
* Note that ancillary declarations share their `DeclarationMetadata` with the main declaration,
2827
* whereas a separate `SignatureMetadata` object is created for each `AstDeclaration`.

‎apps/api-extractor/src/collector/SignatureMetadata.ts‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import * as tsdoc from '@microsoft/tsdoc';
55
import { AstDeclaration } from '../analyzer/AstDeclaration';
6-
import { DeclarationMetadata } from './DeclarationMetadata';
76

87
/**
98
* Stores the Collector's additional analysis for a specific `AstDeclaration` signature. This object is assigned to
@@ -35,11 +34,6 @@ export abstract class SignatureMetadata {
3534
* and `isAncillary` will be true for all the array items.
3635
*/
3736
public abstract readonly ancillaryDeclarations: ReadonlyArray<AstDeclaration>;
38-
39-
/**
40-
* Stores non-ancillary state. If `isAncillary=true`, then this property will point to the main declaration's object.
41-
*/
42-
public abstract readonly declarationMetadata: DeclarationMetadata | undefined;
4337
}
4438

4539
/**
@@ -51,6 +45,4 @@ export class InternalSignatureMetadata extends SignatureMetadata {
5145
public isAncillary: boolean = false;
5246

5347
public ancillaryDeclarations: AstDeclaration[] = [];
54-
55-
public declarationMetadata: DeclarationMetadata | undefined = undefined;
5648
}

0 commit comments

Comments
 (0)