Problems reported:

parser/extensions/covariant:6:12: Can't have modifier 'covariant' in an extension.
  addChild(covariant A child) {}
           ^^^^^^^^^

beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(A, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, A)
      handleNoType(A)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    handleNoTypeVariables(extends)
    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
      handleIdentifier(A, typeReference)
      handleNoTypeArguments({)
      handleType(A, null)
      handleClassExtends(extends, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration(})
  beginMetadataStar(extension)
  endMetadataStar(0)
  beginExtensionDeclarationPrelude(extension)
    handleNoTypeVariables(on)
    beginExtensionDeclaration(null, extension, null)
      handleIdentifier(C, typeReference)
      handleNoTypeArguments({)
      handleType(C, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Extension, {)
        beginMetadataStar(addChild)
        endMetadataStar(0)
        beginMember()
          beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild, null)
            handleNoType({)
            handleIdentifier(addChild, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.ExtensionNonStaticMethod)
              beginMetadataStar(covariant)
              endMetadataStar(0)
              handleRecoverableError(Message[Template(ExtraneousModifierInExtension), Can't have modifier 'covariant' in an extension., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
              beginFormalParameter(covariant, MemberKind.ExtensionNonStaticMethod, null, covariant, null)
                handleIdentifier(A, typeReference)
                handleNoTypeArguments(child)
                handleType(A, null)
                handleIdentifier(child, formalParameterDeclaration)
                handleFormalParameterWithoutValue())
              endFormalParameter(null, null, null, child, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionNonStaticMethod)
            endFormalParameters(1, (, ), MemberKind.ExtensionNonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            beginBlockFunctionBody({)
            endBlockFunctionBody(0, {, })
          endExtensionMethod(null, addChild, (, null, })
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
    endExtensionDeclaration(extension, extension, on, })
  endTopLevelDeclaration(})
endCompilationUnit(3, )
