Scala method injector plugin - how to get the object from the type parameter?
I'm trying to create a plugin to help Intellij to recognize my injected methods, but i hit a roadblock in trying to get a list of the properties of the annotations' type parameter.
My question is, how can i get the actual ScObject from the ScTypeElement?
This is the code my code so far:
class Injector extends SyntheticMembersInjector {
override def injectFunctions(source: ScTypeDefinition): Seq[String] = {
val annotationName = "com.mmagyar.macros.Crud"
source match {
case c: ScObjectImpl if c.hasAnnotation(annotationName).isDefined =>
val macroForType: ScTypeElement =
c.hasAnnotation(annotationName).get.constructor.typeArgList.get.typeArgs.head
//This obviously doesn't work, how can i get the actual Object from the type?
val macroObject = macroForType.asInstanceOf[ScObject]
macroObject.allVals.map(x=> {
//generate code based on the object properties
""
})
case _ => Seq()
}
}
}
Please sign in to leave a comment.
You need to evaluate type first:
That does not compile for me, what i'm i missing?
calcType does not have "extractClass" method, and te is missing the "typeSystem" property
[info] Compiling 2 Scala sources to C:\Users\MßtΘ\code\macro-annotation-idea-plugin\target\scala-2.11\classes...
[error] C:\Users\MßtΘ\code\macro-annotation-idea-plugin\src\main\scala\org\jetbrains\example\injector\Injector.scala:22: value extractClass is not a member of org.jetbrains.plugins.scala.lang.psi.types.ScType
[error] te.calcType.extractClass(te.getProject)(te.typeSystem) match {
[error] ^
[error] C:\Users\MßtΘ\code\macro-annotation-idea-plugin\src\main\scala\org\jetbrains\example\injector\Injector.scala:22: value typeSystem is not a member of org.jetbrains.plugins.scala.lang.psi.api.base.types.ScTypeElement
[error] te.calcType.extractClass(te.getProject)(te.typeSystem) match {
[error] ^
[error] two errors found
never mind, the provided skeleton project is out of date, i updated the plugin version and the IDEA version in build.sbt and now it compiles.