@@ -4321,14 +4321,14 @@ func (c *Checker) checkClassLikeDeclaration(node *ast.Node) {
43214321 c.checkClassForStaticPropertyNameConflicts(node)
43224322 }
43234323
4324- baseTypeNode := ast.GetClassExtendsHeritageElement(node )
4324+ baseTypeNode := c.getEffectiveBaseTypeNode(classType )
43254325 if baseTypeNode != nil {
43264326 c.checkSourceElements(baseTypeNode.TypeArguments())
43274327 baseTypes := c.getBaseTypes(classType)
43284328 if len(baseTypes) != 0 {
43294329 baseType := baseTypes[0]
4330- c.checkJSDocAugmentsTagMatchesExtends(node, baseTypeNode, baseType)
43314330 baseConstructorType := c.getBaseConstructorTypeOfClass(classType)
4331+ c.checkJSDocAugmentsTagMatchesExtends(node, baseTypeNode, baseType, baseConstructorType)
43324332 staticBaseType := c.getApparentType(baseConstructorType)
43334333 c.checkBaseTypeAccessibility(staticBaseType, baseTypeNode)
43344334 c.checkSourceElement(baseTypeNode.Expression())
@@ -4403,41 +4403,6 @@ func (c *Checker) checkClassLikeDeclaration(node *ast.Node) {
44034403 c.checkPropertyInitialization(node)
44044404}
44054405
4406- func (c *Checker) checkJSDocAugmentsTagMatchesExtends(node *ast.Node, baseTypeNode *ast.ExpressionWithTypeArgumentsNode, baseType *Type) {
4407- if !ast.IsInJSFile(node) {
4408- return
4409- }
4410- file := ast.GetSourceFileOfNode(node)
4411- for _, j := range node.EagerJSDoc(file) {
4412- if j.AsJSDoc().Tags == nil {
4413- continue
4414- }
4415- for _, tag := range j.AsJSDoc().Tags.Nodes {
4416- if tag.Kind != ast.KindJSDocAugmentsTag {
4417- continue
4418- }
4419- sourceTypeNode := tag.ClassName()
4420- sourceType := c.getTypeFromTypeNode(sourceTypeNode)
4421- sourceName := getIdentifierFromEntityNameExpression(sourceTypeNode.Expression())
4422- if sourceName != nil && ast.IsCallExpression(ast.SkipParentheses(baseTypeNode.Expression())) {
4423- sourceSymbol := c.getMergedSymbol(getTargetType(sourceType).symbol)
4424- targetSymbol := c.getMergedSymbol(getTargetType(baseType).symbol)
4425- if sourceSymbol != nil && targetSymbol != nil && sourceSymbol != targetSymbol {
4426- c.error(sourceName, diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause, tag.TagName().Text(), sourceName.Text(), targetSymbol.Name)
4427- continue
4428- }
4429- }
4430- if c.isTypeIdenticalTo(sourceType, baseType) {
4431- continue
4432- }
4433- targetName := getIdentifierFromEntityNameExpression(baseTypeNode.Expression())
4434- if targetName != nil && sourceName != nil {
4435- c.error(sourceName, diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause, tag.TagName().Text(), sourceName.Text(), targetName.Text())
4436- }
4437- }
4438- }
4439- }
4440-
44414406func (c *Checker) checkClassForStaticPropertyNameConflicts(node *ast.Node) {
44424407 if c.compilerOptions.GetUseDefineForClassFields() {
44434408 return
@@ -8582,7 +8547,9 @@ func (c *Checker) resolveCallExpression(node *ast.Node, candidatesOutArray *[]*S
85828547 if !c.isErrorType(superType) {
85838548 // In super call, the candidate signatures are the matching arity signatures of the base constructor function instantiated
85848549 // with the type arguments specified in the extends clause.
8585- baseTypeNode := ast.GetClassExtendsHeritageElement(ast.GetContainingClass(node))
8550+ containingClass := ast.GetContainingClass(node)
8551+ classType := c.getDeclaredTypeOfSymbol(c.getSymbolOfDeclaration(containingClass))
8552+ baseTypeNode := c.getEffectiveBaseTypeNode(classType)
85868553 if baseTypeNode != nil {
85878554 baseConstructors := c.getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.TypeArguments(), baseTypeNode)
85888555 return c.resolveCall(node, baseConstructors, candidatesOutArray, checkMode, SignatureFlagsNone, nil)
@@ -19348,7 +19315,7 @@ func (c *Checker) resolveBaseTypesOfClass(t *Type) {
1934819315 if baseConstructorType.flags&(TypeFlagsObject|TypeFlagsIntersection|TypeFlagsAny) == 0 {
1934919316 return
1935019317 }
19351- baseTypeNode := getBaseTypeNodeOfClass (t)
19318+ baseTypeNode := c.getEffectiveBaseTypeNode (t)
1935219319 var baseType *Type
1935319320 var originalBaseType *Type
1935419321 if baseConstructorType.symbol != nil {
@@ -20989,7 +20956,7 @@ func (c *Checker) getDefaultConstructSignatures(classType *Type) []*Signature {
2098920956 flags := core.IfElse(isAbstract, SignatureFlagsConstruct|SignatureFlagsAbstract, SignatureFlagsConstruct)
2099020957 return []*Signature{c.newSignature(flags, nil, classType.AsInterfaceType().LocalTypeParameters(), nil, nil, classType, nil, 0)}
2099120958 }
20992- baseTypeNode := getBaseTypeNodeOfClass (classType)
20959+ baseTypeNode := c.getEffectiveBaseTypeNode (classType)
2099320960 isJavaScript := declaration != nil && ast.IsInJSFile(declaration)
2099420961 typeArguments := c.getTypeArgumentsFromNode(baseTypeNode)
2099520962 typeArgCount := len(typeArguments)
0 commit comments