Novedades en MPS 2018.3

BaseLanguage

Iconos de concepto anulados/implementados

MPS marca conceptos con un icono anulado/implementado, que le ayudarán a navegar fácilmente hasta el superconcepto o el subconcepto del concepto actual.

Paquetes personalizados para clases BaseLanguage

Hace tiempo que la única manera de gestionar los paquetes de Java de clases generadas es mediante el nombre de un modelo que lo contiene. Sin embargo, con la nueva propiedad «packageName» para clasificar, podrá gestionar los paquetes de Java de una clase generada. Esta propiedad también está disponible para los clasificadores raíz.

El nuevo recurso de generación para extensiones BaseLanguage

BaseLanguage siempre estuvo pensada para personalizarla con muchas extensiones. Sin embargo, para algunas extensiones puede ser complicado implementar un generador pertinente. Ahora, BaseLanguage proporciona algunos nuevos conceptos de tiempo de generación para facilitar la escritura de los generadores de las extensiones.

Generación de expresiones Lvalue

Las expresiones Lvalue se evalúan como variables que se pueden leer o escribir con un valor. En algunos casos, no es fácil generar una expresión Lvalue, ya que depende del tipo de contexto en el que se usa la expresión. Ahora, el nuevo concepto de tiempo de generación de «generic lvalue-expression» se puede utilizar para crear un generador más simple y que no dependa del contexto.

Por suerte, en la nueva versión, podrá ajustar una expresión arbitraria Lvalue con la expresión «@byRef». El generador BaseLanguage transformará la expresión ajustada en una expresión de tipo «Reference<T>», que le proporcionará las operaciones de obtención y establecimiento de la variable ajustada.

Estos dos nuevos conceptos de tiempo de generación se describen más detalladamente en este artículo.

Transformar Lvalues en referencias

Algunas expresiones agregan otras expresiones Lvalue para crear operaciones compuestas con una variable que se produce desde una expresión agregada (como más asignación o expresiones de incremento y obtención). Introducir nuevas expresiones con dicha semántica no solía ser posible, porque era complicado escribir adecuadamente un generador para dichas construcciones.

Métodos predeterminados compatibles con BaseLanguage

En la versión 2018.3, MPS puede crear los métodos «default» en las interfaces de BaseLanguage. El concepto DefaultModifier implementa la palabra clave «default», que extiende el concepto Modifier en BaseLanguage. DefaultModifier está ubicado en el lenguaje jetbrains.mps.baseLanguage.jdk8. Esto significa que, para crear un método «default» en la interfaz, debe importar el lenguaje jdk8.

Generador

El lenguaje del generador

La macro $INCLUDE$ se ha quedado obsoleta y hay una migración para sustituir sus instancias por $CALL$. La primera no era compatible con las plantillas con argumentos y no había razones para mantener ambos mecanismos para invocar una plantilla.

Ahora la macro $WEAVE$ y las reglas de tejido pueden invocar plantillas con argumentos. Cuando una plantilla interpretada teje una plantilla externa desde el generador «compiled», ya no se interpreta, sino que el código de la plantilla compilada se sigue ejecutando. Ahora las plantillas «compiled» pueden tejer plantillas interpretadas.

Java reflection no se utiliza para acceder a la colección de consultas de un modelo de plantilla, que también se conoce como QueriesGenerated.

Interfaz/experiencia de usuario

TouchBar de MacBook

El contexto predeterminado incluye controles para ejecutar, compilar y depurar la aplicación, con la habilidad de seleccionar o crear rápidamente una nueva configuración de ejecución/depuración. Hay una nueva página de TouchBar para personalizar las acciones en Preferences | Appearance & Behavior | Menus and Toolbars.

¡Y sí, es extensible! Solo tiene que añadir cualquier acción requerida a un InterfaceGroup especial de MPS.

Tema de la IU de alto contraste

Hemos añadido compatibilidad con un nuevo tema de alto contraste, al que se puede acceder con la lista desplegable de las opciones de temas en Preferences -> Appearance & Behavior.

Nuevas acciones para encontrar código obsoleto

La acción Find Usages of Deprecated puede encontrar todos los usos de los elementos obsoletos. Ahora, el informe de la búsqueda de usos agrupa las entradas según la versión esperada de eliminación de código, de modo que es fácil reconocer su gravedad y priorizar qué eliminar primero.

Un nuevo icono para métodos de comportamiento anulados o implementados

Los métodos de comportamiento se han equipado con un nuevo icono. Las siguientes capturas de pantalla muestran una serie de métodos de getPresentation() que anulan o implementan el que tiene seleccionado, y esto le permitirá navegar hasta ellos desde aquí.

Mejoras de los iconos anulados/implementados

