summaryrefslogtreecommitdiff
path: root/src/rabbit_misc.erl
diff options
context:
space:
mode:
authorTim Watson <tim@rabbitmq.com>2014-02-11 11:36:06 +0000
committerTim Watson <tim@rabbitmq.com>2014-02-11 11:36:06 +0000
commit6e1fff5009a88b0688f80a30f28b971abf696eb6 (patch)
treeeea94b2efd2f17b722ef8f1b5387c8941504586b /src/rabbit_misc.erl
parentb989c04b2dd839b4937c09f673024eddc1906197 (diff)
parent8f6cd45060f3604b78d36799aac27574850ae516 (diff)
downloadrabbitmq-server-6e1fff5009a88b0688f80a30f28b971abf696eb6.tar.gz
merge default into bug24926
Diffstat (limited to 'src/rabbit_misc.erl')
-rw-r--r--src/rabbit_misc.erl34
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]),