2011-10-24 9 views
8

En mi intento de generar un nuevo código en un complemento de compilación de Scala, ahora he creado clases de trabajo. El siguiente paso lógico es colocar esas clases en un paquete nuevo y no existente. En Java, un paquete es básicamente un nombre de directorio, pero en Scala un paquete parece mucho más complicado. Hasta ahora no he encontrado/reconocido un ejemplo en el que un complemento de compilación crea un nuevo paquete.Crear nuevo * paquete * en un complemento de compilación de Scala

A mi nivel actual de entendimiento, yo pensaría que iba a necesitar para crear primero un símbolo paquete con:

parentPackage.newPackage(...) 
// ... 

y que tarde crear un árbol para el paquete con PackageDef. Pero PackageDef no toma el símbolo como parámetro, como era de esperar, y la búsqueda de:

Scala newPackage PackageDef 

no devolvió nada útil. Entonces parece que no necesito hacer esos dos pasos juntos. Posiblemente uno está hecho para mí por el compilador, pero no sé cuál. Hasta el momento, lo que tengo es el siguiente:

val newPkg = parentPackage.newPackage(NoPosition, newTermName(name)) 
newPkg.moduleClass.setInfo(new PackageClassInfoType(new Scope, 
    newPkg.moduleClass)) 
newPkg.setInfo(newPkg.moduleClass.tpe) 
parentPackage.info.decls.enter(newPkg) 
// ... 
val newPkgTree = PackageDef(Ident(newPkg.name), List(ClassDef(...))) 
+0

¿Dónde obtuvo atascado? Se ve bien hasta ahora. Probablemente desee agregar el árbol a una unidad de compilación existente, de lo contrario, no se generará ningún código para sus árboles. –

+0

Para ser honesto, no puedo recordar. También pregunté en la lista de correo de Scala, y tampoco obtuve una respuesta concreta, así que básicamente me rendí al escribir el plugin. Simplemente escribí más y más código, y se volvió cada vez más feo, pero nada funcionó. –

+0

Enlace de la lista de correo: http://groups.google.com/group/scala-language/browse_thread/thread/963923c78201f5e6 Lo que necesito es el ejemplo más simple donde uno está en transform() o transformStats(), y desde allí crea un clase totalmente no relacionada en un paquete totalmente no relacionado. Debe haber una manera de agregar árboles en el nivel del paquete raíz, en lugar de solo dentro del paquete actual. –

Respuesta

Cuestiones relacionadas