@@ -88,6 +88,49 @@ defmodule Mix.Tasks.Compile.App do
88
88
properties = Keyword . from_enum ( properties )
89
89
properties = Keyword . put properties , :description ,
90
90
to_char_list ( properties [ :description ] || app )
91
- Keyword . put properties , :registered , ( properties [ :registered ] || [ ] )
91
+ properties = Keyword . put properties , :registered , ( properties [ :registered ] || [ ] )
92
+ validate_properties ( properties )
93
+ properties
94
+ end
95
+
96
+ defp validate_properties ( properties ) do
97
+ unless nil? ( properties [ :description ] ) or is_list ( properties [ :description ] ) do
98
+ raise ( Mix.Error , message: "Application description (:description) is not a character list (got #{ inspect properties [ :description ] } )" )
99
+ end
100
+ unless nil? ( properties [ :id ] ) or is_list ( properties [ :id ] ) do
101
+ raise ( Mix.Error , message: "Application id (:id) is not a character list (got #{ inspect properties [ :id ] } instead)" )
102
+ end
103
+ unless nil? ( properties [ :vsn ] ) or is_list ( properties [ :vsn ] ) do
104
+ raise ( Mix.Error , message: "Application vsn (:vsn) is not a character list (got #{ inspect properties [ :vsn ] } instead)" )
105
+ end
106
+ unless nil? ( properties [ :modules ] ) or ( is_list ( properties [ :modules ] ) and Enum . all? ( properties [ :modules ] , is_atom ( & 1 ) ) ) do
107
+ raise ( Mix.Error , message: "Application modules (:modules) should be a list of atoms (got #{ inspect properties [ :modules ] } instead)" )
108
+ end
109
+ unless nil? ( properties [ :maxT ] ) or properties [ :maxT ] == :infinity or is_integer ( properties [ :maxT ] ) do
110
+ raise ( Mix.Error , message: "Application maximum time (:maxT) is not an integer or :infinity (got #{ inspect properties [ :maxT ] } instead)" )
111
+ end
112
+ unless nil? ( properties [ :registered ] ) or is_list ( properties [ :registered ] ) and ( Enum . all? ( properties [ :registered ] , is_atom ( & 1 ) ) ) do
113
+ raise ( Mix.Error , message: "Application registered processes (:registered) should be a list of atoms (got #{ inspect properties [ :registered ] } instead)" )
114
+ end
115
+ unless nil? ( properties [ :included_applications ] ) or ( is_list ( properties [ :included_applications ] ) and Enum . all? ( properties [ :included_applications ] , is_atom ( & 1 ) ) ) do
116
+ raise ( Mix.Error , message: "Application included applications (:included_applications) should be a list of atoms (got #{ inspect properties [ :included_applications ] } instead)" )
117
+ end
118
+ unless nil? ( properties [ :applications ] ) or ( is_list ( properties [ :applications ] ) and Enum . all? ( properties [ :applications ] , is_atom ( & 1 ) ) ) do
119
+ raise ( Mix.Error , message: "Application dependencies (:applications) should be a list of atoms (got #{ inspect properties [ :applications ] } instead)" )
120
+ end
121
+ unless nil? ( properties [ :env ] ) or ( Keyword . keyword? ( properties [ :env ] ) ) do
122
+ raise ( Mix.Error , message: "Application dependencies (:env) should be a keyword list (got #{ inspect properties [ :env ] } instead)" )
123
+ end
124
+ unless nil? ( properties [ :mod ] ) do
125
+ case properties [ :mod ] do
126
+ [ ] -> :ok
127
+ { module , _start_args } when is_atom ( module ) -> :ok
128
+ other ->
129
+ raise ( Mix.Error , message: "Application callback module (:mod) should be either [] or {module, start_args} (got #{ inspect properties [ :mod ] } instead)" )
130
+ end
131
+ end
132
+ unless nil? ( properties [ :start_phases ] ) or ( Keyword . keyword? ( properties [ :start_phases ] ) ) do
133
+ raise ( Mix.Error , message: "Application start phases (:start_phases) should be a keyword list (got #{ inspect properties [ :start_phases ] } instead)" )
134
+ end
92
135
end
93
136
end
0 commit comments