aboutsummaryrefslogtreecommitdiff
path: root/kamon-macros
diff options
context:
space:
mode:
authorCarlos Ferreyra <crypticmind@gmail.com>2014-06-25 01:32:17 -0300
committerCarlos Ferreyra <cferreyra@despegar.com>2014-07-03 12:38:42 -0300
commit69dbbb558737f482a1003fe35b19da7e8bd35309 (patch)
tree6da06c38e63410c194b57c25f9a7d055c819a7d1 /kamon-macros
parent4d5803e579e223c4f4f5cb37ab79ca069a007949 (diff)
downloadKamon-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.scala46
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)
+ }
+}