|
17 | 17 | package com.typesafe.scalalogging |
18 | 18 |
|
19 | 19 | import org.slf4j.Marker |
20 | | -import scala.reflect.macros.blackbox.Context |
| 20 | +import scala.reflect.macros.blackbox |
21 | 21 |
|
22 | 22 | private object LoggerMacro { |
23 | 23 |
|
24 | | - type LoggerContext = Context { type PrefixType = Logger } |
| 24 | + type LoggerContext = blackbox.Context { type PrefixType = Logger } |
25 | 25 |
|
26 | 26 | // Error |
27 | 27 |
|
28 | | - def errorMessage(c: LoggerContext)(message: c.Expr[String]) = { |
| 28 | + def errorMessage(c: LoggerContext)(message: c.Expr[String]): c.universe.Tree = { |
29 | 29 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
30 | 30 | errorMessageArgs(c)(messageFormat, args: _*) |
31 | 31 | } |
32 | 32 |
|
33 | | - def errorMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 33 | + def errorMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
34 | 34 | import c.universe._ |
35 | 35 | val underlying = q"${c.prefix}.underlying" |
36 | 36 | q"if ($underlying.isErrorEnabled) $underlying.error($message, $cause)" |
37 | 37 | } |
38 | 38 |
|
39 | | - def errorMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*) = { |
| 39 | + def errorMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
40 | 40 | import c.universe._ |
41 | 41 | val underlying = q"${c.prefix}.underlying" |
42 | 42 | val anyRefArgs = formatArgs(c)(args: _*) |
43 | 43 | if (args.length == 2) |
44 | | - q"if ($underlying.isErrorEnabled) $underlying.error($message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 44 | + q"if ($underlying.isErrorEnabled) $underlying.error($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
45 | 45 | else |
46 | 46 | q"if ($underlying.isErrorEnabled) $underlying.error($message, ..$anyRefArgs)" |
47 | 47 | } |
48 | 48 |
|
49 | | - def errorMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]) = { |
| 49 | + def errorMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]): c.universe.Tree = { |
50 | 50 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
51 | 51 | errorMessageArgsMarker(c)(marker, messageFormat, args: _*) |
52 | 52 | } |
53 | 53 |
|
54 | | - def errorMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 54 | + def errorMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
55 | 55 | import c.universe._ |
56 | 56 | val underlying = q"${c.prefix}.underlying" |
57 | 57 | q"if ($underlying.isErrorEnabled) $underlying.error($marker, $message, $cause)" |
58 | 58 | } |
59 | 59 |
|
60 | | - def errorMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*) = { |
| 60 | + def errorMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
61 | 61 | import c.universe._ |
62 | 62 | val underlying = q"${c.prefix}.underlying" |
63 | 63 | val anyRefArgs = formatArgs(c)(args: _*) |
64 | 64 | if (args.length == 2) |
65 | | - q"if ($underlying.isErrorEnabled) $underlying.error($marker, $message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 65 | + q"if ($underlying.isErrorEnabled) $underlying.error($marker, $message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
66 | 66 | else |
67 | 67 | q"if ($underlying.isErrorEnabled) $underlying.error($marker, $message, ..$anyRefArgs)" |
68 | 68 | } |
69 | 69 |
|
| 70 | + def errorCode(c: LoggerContext)(body: c.Expr[Unit]): c.universe.Tree = { |
| 71 | + import c.universe._ |
| 72 | + val underlying = q"${c.prefix}.underlying" |
| 73 | + q"if ($underlying.isErrorEnabled) $body" |
| 74 | + } |
| 75 | + |
70 | 76 | // Warn |
71 | 77 |
|
72 | | - def warnMessage(c: LoggerContext)(message: c.Expr[String]) = { |
| 78 | + def warnMessage(c: LoggerContext)(message: c.Expr[String]): c.universe.Tree = { |
73 | 79 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
74 | 80 | warnMessageArgs(c)(messageFormat, args: _*) |
75 | 81 | } |
76 | 82 |
|
77 | | - def warnMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 83 | + def warnMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
78 | 84 | import c.universe._ |
79 | 85 | val underlying = q"${c.prefix}.underlying" |
80 | 86 | q"if ($underlying.isWarnEnabled) $underlying.warn($message, $cause)" |
81 | 87 | } |
82 | 88 |
|
83 | | - def warnMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*) = { |
| 89 | + def warnMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
84 | 90 | import c.universe._ |
85 | 91 | val underlying = q"${c.prefix}.underlying" |
86 | 92 | val anyRefArgs = formatArgs(c)(args: _*) |
87 | 93 | if (args.length == 2) |
88 | | - q"if ($underlying.isWarnEnabled) $underlying.warn($message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 94 | + q"if ($underlying.isWarnEnabled) $underlying.warn($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
89 | 95 | else |
90 | 96 | q"if ($underlying.isWarnEnabled) $underlying.warn($message, ..$anyRefArgs)" |
91 | 97 | } |
92 | 98 |
|
93 | | - def warnMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]) = { |
| 99 | + def warnMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]): c.universe.Tree = { |
94 | 100 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
95 | 101 | warnMessageArgsMarker(c)(marker, messageFormat, args: _*) |
96 | 102 | } |
97 | 103 |
|
98 | | - def warnMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 104 | + def warnMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
99 | 105 | import c.universe._ |
100 | 106 | val underlying = q"${c.prefix}.underlying" |
101 | 107 | q"if ($underlying.isWarnEnabled) $underlying.warn($marker, $message, $cause)" |
102 | 108 | } |
103 | 109 |
|
104 | | - def warnMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*) = { |
| 110 | + def warnMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
105 | 111 | import c.universe._ |
106 | 112 | val underlying = q"${c.prefix}.underlying" |
107 | 113 | val anyRefArgs = formatArgs(c)(args: _*) |
108 | 114 | if (args.length == 2) |
109 | | - q"if ($underlying.isWarnEnabled) $underlying.warn($marker, $message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 115 | + q"if ($underlying.isWarnEnabled) $underlying.warn($marker, $message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
110 | 116 | else |
111 | 117 | q"if ($underlying.isWarnEnabled) $underlying.warn($marker, $message, ..$anyRefArgs)" |
112 | 118 | } |
113 | 119 |
|
| 120 | + def warnCode(c: LoggerContext)(body: c.Expr[Unit]): c.universe.Tree = { |
| 121 | + import c.universe._ |
| 122 | + val underlying = q"${c.prefix}.underlying" |
| 123 | + q"if ($underlying.isWarnEnabled) $body" |
| 124 | + } |
| 125 | + |
114 | 126 | // Info |
115 | 127 |
|
116 | | - def infoMessage(c: LoggerContext)(message: c.Expr[String]) = { |
| 128 | + def infoMessage(c: LoggerContext)(message: c.Expr[String]): c.universe.Tree = { |
117 | 129 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
118 | 130 | infoMessageArgs(c)(messageFormat, args: _*) |
119 | 131 | } |
120 | 132 |
|
121 | | - def infoMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 133 | + def infoMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
122 | 134 | import c.universe._ |
123 | 135 | val underlying = q"${c.prefix}.underlying" |
124 | 136 | q"if ($underlying.isInfoEnabled) $underlying.info($message, $cause)" |
125 | 137 | } |
126 | 138 |
|
127 | | - def infoMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*) = { |
| 139 | + def infoMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
128 | 140 | import c.universe._ |
129 | 141 | val underlying = q"${c.prefix}.underlying" |
130 | 142 | val anyRefArgs = formatArgs(c)(args: _*) |
131 | 143 | if (args.length == 2) |
132 | | - q"if ($underlying.isInfoEnabled) $underlying.info($message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 144 | + q"if ($underlying.isInfoEnabled) $underlying.info($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
133 | 145 | else |
134 | 146 | q"if ($underlying.isInfoEnabled) $underlying.info($message, ..$anyRefArgs)" |
135 | 147 | } |
136 | 148 |
|
137 | | - def infoMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]) = { |
| 149 | + def infoMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]): c.universe.Tree = { |
138 | 150 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
139 | 151 | infoMessageArgsMarker(c)(marker, messageFormat, args: _*) |
140 | 152 | } |
141 | 153 |
|
142 | | - def infoMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 154 | + def infoMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
143 | 155 | import c.universe._ |
144 | 156 | val underlying = q"${c.prefix}.underlying" |
145 | 157 | q"if ($underlying.isInfoEnabled) $underlying.info($marker, $message, $cause)" |
146 | 158 | } |
147 | 159 |
|
148 | | - def infoMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*) = { |
| 160 | + def infoMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
149 | 161 | import c.universe._ |
150 | 162 | val underlying = q"${c.prefix}.underlying" |
151 | 163 | val anyRefArgs = formatArgs(c)(args: _*) |
152 | 164 | if (args.length == 2) |
153 | | - q"if ($underlying.isInfoEnabled) $underlying.info($marker, $message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 165 | + q"if ($underlying.isInfoEnabled) $underlying.info($marker, $message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
154 | 166 | else |
155 | 167 | q"if ($underlying.isInfoEnabled) $underlying.info($marker, $message, ..$anyRefArgs)" |
156 | 168 | } |
157 | 169 |
|
| 170 | + def infoCode(c: LoggerContext)(body: c.Expr[Unit]): c.universe.Tree = { |
| 171 | + import c.universe._ |
| 172 | + val underlying = q"${c.prefix}.underlying" |
| 173 | + q"if ($underlying.isInfoEnabled) $body" |
| 174 | + } |
| 175 | + |
158 | 176 | // Debug |
159 | 177 |
|
160 | | - def debugMessage(c: LoggerContext)(message: c.Expr[String]) = { |
| 178 | + def debugMessage(c: LoggerContext)(message: c.Expr[String]): c.universe.Tree = { |
161 | 179 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
162 | 180 | debugMessageArgs(c)(messageFormat, args: _*) |
163 | 181 | } |
164 | 182 |
|
165 | | - def debugMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 183 | + def debugMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
166 | 184 | import c.universe._ |
167 | 185 | val underlying = q"${c.prefix}.underlying" |
168 | 186 | q"if ($underlying.isDebugEnabled) $underlying.debug($message, $cause)" |
169 | 187 | } |
170 | 188 |
|
171 | | - def debugMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*) = { |
| 189 | + def debugMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
172 | 190 | import c.universe._ |
173 | 191 | val underlying = q"${c.prefix}.underlying" |
174 | 192 | val anyRefArgs = formatArgs(c)(args: _*) |
175 | 193 | if (args.length == 2) |
176 | | - q"if ($underlying.isDebugEnabled) $underlying.debug($message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 194 | + q"if ($underlying.isDebugEnabled) $underlying.debug($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
177 | 195 | else |
178 | 196 | q"if ($underlying.isDebugEnabled) $underlying.debug($message, ..$anyRefArgs)" |
179 | 197 | } |
180 | 198 |
|
181 | | - def debugMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]) = { |
| 199 | + def debugMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]): c.universe.Tree = { |
182 | 200 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
183 | 201 | debugMessageArgsMarker(c)(marker, messageFormat, args: _*) |
184 | 202 | } |
185 | 203 |
|
186 | | - def debugMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 204 | + def debugMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
187 | 205 | import c.universe._ |
188 | 206 | val underlying = q"${c.prefix}.underlying" |
189 | 207 | q"if ($underlying.isDebugEnabled) $underlying.debug($marker, $message, $cause)" |
190 | 208 | } |
191 | 209 |
|
192 | | - def debugMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*) = { |
| 210 | + def debugMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
193 | 211 | import c.universe._ |
194 | 212 | val underlying = q"${c.prefix}.underlying" |
195 | 213 | val anyRefArgs = formatArgs(c)(args: _*) |
196 | 214 | if (args.length == 2) |
197 | | - q"if ($underlying.isDebugEnabled) $underlying.debug($marker, $message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 215 | + q"if ($underlying.isDebugEnabled) $underlying.debug($marker, $message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
198 | 216 | else |
199 | 217 | q"if ($underlying.isDebugEnabled) $underlying.debug($marker, $message, ..$anyRefArgs)" |
200 | 218 | } |
201 | 219 |
|
| 220 | + def debugCode(c: LoggerContext)(body: c.Expr[Unit]): c.universe.Tree = { |
| 221 | + import c.universe._ |
| 222 | + val underlying = q"${c.prefix}.underlying" |
| 223 | + q"if ($underlying.isDebugEnabled) $body" |
| 224 | + } |
| 225 | + |
202 | 226 | // Trace |
203 | 227 |
|
204 | | - def traceMessage(c: LoggerContext)(message: c.Expr[String]) = { |
| 228 | + def traceMessage(c: LoggerContext)(message: c.Expr[String]): c.universe.Tree = { |
205 | 229 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
206 | 230 | traceMessageArgs(c)(messageFormat, args: _*) |
207 | 231 | } |
208 | 232 |
|
209 | | - def traceMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 233 | + def traceMessageCause(c: LoggerContext)(message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
210 | 234 | import c.universe._ |
211 | 235 | val underlying = q"${c.prefix}.underlying" |
212 | 236 | q"if ($underlying.isTraceEnabled) $underlying.trace($message, $cause)" |
213 | 237 | } |
214 | 238 |
|
215 | | - def traceMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*) = { |
| 239 | + def traceMessageArgs(c: LoggerContext)(message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
216 | 240 | import c.universe._ |
217 | 241 | val underlying = q"${c.prefix}.underlying" |
218 | 242 | val anyRefArgs = formatArgs(c)(args: _*) |
219 | 243 | if (args.length == 2) |
220 | | - q"if ($underlying.isTraceEnabled) $underlying.trace($message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 244 | + q"if ($underlying.isTraceEnabled) $underlying.trace($message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
221 | 245 | else |
222 | 246 | q"if ($underlying.isTraceEnabled) $underlying.trace($message, ..$anyRefArgs)" |
223 | 247 | } |
224 | 248 |
|
225 | | - def traceMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]) = { |
| 249 | + def traceMessageMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String]): c.universe.Tree = { |
226 | 250 | val (messageFormat, args) = deconstructInterpolatedMessage(c)(message) |
227 | 251 | traceMessageArgsMarker(c)(marker, messageFormat, args: _*) |
228 | 252 | } |
229 | 253 |
|
230 | | - def traceMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = { |
| 254 | + def traceMessageCauseMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]): c.universe.Tree = { |
231 | 255 | import c.universe._ |
232 | 256 | val underlying = q"${c.prefix}.underlying" |
233 | 257 | q"if ($underlying.isTraceEnabled) $underlying.trace($marker, $message, $cause)" |
234 | 258 | } |
235 | 259 |
|
236 | | - def traceMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*) = { |
| 260 | + def traceMessageArgsMarker(c: LoggerContext)(marker: c.Expr[Marker], message: c.Expr[String], args: c.Expr[Any]*): c.universe.Tree = { |
237 | 261 | import c.universe._ |
238 | 262 | val underlying = q"${c.prefix}.underlying" |
239 | 263 | val anyRefArgs = formatArgs(c)(args: _*) |
240 | 264 | if (args.length == 2) |
241 | | - q"if ($underlying.isTraceEnabled) $underlying.trace($marker, $message, _root_.scala.Array(${anyRefArgs(0)}, ${anyRefArgs(1)}): _*)" |
| 265 | + q"if ($underlying.isTraceEnabled) $underlying.trace($marker, $message, _root_.scala.Array(${anyRefArgs.head}, ${anyRefArgs(1)}): _*)" |
242 | 266 | else |
243 | 267 | q"if ($underlying.isTraceEnabled) $underlying.trace($marker, $message, ..$anyRefArgs)" |
244 | 268 | } |
245 | 269 |
|
246 | | - /** Checks whether `messsage` is an interpolated string and transforms it into SLF4J string interpolation. */ |
| 270 | + def traceCode(c: LoggerContext)(body: c.Expr[Unit]): c.universe.Tree = { |
| 271 | + import c.universe._ |
| 272 | + val underlying = q"${c.prefix}.underlying" |
| 273 | + q"if ($underlying.isTraceEnabled) $body" |
| 274 | + } |
| 275 | + |
| 276 | + /** Checks whether `message` is an interpolated string and transforms it into SLF4J string interpolation. */ |
247 | 277 | private def deconstructInterpolatedMessage(c: LoggerContext)(message: c.Expr[String]) = { |
248 | 278 | import c.universe._ |
249 | 279 |
|
|
0 commit comments