ApplyProcessor.scala 1.1 KB
Newer Older
I
IceMimosa 已提交
1 2 3
package io.github.dreamylost.plugin.processor.clazz

import io.github.dreamylost.plugin.processor.ProcessType.ProcessType
I
IceMimosa 已提交
4 5
import io.github.dreamylost.plugin.processor.{ AbsProcessor, ProcessType }
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 24 25 26 27 28 29 30 31 32 33

/**
 * 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]
            val nameAndTypes = getConstructorParameters(clazz, withSecond = false)
              .map(o => s"${o._1}: ${o._2}")
              .mkString(", ")
            Seq(s"def apply($nameAndTypes): ${clazz.getName} = ???")
          case _ => Nil
        }
      case _ => Nil
    }
  }
}