lib/tapioca/dsl/compilers/protobuf.rb in tapioca-0.11.0 vs lib/tapioca/dsl/compilers/protobuf.rb in tapioca-0.11.1

- old
+ new

@@ -143,11 +143,13 @@ # The workaround is to create an initialize that takes a **kwargs instead. kwargs_parameter = create_kw_rest_param("fields", type: "T.untyped") klass.create_method("initialize", parameters: [kwargs_parameter], return_type: "void") end else - raise TypeError, "Unexpected descriptor class: #{descriptor.class.name}" + add_error(<<~MSG.strip) + Unexpected descriptor class `#{descriptor.class.name}` for `#{constant}` + MSG end end end end @@ -160,10 +162,20 @@ enum_modules = ObjectSpace.each_object(Google::Protobuf::EnumDescriptor).map do |desc| T.cast(desc, Google::Protobuf::EnumDescriptor).enummodule end - results = T.cast(ObjectSpace.each_object(marker).to_a, T::Array[Module]).concat(enum_modules) + results = if Google::Protobuf.const_defined?(:AbstractMessage) + abstract_message_const = ::Google::Protobuf.const_get(:AbstractMessage) + descendants_of(abstract_message_const) - [abstract_message_const] + else + T.cast( + ObjectSpace.each_object(marker).to_a, + T::Array[Module], + ) + end + + results = results.concat(enum_modules) results.any? ? results + [Google::Protobuf::RepeatedField, Google::Protobuf::Map] : [] end end private