Есть ли способ подключиться к генерации классов Java при вызове protoc
? Я знаю, что есть плагины, которые можно создать для protoc, но, насколько я понял, там можно только генерировать дополнительные файлы. Что я хотел бы сделать, так это добавить дополнительный код в классы java на основе некоторых параметров в схемах protobuf.
Итак, для следующей схемы:
syntax = "proto3";
import "google/protobuf/descriptor.proto";
enum DateFormat {
LOCAL_DATE = 0;
LOCAL_DATE_TIME = 1;
}
extend google.protobuf.FieldOptions {
DateFormat format = 95765;
}
message MyMessage {
string name = 1;
sint64 id = 2;
string dateTimeField = 3 [(format) = LOCAL_DATE_TIME];
}
Я хотел бы иметь dateTimeField
в сгенерированном классе Java типа LocalDateTime
, который содержит уже проанализированное время даты.
Наконец-то я нашел решение для этого. Плагины могут не только создавать новые файлы, но и использовать точки вставки для расширения классов, сгенерированных генератором java-кода, см. https://protobuf.dev/reference/java/java-generated/#plugins.
Есть отличная статья, в которой точно описывается, как создать плагин, использующий эти точки вставки.