O MPS 2024.1 traz uma nova implementação assíncrona do painel Logical View na janela da ferramenta Project , melhorias substanciais no suporte ao Kotlin para várias plataformas e tempos de passagem de teste visivelmente mais rápidos. Você também encontrará forks condicionais em planos de geração, a descontinuação de caminhos de projeto no TestInfo
, melhorias na nova interface do usuário e várias atualizações de plataforma.
Confira abaixo a lista detalhada de melhorias.
O suporte ao Kotlin no MPS foi inicialmente projetado para suportar apenas código comum. No entanto, o único caso de uso possível no MPS era a compilação para a JVM, e a distinção entre código comum e código JVM não era clara.
Nesta versão, estamos introduzindo a configuração do conjunto de fontes da plataforma para nós Kotlin. Isso permite que você identifique quais plataformas de destino são compatíveis com um trecho de código e oculte as declarações de código incompatível.
Em um projeto Kotlin normal, você pode usar conjuntos de fontes para separar o código direcionado a diferentes plataformas. No MPS, isto foi introduzido no nível da raiz, com a opção de especificar o conjunto de plataformas suportadas para cada nó raiz do Kotlin. Esses conjuntos de fontes podem ser configurados no nível do nó raiz com a ajuda de uma ação de intenção.
Na prática, isso significa que:
Por padrão, o código Kotlin sem uma plataforma explícita usa a JVM, mantendo a compatibilidade com versões anteriores.
Stubs foram aprimorados para dar suporte a novos casos de uso multiplataforma. No passado, o MPS oferecia opções separadas para stubs Kotlin e Kotlin/JVM, que carregavam stubs comuns e JVM, respectivamente.
Essas duas opções foram unificadas sob a opção de stubs do Kotlin, que agora determina automaticamente se um artefato fornecido expõe código comum, código JVM ou código para outras plataformas.
Como as declarações entre bibliotecas comuns e específicas da plataforma são redundantes (já que ambos os artefatos contêm todas as declarações necessárias), introduzimos um novo mecanismo de filtragem de duplicação para manter os stubs organizados. Quando as bibliotecas específicas da plataforma são declaradas no mesmo módulo, elas podem acessar as declarações comuns, portanto, não é necessário declará-las novamente.
A configuração de dependências é a mesma de antes:
Por exemplo, escrever um código comum exige que você use uma biblioteca comum para stubs, usando o conjunto de código-fonte comum, mas você também precisa declarar o artefato Java na faceta Java.
O código Kotlin no MPS costumava gerar muitos erros de escopo e typesystem
quando o plug-in Kotlin Typesystem, baseado em CodeRules, não estava disponível. Para melhorar a legibilidade e a capacidade de testes, essas verificações e erros agora são silenciados quando o plug-in de sistema de tipos baseado em CodeRules não está disponível.
Nesses casos, todos os escopos nas linguagens Kotlin são substituídos por um escopo padrão que inclui todos os nós de conceitos compatíveis. Isso elimina qualquer erro falso-positivo, pois todos os nós válidos estão dentro do escopo.
As diretrizes para lidar com o código Kotlin permanecem as mesmas de antes:
O painel Logical View agora é baseado em uma arquitetura assíncrona, o que ajuda a manter a IU responsiva e contribui para o desempenho geral do IDE. A nova implementação também permite extensões e modificações mais fáceis. Para obter mais detalhes, consulte nosso artigo na base de conhecimento: ProjectPane implementation on top of ProjectViewTree (Implementação do ProjectPane sobre ProjectViewTree).
Essa nova implementação resultou em algumas mudanças notáveis:
Introduzimos um novo estilo em BaseLanguage
que permite que células constantes sirvam como espaços reservados se houver um valor ausente (um nó filho ou uma referência). Por exemplo, quando nenhum construtor está presente numa classe, uma célula de espaço reservado poderá ser exibida <no default constructor>
. O estilo faz com que as células constantes exibam o comportamento que você esperaria dessas células de espaço reservado. O cursor só pode ser colocado na primeira posição, e não é possível editar o valor. Somente as modificações fornecidas pelos menus de transformação anexados são permitidas.
A opção booleana doNotCompile
dos módulos na linguagem de build foi substituída por um enum Java para distinguir melhor os casos em que:
Esses dois casos costumavam ser representados pelo valor true
.
A nova enum Java tem três valores possíveis:
compile in MPS
compile externally
no code
Ao migrar para 2024.1, o valor original false
de doNotCompile
será migrado para compile in MPS
, enquanto o valor true
de doNotCompile
será migrado para compile externally
.
Um pequeno recurso experimental permite que você adicione um fork para um plano de geração sem modificar o plano original que está recebendo fork. Um plano de geração pode ser marcado como um fork de outro plano de geração. O plano marcado será tratado como se fosse referenciado explicitamente com a instrução padrão fork
inserida no início do plano de geração com fork.
Além disso, ao definir um fork, você pode usar um modificador de string que servirá como gatilho. O fork só ocorrerá se o modelo que estiver sendo gerado for de propriedade de um módulo que tenha uma faceta de destino de geração com um ID de faceta que corresponda ao gatilho de string.
Testes JUnit no MPS agora podem gerar relatórios de teste não apenas nos formatos Vintage e Jupiter, mas também no formato Open Test Reporting. Uma nova opção está disponível nas opções de teste da linguagem de build para controlar se o relatório Open Test está incluído nos relatórios gerados. Se a opção for definida como true
, os arquivos de relatório denominados junit-platform-events*-$BUILD_NAME$.xml
serão criados no diretório do projeto.
Se a opção for definida como false
, serão criados os relatórios antigos para os mecanismos Vintage e Jupiter.
Os relatórios de teste MPS agora respeitam a anotação JUnit @DisplayName
e propagam o nome para os relatórios exibidos na janela da ferramenta de relatório de teste.
Ao executar um teste de nó ou editor, o MPS costumava copiar todo o modelo de teste em modelos transitórios e fazer cópias adicionais de cada nó de caso de teste (começando na raiz NodeTestCase
ou EditorTestCase
). Para modelos de teste grandes, isso tende a ter um impacto notável no desempenho. Isso também resultava em uma configuração bastante estranha com nós de teste duplicados. No MPS 2024.1, os modelos com testes não serão mais copiados; somente os filhos TestNode
de NodeTestCase
ou EditorTestCase
serão, junto com seus respectivos nós de ambiente (os alvos de suas referências).
As declarações TestInfo
não são mais necessárias para testes que precisam de um projeto MPS para serem abertos. Isso se aplica a todas as abordagens de execução dos testes JUnit:
<launchtests>
, o project path
poderá ser especificado como uma opção adicional de caminho de projeto da tarefa. Se não for especificado, ${basedir}
será usado, o que corresponde ao diretório inicial do projeto atual.-Dmps.test.project.path
.As declarações existentes TestInfo
ainda são compatíveis e podem ser mantidas.
Em nosso esforço para separar o carregamento da classe do acesso ao modelo e a depreciação de ReloadableSModule
, alteramos a forma como o carregamento da classe funciona para os módulos. Embora tenhamos nos esforçado muito para evitar alterações perceptíveis para os usuários finais, as atualizações podem levar a problemas de carregamento de classes que não existiam anteriormente.
Como parte dessa reformulação, o MPS agora adere às dependências declaradas em module.xml
para módulos implantados, sem tentar calculá-las na inicialização com base em informações dispersas nos arquivos de módulo. Durante a fase de projeto, as dependências são derivadas das informações coletadas durante a fase de transformação do modelo e também não são recalculadas aqui. A lógica antiga que analisa as dependências de módulos de arquivos .mpl
ou .msd
ainda segue como alternativa caso o novo método falhe.
Essas alterações fazem parte de um esforço contínuo para aprimorar as facetas de módulos Java e as facetas de módulos em geral.
Ao confiar no cálculo de escopo padrão, os nós de destino em potencial comentados agora são automaticamente excluídos do escopo.
BaseLanguage
.O MPS 2024.1 traz um terminal reformulado com melhorias visuais e funcionais para agilizar tarefas de linha de comando. Essa atualização dá uma nova aparência para a nossa conhecida ferramenta, com comandos separados em blocos distintos, juntamente com um conjunto expandido de recursos, como navegação suave entre blocos, complementação de comandos e fácil acesso ao histórico de comandos. Saiba mais nesta postagem no blog.
A partir dessa versão, o MPS não oferece mais suporte a projetos que usam versões do Gradle anteriores à 4.5, e o IDE não executará a sincronização do Gradle para projetos com versões não suportadas do Gradle.
O MPS 2024.1 agiliza o workflow de revisão de código, oferecendo uma visão dedicada das alterações relacionadas ao branch. Para GitHub, GitLab e Space, agora é possível ver alterações em um determinado branch em uma aba Log separada dentro da janela de ferramentas Git. Para fazer isso, clique no nome do branch na janela de ferramentas Pull Requests e escolha Show in Git Log no menu.
Introduzimos indicadores visuais para informar você sobre atualizações pendentes no seu workflow de revisão de código. Quando houver alterações que exigem sua atenção, um ponto aparecerá no ícone da janela de ferramentas. Solicitações pull invisíveis também serão marcadas com um ponto azul, garantindo que você não perca atualizações no seu processo de revisão de código.
Na janela de ferramentas Git, o botão Show all branches foi substituído por um filtro de branch, permitindo revisar alterações feitas em um arquivo dentro de um branch designado. Também ajustamos a orientação da barra de ferramentas, posicionando-a na horizontal para maior facilidade de uso.
No visualizador diff, agora você pode especificar pastas e arquivos a serem ignorados durante o processo de comparação para se concentrar apenas nas alterações relevantes. Basta clicar com o botão direito em qualquer arquivo ou pasta que você não deseja que apareça nos resultados da comparação e selecionar Exclude from results no menu de contexto.
Para cada lançamento principal, preparamos instruções sobre como migrar de versões mais antigas do MPS para garantir que tudo corra bem. Veja-os em detalhes no Guia de Migração atualizado.