diff --git a/gradle.properties b/gradle.properties index 1fd81b5da..c1efbd4c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,5 +2,5 @@ group=org.sonarsource.kotlin version=2.21.1-SNAPSHOT description=Code Analyzer for Kotlin projectTitle=Kotlin -kotlinVersion=2.0.21 +kotlinVersion=2.1.0 org.gradle.jvmargs=-Xmx4096M diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2ee32e075..b7a62446c 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -135,6 +135,11 @@ + + + + + @@ -180,6 +185,11 @@ + + + + + @@ -700,6 +710,11 @@ + + + + + @@ -805,34 +820,34 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -875,14 +890,14 @@ - - - + + + - - - + + + @@ -895,9 +910,9 @@ - - - + + + @@ -910,14 +925,14 @@ - - - + + + - - - + + + @@ -940,9 +955,9 @@ - - - + + + @@ -955,9 +970,9 @@ - - - + + + @@ -970,9 +985,9 @@ - - - + + + @@ -995,9 +1010,9 @@ - - - + + + @@ -1010,9 +1025,9 @@ - - - + + + @@ -1025,9 +1040,9 @@ - - - + + + @@ -1046,9 +1061,9 @@ - - - + + + @@ -1061,9 +1076,9 @@ - - - + + + @@ -1076,9 +1091,9 @@ - - - + + + @@ -1091,9 +1106,9 @@ - - - + + + @@ -1106,9 +1121,9 @@ - - - + + + @@ -1121,9 +1136,9 @@ - - - + + + @@ -1136,9 +1151,9 @@ - - - + + + @@ -1226,9 +1241,9 @@ - - - + + + @@ -1241,9 +1256,9 @@ - - - + + + @@ -1256,9 +1271,9 @@ - - - + + + @@ -1271,9 +1286,9 @@ - - - + + + @@ -1286,9 +1301,9 @@ - - - + + + @@ -1322,12 +1337,12 @@ - - - + + + - - + + @@ -1365,9 +1380,9 @@ - - - + + + @@ -1390,9 +1405,9 @@ - - - + + + @@ -1425,9 +1440,9 @@ - - - + + + @@ -1440,9 +1455,9 @@ - - - + + + @@ -1455,19 +1470,24 @@ - - - + + + + + + + + - - - + + + - - - + + + diff --git a/sonar-kotlin-api/build.gradle.kts b/sonar-kotlin-api/build.gradle.kts index 8830878b5..961b530ab 100644 --- a/sonar-kotlin-api/build.gradle.kts +++ b/sonar-kotlin-api/build.gradle.kts @@ -23,6 +23,7 @@ dependencies { isTransitive = false } } + implementation("com.github.ben-manes.caffeine:caffeine:2.9.3") compileOnly(libs.sonar.plugin.api) compileOnly(libs.slf4j.api) diff --git a/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1.kt b/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1.kt index e20daa070..f5055f2b4 100644 --- a/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1.kt +++ b/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1.kt @@ -22,12 +22,11 @@ import com.intellij.mock.MockProject import com.intellij.openapi.Disposable import com.intellij.psi.ClassTypePointerFactory import com.intellij.psi.impl.smartPointers.PsiClassReferenceTypePointerFactory -import org.jetbrains.kotlin.analysis.api.KaAnalysisNonPublicApi -import org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade +import org.jetbrains.kotlin.analysis.api.KaImplementationDetail +import org.jetbrains.kotlin.analysis.api.KaPlatformInterface import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade -import org.jetbrains.kotlin.analysis.api.descriptors.KaFe10AnalysisHandlerExtension -import org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeTokenProvider -import org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinLifetimeTokenProvider +import org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeTokenFactory +import org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinLifetimeTokenFactory import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinGlobalModificationService import org.jetbrains.kotlin.analysis.api.platform.modification.KotlinModificationTrackerFactory import org.jetbrains.kotlin.analysis.api.platform.projectStructure.KotlinByModulesResolutionScopeProvider @@ -38,7 +37,6 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.modification.KotlinStan import org.jetbrains.kotlin.analysis.api.standalone.base.projectStructure.AnalysisApiSimpleServiceRegistrar import org.jetbrains.kotlin.analysis.api.standalone.base.projectStructure.PluginStructureProvider import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment -import org.jetbrains.kotlin.references.fe10.base.DummyKtFe10ReferenceResolutionHelper import org.jetbrains.kotlin.references.fe10.base.KtFe10ReferenceResolutionHelper import org.jetbrains.kotlin.resolve.extensions.AnalysisHandlerExtension @@ -49,6 +47,7 @@ import org.jetbrains.kotlin.resolve.extensions.AnalysisHandlerExtension */ annotation class K1only +@OptIn(KaPlatformInterface::class) internal fun configureK1AnalysisApiServices(env: KotlinCoreEnvironment) { val application = env.projectEnvironment.environment.application if (application.getServiceIfCreated(KtFe10ReferenceResolutionHelper::class.java) == null) { @@ -70,8 +69,8 @@ internal fun configureK1AnalysisApiServices(env: KotlinCoreEnvironment) { KotlinStandaloneGlobalModificationService::class.java, ) project.registerService( - KotlinLifetimeTokenProvider::class.java, - KotlinAlwaysAccessibleLifetimeTokenProvider::class.java, + KotlinLifetimeTokenFactory::class.java, + KotlinAlwaysAccessibleLifetimeTokenFactory::class.java, ) project.registerService( KotlinResolutionScopeProvider::class.java, @@ -87,7 +86,7 @@ internal fun configureK1AnalysisApiServices(env: KotlinCoreEnvironment) { ) } -@OptIn(KaAnalysisNonPublicApi::class) +@OptIn(KaImplementationDetail::class, KaPlatformInterface::class) private object AnalysisApiFe10ServiceRegistrar : AnalysisApiSimpleServiceRegistrar() { private const val PLUGIN_RELATIVE_PATH = "/META-INF/analysis-api/analysis-api-fe10.xml" @@ -95,7 +94,7 @@ private object AnalysisApiFe10ServiceRegistrar : AnalysisApiSimpleServiceRegistr PluginStructureProvider.registerApplicationServices(application, PLUGIN_RELATIVE_PATH) application.registerService( KtFe10ReferenceResolutionHelper::class.java, - DummyKtFe10ReferenceResolutionHelper, + K1internals.dummyKtFe10ReferenceResolutionHelper(), ) val applicationArea = application.extensionArea if (!applicationArea.hasExtensionPoint(ClassTypePointerFactory.EP_NAME)) { @@ -120,7 +119,7 @@ private object AnalysisApiFe10ServiceRegistrar : AnalysisApiSimpleServiceRegistr } override fun registerProjectModelServices(project: MockProject, disposable: Disposable) { - project.apply { registerService(Fe10AnalysisFacade::class.java, CliFe10AnalysisFacade()) } - AnalysisHandlerExtension.registerExtension(project, KaFe10AnalysisHandlerExtension()) + project.apply { registerService(Fe10AnalysisFacade::class.java, K1internals.createCliFe10AnalysisFacade()) } + AnalysisHandlerExtension.registerExtension(project, K1internals.createKaFe10AnalysisHandlerExtension()) } } diff --git a/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1internals.java b/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1internals.java new file mode 100644 index 000000000..ef9cb1cdb --- /dev/null +++ b/sonar-kotlin-api/src/main/java/org/sonarsource/kotlin/api/frontend/K1internals.java @@ -0,0 +1,36 @@ +/* + * SonarSource Kotlin + * Copyright (C) 2018-2024 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the Sonar Source-Available License Version 1, as published by SonarSource SA. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Sonar Source-Available License for more details. + * + * You should have received a copy of the Sonar Source-Available License + * along with this program; if not, see https://sonarsource.com/license/ssal/ + */ +package org.sonarsource.kotlin.api.frontend; + +@SuppressWarnings("KotlinInternalInJava") +final class K1internals { + private K1internals() { + } + + static org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade createCliFe10AnalysisFacade() { + return new org.jetbrains.kotlin.analysis.api.descriptors.CliFe10AnalysisFacade(); + } + + static org.jetbrains.kotlin.analysis.api.descriptors.KaFe10AnalysisHandlerExtension createKaFe10AnalysisHandlerExtension() { + return new org.jetbrains.kotlin.analysis.api.descriptors.KaFe10AnalysisHandlerExtension(); + } + + static org.jetbrains.kotlin.references.fe10.base.DummyKtFe10ReferenceResolutionHelper dummyKtFe10ReferenceResolutionHelper() { + return org.jetbrains.kotlin.references.fe10.base.DummyKtFe10ReferenceResolutionHelper.INSTANCE; + } + +} diff --git a/sonar-kotlin-api/src/test/java/org/sonarsource/kotlin/api/frontend/KotlinLanguageVersionTest.kt b/sonar-kotlin-api/src/test/java/org/sonarsource/kotlin/api/frontend/KotlinLanguageVersionTest.kt index 8bdd8dd4f..3345d3af3 100644 --- a/sonar-kotlin-api/src/test/java/org/sonarsource/kotlin/api/frontend/KotlinLanguageVersionTest.kt +++ b/sonar-kotlin-api/src/test/java/org/sonarsource/kotlin/api/frontend/KotlinLanguageVersionTest.kt @@ -27,17 +27,17 @@ class KotlinLanguageVersionTest { @Test fun first_supported() { - assertThat(LanguageVersion.FIRST_SUPPORTED).isEqualTo(LanguageVersion.KOTLIN_1_4) + assertThat(LanguageVersion.FIRST_SUPPORTED).isEqualTo(LanguageVersion.KOTLIN_1_6) } @Test fun first_non_deprecated() { - assertThat(LanguageVersion.FIRST_NON_DEPRECATED).isEqualTo(LanguageVersion.KOTLIN_1_7) + assertThat(LanguageVersion.FIRST_NON_DEPRECATED).isEqualTo(LanguageVersion.KOTLIN_1_8) } @Test fun latest_stable() { - assertThat(LanguageVersion.LATEST_STABLE).isEqualTo(LanguageVersion.KOTLIN_2_0) + assertThat(LanguageVersion.LATEST_STABLE).isEqualTo(LanguageVersion.KOTLIN_2_1) } } diff --git a/sonar-kotlin-plugin/src/main/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimization.java b/sonar-kotlin-plugin/src/main/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimization.java index ed9bfb37f..8e94a3f86 100644 --- a/sonar-kotlin-plugin/src/main/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimization.java +++ b/sonar-kotlin-plugin/src/main/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimization.java @@ -44,6 +44,7 @@ public class WorkaroundForJarMinimization { org.jetbrains.kotlin.analysis.api.impl.base.lifetime.KaBaseLifetimeTracker.class, // META-INF/analysis-api/analysis-api-fe10.xml org.jetbrains.kotlin.analysis.api.descriptors.KaFe10SessionProvider.class, + org.jetbrains.kotlin.analysis.api.descriptors.modification.KaFe10SourceModificationService.class, org.jetbrains.kotlin.references.fe10.base.KtFe10KotlinReferenceProviderContributor.class, org.jetbrains.kotlin.analysis.api.descriptors.references.ReadWriteAccessCheckerDescriptorsImpl.class, diff --git a/sonar-kotlin-plugin/src/test/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimizationTest.kt b/sonar-kotlin-plugin/src/test/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimizationTest.kt index 95b77e262..bbc83ec45 100644 --- a/sonar-kotlin-plugin/src/test/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimizationTest.kt +++ b/sonar-kotlin-plugin/src/test/java/org/sonarsource/kotlin/plugin/linking/WorkaroundForJarMinimizationTest.kt @@ -22,6 +22,6 @@ import org.junit.jupiter.api.Test internal class WorkaroundForJarMinimizationTest { @Test fun minimizing_class_count() { - assertThat(WorkaroundForJarMinimization.CLASSES_TO_KEEP_WHEN_MINIMIZING_JAR).hasSize(16) + assertThat(WorkaroundForJarMinimization.CLASSES_TO_KEEP_WHEN_MINIMIZING_JAR).hasSize(17) } }