(typeParameterDeclarations []*ast.Node)
| 6977 | } |
| 6978 | |
| 6979 | func (c *Checker) checkTypeParameters(typeParameterDeclarations []*ast.Node) { |
| 6980 | seenDefault := false |
| 6981 | for i, node := range typeParameterDeclarations { |
| 6982 | c.checkTypeParameter(node) |
| 6983 | defaultTypeNode := node.AsTypeParameterDeclaration().DefaultType |
| 6984 | if defaultTypeNode != nil { |
| 6985 | seenDefault = true |
| 6986 | c.checkTypeParametersNotReferenced(defaultTypeNode, typeParameterDeclarations, i) |
| 6987 | } else if seenDefault { |
| 6988 | c.error(node, diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters) |
| 6989 | } |
| 6990 | for j := range i { |
| 6991 | if typeParameterDeclarations[j].Symbol() == node.Symbol() { |
| 6992 | c.error(node.Name(), diagnostics.Duplicate_identifier_0, scanner.DeclarationNameToString(node.Name())) |
| 6993 | } |
| 6994 | } |
| 6995 | } |
| 6996 | } |
| 6997 | |
| 6998 | // Check that type parameter defaults only reference previously declared type parameters */ |
| 6999 | func (c *Checker) checkTypeParametersNotReferenced(root *ast.Node, typeParameters []*ast.Node, index int) { |
no test coverage detected