diff options
author | Tim Watson <tim@rabbitmq.com> | 2014-02-11 11:36:06 +0000 |
---|---|---|
committer | Tim Watson <tim@rabbitmq.com> | 2014-02-11 11:36:06 +0000 |
commit | 6e1fff5009a88b0688f80a30f28b971abf696eb6 (patch) | |
tree | eea94b2efd2f17b722ef8f1b5387c8941504586b /src/rabbit_misc.erl | |
parent | b989c04b2dd839b4937c09f673024eddc1906197 (diff) | |
parent | 8f6cd45060f3604b78d36799aac27574850ae516 (diff) | |
download | rabbitmq-server-6e1fff5009a88b0688f80a30f28b971abf696eb6.tar.gz |
merge default into bug24926
Diffstat (limited to 'src/rabbit_misc.erl')
-rw-r--r-- | src/rabbit_misc.erl | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 848c4a87..35afc8fd 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -51,6 +51,7 @@ -export([dict_cons/3, orddict_cons/3, gb_trees_cons/3]). -export([gb_trees_fold/3, gb_trees_foreach/2]). -export([parse_arguments/3]). +-export([all_module_attributes_with_app/1]). -export([all_module_attributes/1, build_acyclic_graph/3]). -export([now_ms/0]). -export([const/1]). @@ -210,6 +211,8 @@ -> {'ok', {atom(), [{string(), string()}], [string()]}} | 'no_command'). -spec(all_module_attributes/1 :: (atom()) -> [{atom(), [term()]}]). +-spec(all_module_attributes_with_app/1 :: + (atom()) -> [{atom(), atom(), [term()]}]). -spec(build_acyclic_graph/3 :: (graph_vertex_fun(), graph_edge_fun(), [{atom(), [term()]}]) -> rabbit_types:ok_or_error2(digraph(), @@ -852,21 +855,38 @@ module_attributes(Module) -> V end. +all_module_attributes_with_app(Name) -> + find_module_attributes( + fun(App, Modules) -> + [{App, Module} || Module <- Modules] + end, + fun ({App, Module}, Acc) -> + case lists:append([Atts || {N, Atts} <- module_attributes(Module), + N =:= Name]) of + [] -> Acc; + Atts -> [{App, Module, Atts} | Acc] + end + end). + all_module_attributes(Name) -> - Modules = - lists:usort( - lists:append( - [Modules || {App, _, _} <- application:loaded_applications(), - {ok, Modules} <- [application:get_key(App, modules)]])), - lists:foldl( + find_module_attributes( + fun(_App, Modules) -> Modules end, fun (Module, Acc) -> case lists:append([Atts || {N, Atts} <- module_attributes(Module), N =:= Name]) of [] -> Acc; Atts -> [{Module, Atts} | Acc] end - end, [], Modules). + end). +find_module_attributes(Generator, Fold) -> + Targets = + lists:usort( + lists:append( + [Generator(App, Modules) || + {App, _, _} <- application:loaded_applications(), + {ok, Modules} <- [application:get_key(App, modules)]])), + lists:foldl(Fold, [], Targets). build_acyclic_graph(VertexFun, EdgeFun, Graph) -> G = digraph:new([acyclic]), |