Просмотр исходного кода

Better way of handling deprecations

Jordan Wilberding 11 лет назад
Родитель
Сommit
e6cc050bf0
3 измененных файлов с 21 добавлено и 10 удалено
  1. 7 1
      rebar.config
  2. 5 5
      src/pooler.erl
  3. 9 4
      src/pooler.hrl

+ 7 - 1
rebar.config

@@ -4,5 +4,11 @@
 %% Type spec dict() is deprecated in R17 to be removed in R18 in
 %% preference for dict:dict(). But the fix is not compatible with <=
 %% R16.
-{erl_opts, [nowarn_deprecated_type]}.
+%% Compiler Options ============================================================
+{erl_opts,
+    [{platform_define, "^[0-9]+", namespaced_types},
+     debug_info,
+     warnings_as_errors,
+     inline]}.
+
 {cover_enabled, true}.

+ 5 - 5
src/pooler.erl

@@ -537,7 +537,7 @@ clean_group_table(MemberPid, #pool{group = _GroupName}) ->
 % If `Pid' is the last element in `CPid's pid list, then the `CPid'
 % entry is removed entirely.
 %
--spec cpmap_remove(pid(), pid() | free, dict()) -> dict().
+-spec cpmap_remove(pid(), pid() | free, p_dict()) -> p_dict().
 cpmap_remove(_Pid, free, CPMap) ->
     CPMap;
 cpmap_remove(Pid, CPid, CPMap) ->
@@ -594,18 +594,18 @@ remove_pid(Pid, Pool) ->
     end.
 
 -spec store_all_members(pid(),
-                        {reference(), free | pid(), {_, _, _}}, dict()) -> dict().
+                        {reference(), free | pid(), {_, _, _}}, p_dict()) -> p_dict().
 store_all_members(Pid, Val = {_MRef, _CPid, _Time}, AllMembers) ->
     dict:store(Pid, Val, AllMembers).
 
--spec set_cpid_for_member(pid(), pid(), dict()) -> dict().
+-spec set_cpid_for_member(pid(), pid(), p_dict()) -> p_dict().
 set_cpid_for_member(MemberPid, CPid, AllMembers) ->
     dict:update(MemberPid,
                 fun({MRef, free, Time = {_, _, _}}) ->
                         {MRef, CPid, Time}
                 end, AllMembers).
 
--spec add_member_to_consumer(pid(), pid(), dict()) -> dict().
+-spec add_member_to_consumer(pid(), pid(), p_dict()) -> p_dict().
 add_member_to_consumer(MemberPid, CPid, CPMap) ->
     %% we can't use dict:update here because we need to create the
     %% monitor if we aren't already tracking this consumer.
@@ -660,7 +660,7 @@ schedule_cull(PoolName, Delay) ->
     %% automatic cancelling
     erlang:send_after(DelayMillis, PoolName, cull_pool).
 
--spec member_info([pid()], dict()) -> [{pid(), member_info()}].
+-spec member_info([pid()], p_dict()) -> [{pid(), member_info()}].
 member_info(Pids, AllMembers) ->
     [ {P, dict:fetch(P, AllMembers)} || P <- Pids ].
 

+ 9 - 4
src/pooler.hrl

@@ -9,6 +9,12 @@
 -type time_unit() :: min | sec | ms | mu.
 -type time_spec() :: {non_neg_integer(), time_unit()}.
 
+-ifdef(namespaced_types).
+-type p_dict() :: dict:dict().
+-else.
+-type p_dict() :: dict().
+-endif.
+
 -record(pool, {
           name             :: atom(),
           group            :: atom(),
@@ -46,13 +52,14 @@
           %% Status is either 'free' or the consumer pid, and Time is
           %% an Erlang timestamp that records when the member became
           %% free.
-          all_members = dict:new()     :: dict(),
+
+          all_members = dict:new()     :: p_dict(),
 
           %% Maps consumer pid to a tuple of the form:
           %% {MonitorRef, MemberList} where MonitorRef is a monitor
           %% reference for the consumer and MemberList is a list of
           %% members being consumed.
-          consumer_to_pid = dict:new() :: dict(),
+          consumer_to_pid = dict:new() :: p_dict(),
 
           %% A list of `{References, Timestamp}' tuples representing
           %% new member start requests that are in-flight. The
@@ -72,5 +79,3 @@
 
 -define(gv(X, Y), proplists:get_value(X, Y)).
 -define(gv(X, Y, D), proplists:get_value(X, Y, D)).
-
-