#pragma once

#include "LibLsp/JsonRpc/RequestInMessage.h"
#include "LibLsp/JsonRpc/lsResponseMessage.h"

#include "LibLsp/lsp/CodeActionParams.h"
#include "checkHashCodeEqualsStatus.h"
#include "checkConstructorsStatus.h"

struct LspDelegateField
{
    LspVariableBinding field;
    std::vector<LspMethodBinding> delegateMethods;

    MAKE_SWAP_METHOD(LspDelegateField, field, delegateMethods);
};
MAKE_REFLECT_STRUCT(LspDelegateField, field, delegateMethods);

struct CheckDelegateMethodsResponse
{
    std::vector<LspDelegateField> delegateFields;

    MAKE_SWAP_METHOD(CheckDelegateMethodsResponse, delegateFields)
};
MAKE_REFLECT_STRUCT(CheckDelegateMethodsResponse, delegateFields)

DEFINE_REQUEST_RESPONSE_TYPE(
    java_checkDelegateMethodsStatus, lsCodeActionParams, CheckDelegateMethodsResponse, "java/checkDelegateMethodsStatus"
);
