Problems reported:

parser/patterns/nullAssert_insideNullAssert:4:10: This pattern cannot appear inside a unary pattern (cast pattern, null check pattern, or null assert pattern) without parentheses.
    case y!!:
         ^^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(x)
        endMetadataStar(0)
        beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
          handleNoType(()
          handleIdentifier(x, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(const)
        endMetadataStar(0)
        handleNoType(const)
        beginVariablesDeclaration(y, null, const)
          handleIdentifier(y, localVariableDeclaration)
          beginInitializedIdentifier(y)
            beginVariableInitializer(=)
              handleLiteralInt(1)
            endVariableInitializer(=)
          endInitializedIdentifier(y)
        endVariablesDeclaration(1, ;)
        beginSwitchStatement(switch)
          handleIdentifier(x, expression)
          handleSendWithoutArguments(x, x, ))
          handleParenthesizedCondition((, null, null)
          beginSwitchBlock({)
            beginCaseExpression(case)
              beginPattern(case)
                beginConstantPattern(null)
                  handleIdentifier(y, expression)
                  handleSendWithoutArguments(y, y, !)
                endConstantPattern(null)
                handleNullAssertPattern(!)
                handleRecoverableError(InvalidInsideUnaryPattern, y, !)
                handleNullAssertPattern(!)
              endPattern(!)
              handleSwitchCaseNoWhenClause(!)
            endCaseExpression(case, null, :)
            beginSwitchCase(0, 1, case)
              handleBreakStatement(false, break, ;)
            endSwitchCase(0, 1, null, null, 1, case, ;)
          endSwitchBlock(1, {, })
        endSwitchStatement(switch, })
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
