未验证 提交 4d04f8ba 编写于 作者: I IceMimosa 提交者: GitHub

Add @log (#50)

上级 802dbdbf
<idea-plugin>
<id>Scala-Macro-Tools Plugin</id>
<name>Scala-Macro-Tools</name>
<version>0.1.0</version>
<version>0.1.2</version>
<vendor>Scala Macro Tools</vendor>
<idea-version since-build="201.0"/>
<idea-version since-build="203.0"/>
<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.java</depends>
......@@ -18,6 +19,9 @@
<a href="https://github.com/jxnu-liguobin/scala-macro-tools/issues">Issues</a>
<br/>
<br/>
<b>A plugin that implements Lombok-like functionality with Scala macros</b>
<br/>
<br/>
<b>Features</b>
<ul>
<li>@toString</li>
......
package io.github.dreamylost.plugin.processor.clazz
import io.github.dreamylost.plugin.ScalaMacroNames
import io.github.dreamylost.plugin.processor.{ AbsProcessor, ProcessType }
import io.github.dreamylost.plugin.processor.ProcessType.ProcessType
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.{ ScClass, ScTypeDefinition }
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.{ ScClass, ScObject, ScTypeDefinition }
/**
* Desc: Processor for annotation toString
......@@ -13,13 +14,26 @@ import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.{ ScClass, ScTy
*/
class LogProcessor extends AbsProcessor {
// annotation: log type name
private val logTypeName = "logType"
// default log expr
private def logExpr(log: String = "java.util.logging.Logger") = s"private final val log: $log = ???"
override def process(source: ScTypeDefinition, typ: ProcessType): Seq[String] = {
typ match {
case ProcessType.Field =>
source match {
case _: ScClass =>
// TODO: support others log type
Seq(s"private final val log: org.slf4j.Logger = ???")
case clazz @ (_: ScClass | _: ScObject) =>
val an = clazz.annotations(ScalaMacroNames.LOG).last
an.annotationExpr.getAttributes.findLast(_.name == logTypeName) match {
case Some(kv) if kv.getChildren.exists(_.getText.equalsIgnoreCase("Slf4j")) =>
Seq(logExpr("org.slf4j.Logger"))
case Some(kv) if kv.getChildren.exists(_.getText.equalsIgnoreCase("Log4j2")) =>
Seq(logExpr("org.apache.logging.log4j.Logger"))
case _ =>
Seq(logExpr())
}
case _ => Nil
}
case _ => Nil
......
......@@ -154,4 +154,15 @@ class LogTest extends AnyFlatSpec with Matchers {
|""".stripMargin should compile
}
"log for plugin test" should "compile ok" in {
@log class TestLog1() {
log.info("")
}
@log object TestLog1 {
log.info("")
}
@log(logType = io.github.dreamylost.LogType.Slf4j) class TestLog2() {
log.info("")
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册