MPS 2024.1에서는 Project(프로젝트) 도구 창의 Logical View(논리적 뷰) 창에 새로운 비동기식 구현이 추가되었고, 다양한 플랫폼에 대한 Kotlin 지원이 상당히 개선되었으며, 테스트 실행이 눈에 띄게 빨라졌습니다. 또한 제너레이터 계획의 조건부 포크, TestInfo
의 프로젝트 경로 지원 중단, 새로운 UI의 개선 및 수많은 플랫폼 업데이트도 확인할 수 있습니다.
아래에서 각 개선 사항을 자세히 알아보세요.
MPS에서 Kotlin 지원은 원래 공통 코드만 지원하도록 설계되었습니다. 하지만 MPS에서 가능한 유일한 사용 사례는 JVM으로 컴파일링하는 것이었고, 공통 코드와 JVM 코드의 구분이 불분명했습니다.
이번 릴리스에서는 Kotlin 노드에 대한 플랫폼 소스 세트 구성을 도입했습니다. 이를 통해 특정 코드 부분이 지원하는 타깃 플랫폼을 식별하고 호환되지 않는 코드의 선언을 숨길 수 있습니다.
일반적인 Kotlin 프로젝트에서는 소스 세트를 사용하여 다양한 플랫폼을 타깃으로 하는 코드를 분리할 수 있습니다. MPS에서는 루트 수준에서 이 기능을 도입하여 각 Kotlin 루트 노드에 대해 지원되는 플랫폼 세트를 지정할 수 있는 옵션을 제공했습니다. 이러한 소스 세트는 인텐션 액션의 도움으로 루트 노드 수준에서 구성할 수 있습니다.
실제로 이는 다음을 의미합니다.
기본적으로, 명시적인 플랫폼이 없는 Kotlin 코드는 JVM을 사용하여 이전 버전과의 호환성을 유지합니다.
새로운 멀티플랫폼 사용 사례를 지원하도록 스텁이 개선되었습니다. 이전에는 MPS가 Kotlin과 Kotlin/JVM 스텁에 대해 별도의 옵션을 제공하여 각각 공통 스텁과 JVM 스텁을 로드했습니다.
이 두 가지 옵션이 이제 Kotlin 스텁에 대한 옵션으로 통합되었으며, 이제 제공된 아티팩트가 공통 코드, JVM 코드 또는 다른 플랫폼용 코드를 노출하는지 자동으로 판별합니다.
공통 라이브러리와 플랫폼별 라이브러리 간의 선언은 불필요하므로(두 아티팩트 모두 필요한 모든 선언을 포함함) 스텁을 깔끔하게 유지하기 위해 중복을 필터링하는 새로운 메커니즘을 도입했습니다. 플랫폼별 라이브러리가 동일한 모듈 아래에 선언되면 공통 선언에 액세스할 수 있으므로 이를 다시 선언할 필요가 없습니다.
종속성 구성은 이전과 동일합니다.
예를 들어, 공통 코드를 작성하려면 스텁에 대한 공통 라이브러리와 공통 소스 세트를 사용해야 하지만, Java 패싯에서 Java 아티팩트도 선언해야 합니다.
CodeRules 기반의 Kotlin Typesystem 플러그인을 사용할 수 없을 때, MPS의 Kotlin 코드는 많은 typesystem
및 범위 오류를 발생시켰습니다. 가독성과 테스트 용이성을 개선하기 위해, CodeRules 기반 typesystem 플러그인을 사용할 수 없을 때는 이러한 검사와 오류가 소거됩니다.
이러한 경우, Kotlin 언어의 모든 범위는 호환되는 콘셉트의 모든 노드를 포함하는 기본 범위로 대체됩니다. 이를 통해 모든 유효 노드가 범위에 있으므로, 모든 거짓 양성 오류가 제거됩니다.
Kotlin 코드를 처리하기 위한 가이드라인은 이전과 동일합니다.
Logical View(논리적 뷰) 창이 이제 비동기 아키텍처를 기반으로 하여 UI 반응을 빠르게 유지하고 IDE의 전반적인 성능을 높입니다. 이 새로운 구현으로 확장과 수정도 더욱 쉬워졌습니다. 자세한 내용은 지식 베이스에서 ProjectViewTree상에 ProjectPane 구현이라는 문서를 참조하세요.
이 새로운 구현으로 몇 가지 주목할 만한 변경이 이루어졌습니다.
빌드 언어에서 모듈의 부울 doNotCompile
옵션은 다음과 같은 경우를 더 잘 구분하기 위해 Java 열거형으로 대체되었습니다.
두 경우 모두 true
값으로 표현되었습니다.
새로운 Java 열거형에는 세 가지 가능한 값이 있습니다.
compile in MPS(MPS에서 컴파일)
compile externally(외부에서 컴파일)
no code(코드 없음)
2024.1로 마이그레이션할 때 doNotCompile
의 원래 false
값은 compile in MPS(MPS에서 컴파일링)
로 마이그레이션되고, doNotCompile
의 true
값은 compile externally(외부에서 컴파일링)
로 마이그레이션됩니다.
MPS의 JUnit 테스트는 이제 Vintage 및 Jupiter 형식뿐만 아니라 Open Test Reporting 형식으로도 테스트 보고서를 생성할 수 있습니다. 생성된 보고서에 Open Test 보고서를 포함할지 여부를 제어하기 위한 새로운 옵션이 빌드 언어의 테스트 옵션에 제공됩니다. 이 옵션을 true
로 설정하면 junit-platform-events*-$BUILD_NAME$.xml
이라는 보고서 파일이 프로젝트 디렉터리에 생성됩니다.
이 옵션을 false
로 설정하면 Vintage 및 Jupiter 엔진에 대한 기존 보고서가 생성됩니다.
MPS 테스트 보고서에서 이제 JUnit @DisplayName
어노테이션을 준수하고 테스트 보고서 도구 창에 표시되는 보고서에 해당 이름을 전파합니다.
이전에 노드 또는 에디터 테스트를 실행할 때 MPS는 전체 테스트 모델을 일시적 모델로 복사하고 모든 테스트 케이스 노드(루트 NodeTestCase
또는 EditorTestCase
부터 시작)의 추가 복사본을 만들었습니다. 대규모 테스트 모델에서 이는 성능에 큰 영향을 미치고는 합니다.또한 중복된 테스트 노드가 있는 다소 이상한 설정이 만들어졌습니다. MPS 2024.1에서는 테스트가 포함된 모델이 더 이상 복사되지 않습니다. 대신 NodeTestCase
또는 EditorTestCase
의 TestNode
라는 하위 요소만 해당 환경 노드(그 참조의 타깃)와 함께 복사됩니다.
MPS 프로젝트를 열어야 하는 테스트에 더 이상 TestInfo
선언이 필요하지 않습니다. 이는 JUnit 테스트를 실행하는 모든 접근 방식에 적용됩니다.
<launchtests>
작업으로 실행되는 경우, project path를 작업의 추가 프로젝트 경로 옵션으로 지정할 수 있습니다. 지정하지 않으면 현재 프로젝트의 홈 디렉터리에 해당하는 ${basedir}
가 사용됩니다.
-Dmps.test.project.path
시스템 프로퍼티를 통해 프로젝트 위치를 지정할 수 있습니다.기존 TestInfo
선언은 계속 지원되며 유지됩니다.
클래스 로드를 모델 액세스 및 ReloadableSModule
의 사용 중단과 분리하려는 노력의 일환으로, 모듈에서 클래스 로드가 작동하는 방식을 변경했습니다. 최종 사용자에게 눈에 띄는 변화가 생기지 않도록 노력했지만, 업데이트로 인해 이전에 없었던 클래스 로드 문제가 발생할 수 있습니다.
이번 재정비의 일환으로, MPS는 이제 모듈 파일에 분산된 정보를 기반으로 시작 시 종속성을 계산하지 않고도 배포된 모듈에 대해 module.xml
에 선언된 종속성을 따릅니다. 설계 단계에서 종속성은 모델 변환 과정 중 수집된 정보로부터 파생되며, 여기서 다시 계산되지 않습니다. .mpl
또는 .msd
파일에서 모듈 종속성을 분석하는 기존 로직은 새로운 메서드가 실패할 경우에 대비해 계속해서 유지됩니다.
이러한 변경은 Java 모듈 패싯과 전반적인 모듈 패싯을 개선하려는 지속적인 노력의 일환입니다.
디폴트 범위 계산에 의존하는 경우, 주석 처리된 잠재적 타깃 노드가 이제 자동으로 범위에서 제외됩니다.
BaseLanguage
에 긴 16진수 리터럴이 도입되었습니다.MPS 2024.1은 시각적 및 기능적으로 모두 향상되어 명령줄 작업의 효율을 높이는 새롭게 정비된 터미널을 선보입니다. 이번 업데이트에서는 블록 간 원활한 탐색, 명령어 완성, 명령어 기록에 대한 간편한 액세스 등의 확장된 기능 모음과 함께 명령어가 별개의 블록으로 분리되는 등 익숙한 도구가 새로운 모습으로 제공됩니다. 자세한 내용은 이 블로그 게시물에서 알아보세요.
이 버전부터 MPS는 Gradle 4.5 이하 버전을 사용하는 프로젝트를 더 이상 지원하지 않으며, 지원되지 않는 Gradle 버전이 있는 프로젝트에 대해 Gradle 동기화를 수행하지 않습니다.
주요 릴리스가 나올 때마다 JetBrains는 이전 버전의 MPS에서 마이그레이션하기 위한 지침을 준비하여 모든 부분이 원활하게 작동하도록 합니다. 업데이트된 마이그레이션 가이드에서 자세히 살펴보세요.