Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 15 additions & 19 deletions src/main/scala-3/org/apache/logging/log4j/scala/LoggerMacro.scala
Original file line number Diff line number Diff line change
Expand Up @@ -451,52 +451,52 @@ private object LoggerMacro {
args: Expr[Seq[Any]]) (using Quotes) = {
val anyRefArgs = formatArgs(args)
if(anyRefArgs.isEmpty)
'{ if ($underlying.delegate.isEnabled($level)) $underlying.logMessage($level, null, ${charSequenceExprToStringExpr(message)}, null) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.logMessage($level, null, $message.toString, null) }
else if(anyRefArgs.length == 1)
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, ${charSequenceExprToStringExpr(message)}, ${anyRefArgs.head}) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, $message.toString, ${anyRefArgs.head}) }
else
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, ${charSequenceExprToStringExpr(message)}, ${Expr.ofSeq(anyRefArgs)}*) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, $message.toString, ${Expr.ofSeq(anyRefArgs)}*) }
}

private def logMessageArgsThrowable(underlying: Expr[Logger], level: Expr[Level], message: Expr[CharSequence],
args: Expr[Seq[Any]], throwable: Expr[Throwable]) (using Quotes) = {
val anyRefArgs = formatArgs(args)
if(anyRefArgs.isEmpty)
'{ if ($underlying.delegate.isEnabled($level)) $underlying.logMessage($level, null, ${charSequenceExprToStringExpr(message)}, $throwable) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.logMessage($level, null, $message.toString, $throwable) }
else if(anyRefArgs.length == 1)
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, ${charSequenceExprToStringExpr(message)}, ${anyRefArgs.head}, $throwable) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, $message.toString, ${anyRefArgs.head}, $throwable) }
else {
val extendedArgs = anyRefArgs :+ throwable
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, ${charSequenceExprToStringExpr(message)}, ${Expr.ofSeq(extendedArgs)}*) }
'{ if ($underlying.delegate.isEnabled($level)) $underlying.delegate.log($level, $message.toString, ${Expr.ofSeq(extendedArgs)}*) }
}
}

private def logMarkerMessageArgs(underlying: Expr[Logger], level: Expr[Level], marker: Expr[Marker], message: Expr[CharSequence],
args: Expr[Seq[Any]]) (using Quotes) = {
val anyRefArgs = formatArgs(args)
if(anyRefArgs.isEmpty)
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.logMessage($level, $marker, ${charSequenceExprToStringExpr(message)}, null) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.logMessage($level, $marker, $message.toString, null) }
else if(anyRefArgs.length == 1)
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, ${charSequenceExprToStringExpr(message)}, ${anyRefArgs.head}) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, $message.toString, ${anyRefArgs.head}) }
else
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, ${charSequenceExprToStringExpr(message)}, ${Expr.ofSeq(anyRefArgs)}*) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, $message.toString, ${Expr.ofSeq(anyRefArgs)}*) }
}

private def logMarkerMessageArgsThrowable(underlying: Expr[Logger], level: Expr[Level], marker: Expr[Marker],
message: Expr[CharSequence], args: Expr[Seq[Any]], throwable: Expr[Throwable]) (using Quotes) = {
val anyRefArgs = formatArgs(args)
if(anyRefArgs.isEmpty)
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.logMessage($level, $marker, ${charSequenceExprToStringExpr(message)}, $throwable) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.logMessage($level, $marker, $message.toString, $throwable) }
else if(anyRefArgs.length == 1)
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, ${charSequenceExprToStringExpr(message)}, ${anyRefArgs.head}, $throwable) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, $message.toString, ${anyRefArgs.head}, $throwable) }
else {
val extendedArgs = anyRefArgs :+ throwable
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, ${charSequenceExprToStringExpr(message)}, ${Expr.ofSeq(extendedArgs)}*) }
'{ if ($underlying.delegate.isEnabled($level, $marker)) $underlying.delegate.log($level, $marker, $message.toString, ${Expr.ofSeq(extendedArgs)}*) }
}
}

/** Checks whether `message` is an interpolated string and transforms it into LOG4J string interpolation. */
private def deconstructInterpolatedMessage(message: Expr[CharSequence])(using Quotes): (Expr[String], Seq[Expr[Any]]) = {
private def deconstructInterpolatedMessage(message: Expr[CharSequence])(using Quotes): (Expr[CharSequence], Seq[Expr[Any]]) = {
import quotes.reflect.*
import util.*

Expand Down Expand Up @@ -525,9 +525,9 @@ private object LoggerMacro {

(Expr(format), formatArgs)
case _ =>
(charSequenceExprToStringExpr(message), Seq.empty)
(message, Seq.empty)
}
case _ => (charSequenceExprToStringExpr(message), Seq.empty)
case _ => (message, Seq.empty)
}
}

Expand All @@ -549,8 +549,4 @@ private object LoggerMacro {
case _ => Seq.empty
}
}

private def charSequenceExprToStringExpr(expr: Expr[CharSequence])(using Quotes): Expr[String] = expr match {
case '{ $cs } => Expr(cs.toString)
}
}