ApplyProcessor.scala 1.2 KB
Newer Older
梦境迷离's avatar
梦境迷离 已提交
1
package org.bitlap.tools.plugin.processor.clazz
I
IceMimosa 已提交
2

梦境迷离's avatar
梦境迷离 已提交
3 4
import org.bitlap.tools.plugin.processor.ProcessType.ProcessType
import org.bitlap.tools.plugin.processor.{ AbsProcessor, ProcessType }
I
IceMimosa 已提交
5
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.{ ScClass, ScObject, ScTypeDefinition }
I
IceMimosa 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

/**
 * Desc: Processor for annotation apply
 *
 * Mail: chk19940609@gmail.com
 * Created by IceMimosa
 * Date: 2021/7/8
 */
class ApplyProcessor extends AbsProcessor {

  override def needCompanion: Boolean = true

  override def process(source: ScTypeDefinition, typ: ProcessType): Seq[String] = {
    typ match {
      case ProcessType.Method =>
        source match {
          case obj: ScObject =>
            val clazz = obj.fakeCompanionClassOrCompanionClass.asInstanceOf[ScClass]
24 25 26
            val nameAndTypes = getConstructorCurryingParameters(clazz, withSecond = false)
              .map(_.map(o => s"${o._1}: ${o._2}").mkString("(", ", ", ")"))
              .mkString
I
IceMimosa 已提交
27 28 29
            val genericType = getTypeParamString(clazz)
            val returnGenericType = getTypeParamString(clazz, returnType = true)
            Seq(s"def apply$genericType$nameAndTypes: ${clazz.getName}$returnGenericType = ???")
I
IceMimosa 已提交
30 31 32 33 34 35
          case _ => Nil
        }
      case _ => Nil
    }
  }
}