ScalaMacroProcessorProvider.scala 1.5 KB
Newer Older
梦境迷离's avatar
梦境迷离 已提交
1
package org.bitlap.tools.plugin
I
IceMimosa 已提交
2 3

import com.intellij.openapi.Disposable
梦境迷离's avatar
梦境迷离 已提交
4 5
import org.bitlap.tools.plugin.processor.Processor
import org.bitlap.tools.plugin.processor.clazz.{ ApplyProcessor, BuilderProcessor, ConstructorProcessor, EqualsAndHashCodeProcessor, JsonProcessor, LogProcessor }
I
IceMimosa 已提交
6
import org.jetbrains.plugins.scala.lang.psi.api.toplevel.typedef.{ ScClass, ScObject, ScTypeDefinition }
I
IceMimosa 已提交
7 8 9 10 11 12 13 14 15 16 17 18 19

import scala.collection.mutable

/**
 * Mail: chk19940609@gmail.com
 * Created by IceMimosa
 * Date: 2021/7/1
 */
class ScalaMacroProcessorProvider extends Disposable {

  private val processors = mutable.Map[String, Processor]()
  regist(ScalaMacroNames.BUILDER, new BuilderProcessor())
  regist(ScalaMacroNames.LOG, new LogProcessor())
I
IceMimosa 已提交
20
  regist(ScalaMacroNames.JSON, new JsonProcessor())
I
IceMimosa 已提交
21 22
  regist(ScalaMacroNames.APPLY, new ApplyProcessor())
  regist(ScalaMacroNames.CONSTRUCTOR, new ConstructorProcessor())
23
  regist(ScalaMacroNames.EQUALS_HASHCODE, new EqualsAndHashCodeProcessor())
I
IceMimosa 已提交
24 25 26 27 28 29 30 31 32 33 34 35 36

  override def dispose(): Unit = {}

  def regist(name: String, p: Processor): ScalaMacroProcessorProvider = {
    if (p != null) {
      this.processors += name.trim -> p
    }
    this
  }

  def findProcessors(source: ScTypeDefinition): Seq[Processor] = {
    processors.filter { p =>
      source match {
I
IceMimosa 已提交
37
        case obj: ScObject  => obj.hasAnnotation(p._1) || obj.fakeCompanionClassOrCompanionClass.hasAnnotation(p._1)
I
IceMimosa 已提交
38
        case clazz: ScClass => clazz.hasAnnotation(p._1)
I
IceMimosa 已提交
39
        case _              => source.hasAnnotation(p._1)
I
IceMimosa 已提交
40 41 42 43
      }
    }.values.toSeq
  }
}