Program: 22574
Project: 22574
Buggy source:
UserActor(ProtectedData protectedData){
  this.protectedData=protectedData;
  receive(ReceiveBuilder.match(Messages.Join.class,join -> {
    transport=context().actorOf(Props.create(WebsocketTransport.class,protectedData,join));
    transport.tell(join,self());
  }
).match(Messages.MethodReturn.class,methodReturn -> {
    final Messages.MethodReturn message=new Messages.MethodReturn(methodReturn.context,methodReturn.returnValue,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.ClientFunctionCall.class,clientFunctionCall -> {
    final Messages.ClientFunctionCall message=new Messages.ClientFunctionCall(clientFunctionCall.method,clientFunctionCall.hubName,clientFunctionCall.context,clientFunctionCall.sendType,clientFunctionCall.name,clientFunctionCall.args,clientFunctionCall.clients,clientFunctionCall.allExcept,clientFunctionCall.groupName,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.ClientCallEnd.class,clientCallEnd -> {
    final Messages.ClientCallEnd message=new Messages.ClientCallEnd(clientCallEnd.context,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.Reconnect.class,reconnect -> {
    attemptStopTransport();
    final Messages.Join join=new Messages.Join(reconnect.out,reconnect.in,reconnect.uuid);
    transport=context().actorOf(Props.create(WebsocketTransport.class,protectedData,join));
    transport.tell(reconnect,self());
    resendMessages();
  }
).match(Messages.Quit.class,quit -> {
    context().setReceiveTimeout(Duration.create("String_Node_Str"));
  }
).match(ReceiveTimeout.class,r -> {
    context().stop(self());
  }
).match(Messages.Ack.class,ack -> {
    messages.remove(ack.MessageId);
  }
).build());
}

Fixed version (ground truth):
UserActor(ProtectedData protectedData){
  this.protectedData=protectedData;
  receive(ReceiveBuilder.match(Messages.Join.class,join -> {
    transport=context().actorOf(Props.create(WebsocketTransport.class,protectedData,join));
    transport.tell(join,self());
    connected=true;
    context().watch(transport);
  }
).match(Messages.MethodReturn.class,methodReturn -> {
    final Messages.MethodReturn message=new Messages.MethodReturn(methodReturn.context,methodReturn.returnValue,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.ClientFunctionCall.class,clientFunctionCall -> {
    final Messages.ClientFunctionCall message=new Messages.ClientFunctionCall(clientFunctionCall.method,clientFunctionCall.hubName,clientFunctionCall.context,clientFunctionCall.sendType,clientFunctionCall.name,clientFunctionCall.args,clientFunctionCall.clients,clientFunctionCall.allExcept,clientFunctionCall.groupName,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.ClientCallEnd.class,clientCallEnd -> {
    final Messages.ClientCallEnd message=new Messages.ClientCallEnd(clientCallEnd.context,messageId++);
    messages.put(messageId,message);
    transport.tell(message,self());
  }
).match(Messages.Reconnect.class,reconnect -> {
    attemptStopTransport();
    final Messages.Join join=new Messages.Join(reconnect.out,reconnect.in,reconnect.uuid);
    transport=context().actorOf(Props.create(WebsocketTransport.class,protectedData,join));
    transport.tell(reconnect,self());
    connected=true;
    resendMessages();
  }
).match(Messages.Quit.class,quit -> {
    context().setReceiveTimeout(Duration.create("String_Node_Str"));
  }
).match(ReceiveTimeout.class,r -> {
    context().stop(self());
  }
).match(Messages.Ack.class,ack -> {
    messages.remove(ack.MessageId);
  }
).match(Terminated.class,t -> t.actor().equals(transport),t -> {
    transport=null;
    connected=false;
  }
).build());
}