Como lo sugiere la documentación de Eclipse, tengo un org.eclipse.core.resources.IncrementalProjectBuilder
que compila cada archivo fuente y, por separado, también tengo un org.eclipse.ui.editors.text.TextEditor
que puede editar cada archivo fuente. Cada archivo fuente se compila en su propia unidad de compilación, pero puede hacer referencia a tipos de otros archivos fuente (ya compilados).¿Cuál es el mejor enfoque para la compilación incremental al construir un DSL usando Eclipse?
Dos tareas para las que esto es importante son:
- La compilación (para asegurarse de que existen los tipos que estamos usando en realidad)
- autocompletar (para buscar el tipo para que podamos ver qué propiedades/métodos están presentes en él)
Para lograr esto, quiero almacenar una representación de todos los tipos compilados en la memoria (a los que se hace referencia a continuación como mi "tipo de tienda").
Mi pregunta es doble:
Tarea uno anterior se realiza por el constructor y la tarea de dos en el editor. Para que ambos tengan acceso a esta tienda de tipos, ¿debo crear una tienda estática en alguna parte a la que ambos puedan tener acceso, o Eclipse ofrece una manera más ordenada de lidiar con este problema? Tenga en cuenta que es eclipse, no yo, lo que instancia a los constructores y editores cuando se necesitan.
Al abrir Eclipse, no quiero tener que reconstruir todo el proyecto solo para poder volver a llenar mi tienda de tipos. Mi mejor solución hasta el momento es conservar estos datos en algún lugar y luego volver a llenar mi tienda desde allí (tal vez al abrir el proyecto). ¿Es así como otros compiladores incrementales suelen hacer esto? Creo que el enfoque de Java es usar un analizador especial que extraiga de manera eficiente esta información de los archivos de clase.
Cualquier idea sería muy apreciada. Este es mi primer DSL.
Gracias por la explicación detallada. Creo que has confirmado más o menos mis sospechas sobre cómo debería implementarse, pero es útil saber cómo el plugin de Java ha abordado el problema. –