Skip to content

Commit 270a149

Browse files
committed
Merge pull request #2963 from Microsoft/RenameHeritageClauseElement
Rename HeritageClauseElement to ExpressionWithTypeArguments + related methods.
2 parents 40aaefd + 54ef1bf commit 270a149

File tree

7 files changed

+55
-55
lines changed

7 files changed

+55
-55
lines changed

src/compiler/checker.ts

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,7 +2473,7 @@ module ts {
24732473
let declaration = <ClassDeclaration>getDeclarationOfKind(type.symbol, SyntaxKind.ClassDeclaration);
24742474
let baseTypeNode = getClassExtendsHeritageClauseElement(declaration);
24752475
if (baseTypeNode) {
2476-
let baseType = getTypeFromHeritageClauseElement(baseTypeNode);
2476+
let baseType = getTypeFromExpressionWithTypeArguments(baseTypeNode);
24772477
if (baseType !== unknownType) {
24782478
if (getTargetType(baseType).flags & TypeFlags.Class) {
24792479
if (type !== baseType && !hasBaseType(<InterfaceType>baseType, type)) {
@@ -2495,7 +2495,7 @@ module ts {
24952495
for (let declaration of type.symbol.declarations) {
24962496
if (declaration.kind === SyntaxKind.InterfaceDeclaration && getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
24972497
for (let node of getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
2498-
let baseType = getTypeFromHeritageClauseElement(node);
2498+
let baseType = getTypeFromExpressionWithTypeArguments(node);
24992499

25002500
if (baseType !== unknownType) {
25012501
if (getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface)) {
@@ -3310,7 +3310,7 @@ module ts {
33103310
return type;
33113311
}
33123312

3313-
function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode: TypeReferenceNode | HeritageClauseElement, typeParameterSymbol: Symbol): boolean {
3313+
function isTypeParameterReferenceIllegalInConstraint(typeReferenceNode: TypeReferenceNode | ExpressionWithTypeArguments, typeParameterSymbol: Symbol): boolean {
33143314
let links = getNodeLinks(typeReferenceNode);
33153315
if (links.isIllegalTypeReferenceInConstraint !== undefined) {
33163316
return links.isIllegalTypeReferenceInConstraint;
@@ -3360,24 +3360,24 @@ module ts {
33603360
}
33613361

33623362
function getTypeFromTypeReference(node: TypeReferenceNode): Type {
3363-
return getTypeFromTypeReferenceOrHeritageClauseElement(node);
3363+
return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
33643364
}
33653365

3366-
function getTypeFromHeritageClauseElement(node: HeritageClauseElement): Type {
3367-
return getTypeFromTypeReferenceOrHeritageClauseElement(node);
3366+
function getTypeFromExpressionWithTypeArguments(node: ExpressionWithTypeArguments): Type {
3367+
return getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
33683368
}
33693369

3370-
function getTypeFromTypeReferenceOrHeritageClauseElement(node: TypeReferenceNode | HeritageClauseElement): Type {
3370+
function getTypeFromTypeReferenceOrExpressionWithTypeArguments(node: TypeReferenceNode | ExpressionWithTypeArguments): Type {
33713371
let links = getNodeLinks(node);
33723372
if (!links.resolvedType) {
33733373
let type: Type;
33743374

33753375
// We don't currently support heritage clauses with complex expressions in them.
33763376
// For these cases, we just set the type to be the unknownType.
3377-
if (node.kind !== SyntaxKind.HeritageClauseElement || isSupportedHeritageClauseElement(<HeritageClauseElement>node)) {
3377+
if (node.kind !== SyntaxKind.ExpressionWithTypeArguments || isSupportedExpressionWithTypeArguments(<ExpressionWithTypeArguments>node)) {
33783378
let typeNameOrExpression = node.kind === SyntaxKind.TypeReference
33793379
? (<TypeReferenceNode>node).typeName
3380-
: (<HeritageClauseElement>node).expression;
3380+
: (<ExpressionWithTypeArguments>node).expression;
33813381

33823382
let symbol = resolveEntityName(typeNameOrExpression, SymbolFlags.Type);
33833383
if (symbol) {
@@ -3668,8 +3668,8 @@ module ts {
36683668
return getTypeFromStringLiteral(<StringLiteral>node);
36693669
case SyntaxKind.TypeReference:
36703670
return getTypeFromTypeReference(<TypeReferenceNode>node);
3671-
case SyntaxKind.HeritageClauseElement:
3672-
return getTypeFromHeritageClauseElement(<HeritageClauseElement>node);
3671+
case SyntaxKind.ExpressionWithTypeArguments:
3672+
return getTypeFromExpressionWithTypeArguments(<ExpressionWithTypeArguments>node);
36733673
case SyntaxKind.TypeQuery:
36743674
return getTypeFromTypeQueryNode(<TypeQueryNode>node);
36753675
case SyntaxKind.ArrayType:
@@ -8380,20 +8380,20 @@ module ts {
83808380

83818381
function checkTypeReferenceNode(node: TypeReferenceNode) {
83828382
checkGrammarTypeReferenceInStrictMode(node.typeName);
8383-
return checkTypeReferenceOrHeritageClauseElement(node);
8383+
return checkTypeReferenceOrExpressionWithTypeArguments(node);
83848384
}
83858385

8386-
function checkHeritageClauseElement(node: HeritageClauseElement) {
8387-
checkGrammarHeritageClauseElementInStrictMode(<PropertyAccessExpression>node.expression);
8386+
function checkExpressionWithTypeArguments(node: ExpressionWithTypeArguments) {
8387+
checkGrammarExpressionWithTypeArgumentsInStrictMode(<PropertyAccessExpression>node.expression);
83888388

8389-
return checkTypeReferenceOrHeritageClauseElement(node);
8389+
return checkTypeReferenceOrExpressionWithTypeArguments(node);
83908390
}
83918391

8392-
function checkTypeReferenceOrHeritageClauseElement(node: TypeReferenceNode | HeritageClauseElement) {
8392+
function checkTypeReferenceOrExpressionWithTypeArguments(node: TypeReferenceNode | ExpressionWithTypeArguments) {
83938393
// Grammar checking
83948394
checkGrammarTypeArguments(node, node.typeArguments);
83958395

8396-
let type = getTypeFromTypeReferenceOrHeritageClauseElement(node);
8396+
let type = getTypeFromTypeReferenceOrExpressionWithTypeArguments(node);
83978397
if (type !== unknownType && node.typeArguments) {
83988398
// Do type argument local checks only if referenced type is successfully resolved
83998399
let len = node.typeArguments.length;
@@ -9959,12 +9959,12 @@ module ts {
99599959
let staticType = <ObjectType>getTypeOfSymbol(symbol);
99609960
let baseTypeNode = getClassExtendsHeritageClauseElement(node);
99619961
if (baseTypeNode) {
9962-
if (!isSupportedHeritageClauseElement(baseTypeNode)) {
9962+
if (!isSupportedExpressionWithTypeArguments(baseTypeNode)) {
99639963
error(baseTypeNode.expression, Diagnostics.Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clauses);
99649964
}
99659965

99669966
emitExtends = emitExtends || !isInAmbientContext(node);
9967-
checkHeritageClauseElement(baseTypeNode);
9967+
checkExpressionWithTypeArguments(baseTypeNode);
99689968
}
99699969
let baseTypes = getBaseTypes(type);
99709970
if (baseTypes.length) {
@@ -9991,13 +9991,13 @@ module ts {
99919991
let implementedTypeNodes = getClassImplementsHeritageClauseElements(node);
99929992
if (implementedTypeNodes) {
99939993
forEach(implementedTypeNodes, typeRefNode => {
9994-
if (!isSupportedHeritageClauseElement(typeRefNode)) {
9994+
if (!isSupportedExpressionWithTypeArguments(typeRefNode)) {
99959995
error(typeRefNode.expression, Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
99969996
}
99979997

9998-
checkHeritageClauseElement(typeRefNode);
9998+
checkExpressionWithTypeArguments(typeRefNode);
99999999
if (produceDiagnostics) {
10000-
let t = getTypeFromHeritageClauseElement(typeRefNode);
10000+
let t = getTypeFromExpressionWithTypeArguments(typeRefNode);
1000110001
if (t !== unknownType) {
1000210002
let declaredType = (t.flags & TypeFlags.Reference) ? (<TypeReference>t).target : t;
1000310003
if (declaredType.flags & (TypeFlags.Class | TypeFlags.Interface)) {
@@ -10192,11 +10192,11 @@ module ts {
1019210192
}
1019310193
}
1019410194
forEach(getInterfaceBaseTypeNodes(node), heritageElement => {
10195-
if (!isSupportedHeritageClauseElement(heritageElement)) {
10195+
if (!isSupportedExpressionWithTypeArguments(heritageElement)) {
1019610196
error(heritageElement.expression, Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments);
1019710197
}
1019810198

10199-
checkHeritageClauseElement(heritageElement);
10199+
checkExpressionWithTypeArguments(heritageElement);
1020010200
});
1020110201
forEach(node.members, checkSourceElement);
1020210202

@@ -11154,7 +11154,7 @@ module ts {
1115411154
node = node.parent;
1115511155
}
1115611156

11157-
return node.parent && node.parent.kind === SyntaxKind.HeritageClauseElement;
11157+
return node.parent && node.parent.kind === SyntaxKind.ExpressionWithTypeArguments;
1115811158
}
1115911159

1116011160
function isTypeNode(node: Node): boolean {
@@ -11174,7 +11174,7 @@ module ts {
1117411174
case SyntaxKind.StringLiteral:
1117511175
// Specialized signatures can have string literals as their parameters' type names
1117611176
return node.parent.kind === SyntaxKind.Parameter;
11177-
case SyntaxKind.HeritageClauseElement:
11177+
case SyntaxKind.ExpressionWithTypeArguments:
1117811178
return true;
1117911179

1118011180
// Identifiers and qualified names may be type nodes, depending on their context. Climb
@@ -11208,7 +11208,7 @@ module ts {
1120811208
return true;
1120911209
}
1121011210
switch (parent.kind) {
11211-
case SyntaxKind.HeritageClauseElement:
11211+
case SyntaxKind.ExpressionWithTypeArguments:
1121211212
return true;
1121311213
case SyntaxKind.TypeParameter:
1121411214
return node === (<TypeParameterDeclaration>parent).constraint;
@@ -11286,7 +11286,7 @@ module ts {
1128611286
}
1128711287

1128811288
if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
11289-
let meaning = entityName.parent.kind === SyntaxKind.HeritageClauseElement ? SymbolFlags.Type : SymbolFlags.Namespace;
11289+
let meaning = entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments ? SymbolFlags.Type : SymbolFlags.Namespace;
1129011290
meaning |= SymbolFlags.Alias;
1129111291
return resolveEntityName(<EntityName>entityName, meaning);
1129211292
}
@@ -12117,7 +12117,7 @@ module ts {
1211712117
// public // error at public
1211812118
// public.private.package // error at public
1211912119
// B.private.B // no error
12120-
function checkGrammarHeritageClauseElementInStrictMode(expression: Expression) {
12120+
function checkGrammarExpressionWithTypeArgumentsInStrictMode(expression: Expression) {
1212112121
// Example:
1212212122
// class C extends public // error at public
1212312123
if (expression && expression.kind === SyntaxKind.Identifier) {
@@ -12128,7 +12128,7 @@ module ts {
1212812128
// in PropertyAccessExpression. According to grammar production of MemberExpression,
1212912129
// the left component expression is a PrimaryExpression (i.e. Identifier) while the other
1213012130
// component after dots can be IdentifierName.
12131-
checkGrammarHeritageClauseElementInStrictMode((<PropertyAccessExpression>expression).expression);
12131+
checkGrammarExpressionWithTypeArgumentsInStrictMode((<PropertyAccessExpression>expression).expression);
1213212132
}
1213312133

1213412134
}

src/compiler/declarationEmitter.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ module ts {
329329
case SyntaxKind.VoidKeyword:
330330
case SyntaxKind.StringLiteral:
331331
return writeTextOfNode(currentSourceFile, type);
332-
case SyntaxKind.HeritageClauseElement:
333-
return emitHeritageClauseElement(<HeritageClauseElement>type);
332+
case SyntaxKind.ExpressionWithTypeArguments:
333+
return emitExpressionWithTypeArguments(<ExpressionWithTypeArguments>type);
334334
case SyntaxKind.TypeReference:
335335
return emitTypeReference(<TypeReferenceNode>type);
336336
case SyntaxKind.TypeQuery:
@@ -376,8 +376,8 @@ module ts {
376376
}
377377
}
378378

379-
function emitHeritageClauseElement(node: HeritageClauseElement) {
380-
if (isSupportedHeritageClauseElement(node)) {
379+
function emitExpressionWithTypeArguments(node: ExpressionWithTypeArguments) {
380+
if (isSupportedExpressionWithTypeArguments(node)) {
381381
Debug.assert(node.expression.kind === SyntaxKind.Identifier || node.expression.kind === SyntaxKind.PropertyAccessExpression);
382382
emitEntityName(<Identifier | PropertyAccessExpression>node.expression);
383383
if (node.typeArguments) {
@@ -861,14 +861,14 @@ module ts {
861861
}
862862
}
863863

864-
function emitHeritageClause(typeReferences: HeritageClauseElement[], isImplementsList: boolean) {
864+
function emitHeritageClause(typeReferences: ExpressionWithTypeArguments[], isImplementsList: boolean) {
865865
if (typeReferences) {
866866
write(isImplementsList ? " implements " : " extends ");
867867
emitCommaList(typeReferences, emitTypeOfTypeReference);
868868
}
869869

870-
function emitTypeOfTypeReference(node: HeritageClauseElement) {
871-
if (isSupportedHeritageClauseElement(node)) {
870+
function emitTypeOfTypeReference(node: ExpressionWithTypeArguments) {
871+
if (isSupportedExpressionWithTypeArguments(node)) {
872872
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError);
873873
}
874874

src/compiler/emitter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3636,7 +3636,7 @@ if (typeof __param !== "function") __param = function (paramIndex, decorator) {
36363636
}
36373637
}
36383638

3639-
function emitConstructor(node: ClassLikeDeclaration, baseTypeElement: HeritageClauseElement) {
3639+
function emitConstructor(node: ClassLikeDeclaration, baseTypeElement: ExpressionWithTypeArguments) {
36403640
let saveTempFlags = tempFlags;
36413641
let saveTempVariables = tempVariables;
36423642
let saveTempParameters = tempParameters;
@@ -3651,7 +3651,7 @@ if (typeof __param !== "function") __param = function (paramIndex, decorator) {
36513651
tempParameters = saveTempParameters;
36523652
}
36533653

3654-
function emitConstructorWorker(node: ClassLikeDeclaration, baseTypeElement: HeritageClauseElement) {
3654+
function emitConstructorWorker(node: ClassLikeDeclaration, baseTypeElement: ExpressionWithTypeArguments) {
36553655
// Check if we have property assignment inside class declaration.
36563656
// If there is property assignment, we need to emit constructor whether users define it or not
36573657
// If there is no property assignment, we can omit constructor if users do not define it

src/compiler/parser.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,9 +308,9 @@ module ts {
308308
return visitNode(cbNode, (<ComputedPropertyName>node).expression);
309309
case SyntaxKind.HeritageClause:
310310
return visitNodes(cbNodes, (<HeritageClause>node).types);
311-
case SyntaxKind.HeritageClauseElement:
312-
return visitNode(cbNode, (<HeritageClauseElement>node).expression) ||
313-
visitNodes(cbNodes, (<HeritageClauseElement>node).typeArguments);
311+
case SyntaxKind.ExpressionWithTypeArguments:
312+
return visitNode(cbNode, (<ExpressionWithTypeArguments>node).expression) ||
313+
visitNodes(cbNodes, (<ExpressionWithTypeArguments>node).typeArguments);
314314
case SyntaxKind.ExternalModuleReference:
315315
return visitNode(cbNode, (<ExternalModuleReference>node).expression);
316316
case SyntaxKind.MissingDeclaration:
@@ -4284,15 +4284,15 @@ module ts {
42844284
let node = <HeritageClause>createNode(SyntaxKind.HeritageClause);
42854285
node.token = token;
42864286
nextToken();
4287-
node.types = parseDelimitedList(ParsingContext.HeritageClauseElement, parseHeritageClauseElement);
4287+
node.types = parseDelimitedList(ParsingContext.HeritageClauseElement, parseExpressionWithTypeArguments);
42884288
return finishNode(node);
42894289
}
42904290

42914291
return undefined;
42924292
}
42934293

4294-
function parseHeritageClauseElement(): HeritageClauseElement {
4295-
let node = <HeritageClauseElement>createNode(SyntaxKind.HeritageClauseElement);
4294+
function parseExpressionWithTypeArguments(): ExpressionWithTypeArguments {
4295+
let node = <ExpressionWithTypeArguments>createNode(SyntaxKind.ExpressionWithTypeArguments);
42964296
node.expression = parseLeftHandSideExpressionOrHigher();
42974297
if (token === SyntaxKind.LessThanToken) {
42984298
node.typeArguments = parseBracketedList(ParsingContext.TypeArguments, parseType, SyntaxKind.LessThanToken, SyntaxKind.GreaterThanToken);

src/compiler/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,9 @@ module ts {
206206
SpreadElementExpression,
207207
ClassExpression,
208208
OmittedExpression,
209+
ExpressionWithTypeArguments,
209210
// Misc
210211
TemplateSpan,
211-
HeritageClauseElement,
212212
SemicolonClassElement,
213213
// Element
214214
Block,
@@ -741,7 +741,7 @@ module ts {
741741
arguments: NodeArray<Expression>;
742742
}
743743

744-
export interface HeritageClauseElement extends TypeNode {
744+
export interface ExpressionWithTypeArguments extends TypeNode {
745745
expression: LeftHandSideExpression;
746746
typeArguments?: NodeArray<TypeNode>;
747747
}
@@ -893,7 +893,7 @@ module ts {
893893

894894
export interface HeritageClause extends Node {
895895
token: SyntaxKind;
896-
types?: NodeArray<HeritageClauseElement>;
896+
types?: NodeArray<ExpressionWithTypeArguments>;
897897
}
898898

899899
export interface TypeAliasDeclaration extends Declaration, ModuleElement {

src/compiler/utilities.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,16 +1671,16 @@ module ts {
16711671

16721672
// Returns false if this heritage clause element's expression contains something unsupported
16731673
// (i.e. not a name or dotted name).
1674-
export function isSupportedHeritageClauseElement(node: HeritageClauseElement): boolean {
1675-
return isSupportedHeritageClauseElementExpression(node.expression);
1674+
export function isSupportedExpressionWithTypeArguments(node: ExpressionWithTypeArguments): boolean {
1675+
return isSupportedExpressionWithTypeArgumentsRest(node.expression);
16761676
}
16771677

1678-
function isSupportedHeritageClauseElementExpression(node: Expression): boolean {
1678+
function isSupportedExpressionWithTypeArgumentsRest(node: Expression): boolean {
16791679
if (node.kind === SyntaxKind.Identifier) {
16801680
return true;
16811681
}
16821682
else if (node.kind === SyntaxKind.PropertyAccessExpression) {
1683-
return isSupportedHeritageClauseElementExpression((<PropertyAccessExpression>node).expression);
1683+
return isSupportedExpressionWithTypeArgumentsRest((<PropertyAccessExpression>node).expression);
16841684
}
16851685
else {
16861686
return false;

0 commit comments

Comments
 (0)