Skip to content

Commit 9d77b12

Browse files
runzwcopybara-github
authored andcommitted
Add option_dependency support to UPB's FileDef
PiperOrigin-RevId: 902855746
1 parent 8a5dcca commit 9d77b12

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

upb/reflection/file_def.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct upb_FileDef {
3838
const upb_FileDef** deps;
3939
const int32_t* public_deps;
4040
const int32_t* weak_deps;
41+
const upb_StringView* option_deps;
4142
const upb_MessageDef* top_lvl_msgs;
4243
const upb_EnumDef* top_lvl_enums;
4344
const upb_FieldDef* top_lvl_exts;
@@ -48,6 +49,7 @@ struct upb_FileDef {
4849
int dep_count;
4950
int public_dep_count;
5051
int weak_dep_count;
52+
int option_dep_count;
5153
int top_lvl_msg_count;
5254
int top_lvl_enum_count;
5355
int top_lvl_ext_count;
@@ -105,6 +107,10 @@ int upb_FileDef_WeakDependencyCount(const upb_FileDef* f) {
105107
return f->weak_dep_count;
106108
}
107109

110+
int upb_FileDef_OptionDependencyCount(const upb_FileDef* f) {
111+
return f->option_dep_count;
112+
}
113+
108114
const int32_t* _upb_FileDef_PublicDependencyIndexes(const upb_FileDef* f) {
109115
return f->public_deps;
110116
}
@@ -142,10 +148,15 @@ const upb_FileDef* upb_FileDef_PublicDependency(const upb_FileDef* f, int i) {
142148
}
143149

144150
const upb_FileDef* upb_FileDef_WeakDependency(const upb_FileDef* f, int i) {
145-
UPB_ASSERT(0 <= i && i < f->public_dep_count);
151+
UPB_ASSERT(0 <= i && i < f->weak_dep_count);
146152
return f->deps[f->weak_deps[i]];
147153
}
148154

155+
upb_StringView upb_FileDef_OptionDependency(const upb_FileDef* f, int i) {
156+
UPB_ASSERT(0 <= i && i < f->option_dep_count);
157+
return f->option_deps[i];
158+
}
159+
149160
const upb_MessageDef* upb_FileDef_TopLevelMessage(const upb_FileDef* f, int i) {
150161
UPB_ASSERT(0 <= i && i < f->top_lvl_msg_count);
151162
return _upb_MessageDef_At(f->top_lvl_msgs, i);
@@ -406,6 +417,17 @@ void _upb_FileDef_Create(upb_DefBuilder* ctx,
406417
mutable_weak_deps[i] = weak_deps[i];
407418
}
408419

420+
const upb_StringView* option_deps =
421+
google_protobuf_FileDescriptorProto_option_dependency(file_proto, &n);
422+
file->option_dep_count = n;
423+
file->option_deps = UPB_DEFBUILDER_ALLOCARRAY(ctx, upb_StringView, n);
424+
upb_StringView* mutable_option_deps = (upb_StringView*)file->option_deps;
425+
for (size_t i = 0; i < n; i++) {
426+
char* dup = _strviewdup(ctx, option_deps[i]);
427+
mutable_option_deps[i].data = dup;
428+
mutable_option_deps[i].size = option_deps[i].size;
429+
}
430+
409431
// Create enums.
410432
enums = google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
411433
file->top_lvl_enum_count = n;

upb/reflection/file_def.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#ifndef UPB_REFLECTION_FILE_DEF_H_
1111
#define UPB_REFLECTION_FILE_DEF_H_
1212

13+
#include "upb/base/string_view.h"
1314
#include "upb/reflection/common.h"
1415
#include "upb/reflection/descriptor_bootstrap.h"
1516

@@ -50,6 +51,9 @@ int upb_FileDef_TopLevelMessageCount(const upb_FileDef* f);
5051
const upb_FileDef* upb_FileDef_WeakDependency(const upb_FileDef* f, int i);
5152
int upb_FileDef_WeakDependencyCount(const upb_FileDef* f);
5253

54+
upb_StringView upb_FileDef_OptionDependency(const upb_FileDef* f, int i);
55+
int upb_FileDef_OptionDependencyCount(const upb_FileDef* f);
56+
5357
// Returns whether |symbol| is transitively included by |f|
5458
bool upb_FileDef_Resolves(const upb_FileDef* f, const char* symbol);
5559

upb/util/def_to_proto.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,13 @@ static google_protobuf_FileDescriptorProto* filedef_toproto(upb_ToProto_Context*
591591
const int32_t* weak_dep_nums = _upb_FileDef_WeakDependencyIndexes(f);
592592
if (n) memcpy(weak_deps, weak_dep_nums, n * sizeof(int32_t));
593593

594+
n = upb_FileDef_OptionDependencyCount(f);
595+
upb_StringView* option_deps =
596+
google_protobuf_FileDescriptorProto_resize_option_dependency(proto, n, ctx->arena);
597+
for (size_t i = 0; i < n; i++) {
598+
option_deps[i] = strviewdup2(ctx, upb_FileDef_OptionDependency(f, i));
599+
}
600+
594601
n = upb_FileDef_TopLevelMessageCount(f);
595602
google_protobuf_DescriptorProto** msgs =
596603
google_protobuf_FileDescriptorProto_resize_message_type(proto, n, ctx->arena);

0 commit comments

Comments
 (0)