diff --git a/lib/grpc_reflection/service/builder.ex b/lib/grpc_reflection/service/builder.ex index 86e4189..87a8d25 100644 --- a/lib/grpc_reflection/service/builder.ex +++ b/lib/grpc_reflection/service/builder.ex @@ -91,7 +91,7 @@ defmodule GrpcReflection.Service.Builder do symbol: Enum.find(fields, fn f -> f.name == name end).type_name } end) - |> Enum.reject(fn %{symbol: s} -> s == nil end) + |> Enum.reject(fn %{symbol: s} -> is_nil(s) or State.has_symbol?(state, s) end) |> Enum.reduce(state, fn %{mod: mod, symbol: symbol}, state -> symbol = Util.trim_symbol(symbol) diff --git a/test/service/builder_test.exs b/test/service/builder_test.exs index b73c88a..fda0ef0 100644 --- a/test/service/builder_test.exs +++ b/test/service/builder_test.exs @@ -141,12 +141,12 @@ defmodule GrpcReflection.Service.BuilderTest do assert %State{services: [WrappedService]} = tree end - @tag skip: "Recursive message structure currently fails to parse" test "handles a recursive message structure" do assert {:ok, tree} = Builder.build_reflection_tree([RecursiveMessage.Service.Service]) assert tree.files |> Map.keys() |> Enum.sort() == [ "recursive_message.Reply.proto", + "recursive_message.Request.proto", "recursive_message.Service.proto" ]