@@ -1903,10 +1903,7 @@ class Parser {
19031903 const ['extend' , 'on' ].contains (token.next.lexeme)) {
19041904 reportRecoverableError (
19051905 token.next, codes.templateExpectedInstead.withArguments ('extends' ));
1906- Token incorrectExtendsKeyword = token.next;
1907- token = computeType (incorrectExtendsKeyword, /* required = */ true )
1908- .ensureTypeNotVoid (incorrectExtendsKeyword, this );
1909- listener.handleClassExtends (incorrectExtendsKeyword);
1906+ token = parseClassExtendsSeenExtendsClause (token.next, token);
19101907 } else {
19111908 token = parseClassExtendsOpt (token);
19121909 }
@@ -1966,17 +1963,36 @@ class Parser {
19661963 // extends <typeNotVoid>
19671964 Token next = token.next;
19681965 if (optional ('extends' , next)) {
1969- Token extendsKeyword = next;
1970- token = computeType (next, /* required = */ true )
1971- .ensureTypeNotVoid (next, this );
1972- listener.handleClassExtends (extendsKeyword);
1966+ token = parseClassExtendsSeenExtendsClause (next, token);
19731967 } else {
19741968 listener.handleNoType (token);
1975- listener.handleClassExtends (/* extendsKeyword = */ null );
1969+ listener.handleClassExtends (null , 1 );
19761970 }
19771971 return token;
19781972 }
19791973
1974+ Token parseClassExtendsSeenExtendsClause (Token extendsKeyword, Token token) {
1975+ Token next = extendsKeyword;
1976+ token =
1977+ computeType (next, /* required = */ true ).ensureTypeNotVoid (next, this );
1978+ int count = 1 ;
1979+
1980+ // Error recovery: extends <typeNotVoid>, <typeNotVoid> [...]
1981+ if (optional (',' , token.next)) {
1982+ reportRecoverableError (token.next, codes.messageMultipleExtends);
1983+
1984+ while (optional (',' , token.next)) {
1985+ next = token.next;
1986+ token = computeType (next, /* required = */ true )
1987+ .ensureTypeNotVoid (next, this );
1988+ count++ ;
1989+ }
1990+ }
1991+
1992+ listener.handleClassExtends (extendsKeyword, count);
1993+ return token;
1994+ }
1995+
19801996 /// ```
19811997 /// implementsClause:
19821998 /// 'implements' typeName (',' typeName)*
0 commit comments