diff options
author | Carlos Ferreyra <crypticmind@gmail.com> | 2014-06-25 01:32:17 -0300 |
---|---|---|
committer | Carlos Ferreyra <cferreyra@despegar.com> | 2014-07-03 12:38:42 -0300 |
commit | 69dbbb558737f482a1003fe35b19da7e8bd35309 (patch) | |
tree | 6da06c38e63410c194b57c25f9a7d055c819a7d1 /kamon-macros | |
parent | 4d5803e579e223c4f4f5cb37ab79ca069a007949 (diff) | |
download | Kamon-69dbbb558737f482a1003fe35b19da7e8bd35309.tar.gz Kamon-69dbbb558737f482a1003fe35b19da7e8bd35309.tar.bz2 Kamon-69dbbb558737f482a1003fe35b19da7e8bd35309.zip |
= core: Inline variant of withTraceContext using macros.
Diffstat (limited to 'kamon-macros')
-rw-r--r-- | kamon-macros/src/main/scala/kamon/macros/InlineTraceContextMacro.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/kamon-macros/src/main/scala/kamon/macros/InlineTraceContextMacro.scala b/kamon-macros/src/main/scala/kamon/macros/InlineTraceContextMacro.scala new file mode 100644 index 00000000..ea8cc7b8 --- /dev/null +++ b/kamon-macros/src/main/scala/kamon/macros/InlineTraceContextMacro.scala @@ -0,0 +1,46 @@ +/* + * ========================================================================================= + * Copyright © 2013 the kamon project <http://kamon.io/> + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + * ========================================================================================= + */ + +package kamon.macros + +import scala.language.experimental.macros +import scala.reflect.macros.Context + +object InlineTraceContextMacro { + + // Macro to generate an inline version of kamon.trace.TraceRecorder.withTraceContext + def withInlineTraceContextImpl[T: c.WeakTypeTag, TC: c.WeakTypeTag](c: Context)(traceCtx: c.Expr[TC])(thunk: c.Expr[T]) = { + import c.universe._ + + val inlineThunk = + Block( + List( + ValDef( + Modifiers(), newTermName("oldContext"), TypeTree(), + Select(Ident(newTermName("TraceRecorder")), newTermName("currentContext"))), + Apply( + Select(Ident(newTermName("TraceRecorder")), newTermName("setContext")), + List(traceCtx.tree))), + Try( + thunk.tree, + List(), + Apply( + Select(Ident(newTermName("TraceRecorder")), newTermName("setContext")), + List(Ident(newTermName("oldContext")))))) + + c.Expr[T](inlineThunk) + } +} |