

#pragma once

#include "../../../oodebug_api.h"

#include "../Command.h"
#include "../Reply.h"

namespace OODebug {

struct OODEBUG_API SignatureCommand : public Command {
		SignatureCommand(qint64 referenceId);
		virtual ~SignatureCommand() override;
		MessageField<qint64> refType{&SignatureCommand::refType, this};
};

struct OODEBUG_API Signature : public Reply {
		virtual ~Signature() override;
		MessageField<QString> signature{&Signature::signature, this};
};

struct OODEBUG_API JVMMethod : public MessagePart {
		virtual ~JVMMethod() override;
		MessageField<qint64> methodID{&JVMMethod::methodID, this};
		MessageField<QString> name{&JVMMethod::name, this};
		MessageField<QString> signature{&JVMMethod::signature, this};
		MessageField<qint32> modBits{&JVMMethod::modBits, this};
};

struct OODEBUG_API MethodsCommand : public Command {
		MethodsCommand(qint64 classId);
		virtual ~MethodsCommand() override;
		MessageField<qint64> refTypeId{&MethodsCommand::refTypeId, this};
};

struct OODEBUG_API Methods : public Reply {
		virtual ~Methods() override;
		MessageField<QList<JVMMethod>> methods{&Methods::methods, this};
};

struct OODEBUG_API SourceFileCommand : public Command {
		SourceFileCommand(qint64 referenceId);
		virtual ~SourceFileCommand() override;
		MessageField<qint64> refType{&SourceFileCommand::refType, this};
};

struct OODEBUG_API SourceFile : public Reply {
		virtual ~SourceFile() override;
		MessageField<QString> sourceFile{&SourceFile::sourceFile, this};
};

}