Las ventanas emergentes con los conceptos/clases/métodos anulados/implementados se han vuelto asíncronos, es decir, que en un segundo plano MPS llenará la ventana emergente con los resultados de la búsqueda. Además, ahora puede filtrar utilizando el nombre de los objetos de búsqueda.

Cambios en el buscador

Los buscadores distribuidos por MPS se han actualizado y optimizado. Para ejecutar un buscador de forma asíncrona, tendrá que utilizar la expresión especial OnEachNodeFoundByExpression, que representa la invocación de un buscador simple con una devolución de llamada que se ejecuta para cada nodo encontrado. Como consecuencia de ello, las opciones de búsqueda de usos para un concepto han cambiado. Las opciones se han extendido con Derived Concepts y Concept Ancestors, que indican la lista de subconceptos y superconceptos, respectivamente. Además, las opciones de búsqueda de usos para los métodos de comportamiento se han extendido con «Overridden Methods» y «Overriding Methods».

Supresión de errores específicos

La supresión de errores solía ser una herramienta básica para evitar que MPS mostrase un error encontrado de forma incorrecta por el comprobador TypeSystem. Si un nodo se anotaba con el atributo «SuppressErrorAnnotation» utilizando la intención «Suppress error for node ...», no se mostraban mensajes de error para dicho nodo o cualquiera de sus descendentes.

Ahora, es posible suprimir solamente los mensajes de error específicos. El mensaje de error se suprimirá para el nodo y todos sus descendentes, pero el resto de mensajes seguirán estando presentes. Para obtener más información, consulte la documentación.

Editor

Cell action maps reutilizables

Los elementos de Cell action map de un mapa de acción existente se pueden reutilizar en uno nuevo mediante importaciones.

Lenguaje de compilación

Consejos y trucos

Ahora los consejos y trucos predeterminados para MPS se pueden personalizar. Esto se puede hacer con el nuevo concepto de consejos y trucos del script de compilación. Los consejos se pueden reutilizar desde la distribución general de MPS o se pueden importar desde un directorio o una solución.

Lenguaje de consejos y trucos

Para importar consejos y trucos desde una solución, cree una solución con un modelo y añada los lenguajes jetbrains.mps.build.tips y jetbrains.mps.core.xml para modelar los lenguajes utilizados. Después, puede crear una instancia del concepto MPSTipsAndTricks, donde se pueden crear varios consejos. Los consejos son texto en formato HTML y pueden incluir hasta una imagen.

Opciones de paquetes de compilación

La opción de personalizar paquetes en BuildMps_IdeaPlugin ha quedado obsoleta y no debería usarse a partir de ahora. Ahora es posible elegir el paquete directamente en la construcción BuildMpsLayout_Plugin.

Con el empaquetado automático, todos los lenguajes y las soluciones proporcionadas se ubican en la carpeta «languages» en el directorio raíz de los complementos. El empaquetado manual, en cambio, implica que el desarrollador debe proporcionar el diseño del complemento por su cuenta.

Nueva construcción en el lenguaje de compilación

La configuración del módulo de prueba del lenguaje de compilación se ha extendido para especificar complementos adicionales de IntelliJ IDEA que deben cargarse cuando se ejecutan las pruebas Ant de MPS.

Hay casos en los que la prueba necesita un complemento en particular en su entorno, que el motor del lenguaje de compilación de MPS no puede deducir de los módulos que contienen las pruebas. Ahora puede garantizar que el complemento que necesita está presente durante la ejecución de la prueba Ant de MPS.

Miscelánea

Tipos de datos totalmente compilados

Hemos creado tipos de datos completamente generados. Toda la información generada relativa a los tipos de datos ahora está disponible desde la API de SModel.

Guardar los datos de migración como anotaciones

Ahora el MPS es compatible con un nuevo mecanismo de transferencia de datos de migración que recomendamos encarecidamente para migraciones de nueva creación. El nodo producido que contiene datos ahora debería añadirse a cualquier nodo que esté suficientemente cerca del lugar en el que se relacionan los datos.

El script de migración que produce nodos con datos debería declarar el concepto de dichos nodos y usar una construcción putData() para insertar cada anotación en el modelo:

La recuperación de nodos que contienen datos se realiza más o menos de la misma forma que antes:

Resolución de conflictos mejorada

Antes, era imposible aplicar cambios desde ambos lados, local y remoto, ya que aplicarlos desde un lado simplemente rechazaba los cambios aplicados desde el otro.

Para los secundarios en varios roles, no es práctico si se aplican ambos cambios. Por eso, ahora, tras aplicar los cambios desde un lado del conflicto, los otros cambios conflictivos se convierten en un añadido al final del grupo cambiado. Es necesario aplicarlos o ignorarlos por separado.

Tras aplicar la versión izquierda del conflicto, todavía puede aplicar o ignorar la línea desde el lado derecho: