diff options
author | Ivan Topolnjak <ivantopo@gmail.com> | 2014-07-03 13:48:24 -0300 |
---|---|---|
committer | Ivan Topolnjak <ivantopo@gmail.com> | 2014-07-03 13:48:24 -0300 |
commit | b0df3654cb82d87971fa67ff56a2e183dc93358f (patch) | |
tree | c2ab91b00751c4967ce3aa066c1428a70eb514cf /kamon-macros/src | |
parent | 8bf93c1f26453ef298d965aaa8b9cb932f8b2a64 (diff) | |
parent | 69dbbb558737f482a1003fe35b19da7e8bd35309 (diff) | |
download | Kamon-b0df3654cb82d87971fa67ff56a2e183dc93358f.tar.gz Kamon-b0df3654cb82d87971fa67ff56a2e183dc93358f.tar.bz2 Kamon-b0df3654cb82d87971fa67ff56a2e183dc93358f.zip |
Merge remote-tracking branch 'crypticmind/master'
Diffstat (limited to 'kamon-macros/src')
-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) + } +} |