Skip to content

Commit

Permalink
UPDATE_KOTLIN_VERSION: 2.2.0-dev-745 (#2332)
Browse files Browse the repository at this point in the history
* UPDATE_KOTLIN_VERSION: 2.2.0-dev-745

* UPDATE_AA_VERSION: 2.2.0-dev-745
  • Loading branch information
ting-yuan authored Feb 12, 2025
1 parent 07747f6 commit 0ff31b1
Show file tree
Hide file tree
Showing 12 changed files with 95 additions and 27 deletions.
1 change: 1 addition & 0 deletions compiler-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ dependencies {
testRuntimeOnly("org.junit.platform:junit-platform-suite:$junitPlatformVersion")
testImplementation("org.jetbrains.kotlin:kotlin-compiler:$kotlinBaseVersion")
testImplementation("org.jetbrains.kotlin:kotlin-compiler-internal-test-framework:$kotlinBaseVersion")
testImplementation("org.jetbrains.kotlin:analysis-api-test-framework:$kotlinBaseVersion")
testImplementation(project(":test-utils"))

libsForTesting(kotlin("stdlib", kotlinBaseVersion))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,16 @@ import com.google.devtools.ksp.symbol.Visibility
import com.google.devtools.ksp.symbol.impl.java.KSFileJavaImpl
import com.google.devtools.ksp.symbol.impl.kotlin.KSFileImpl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiJavaFile
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.file.impl.JavaFileManager
import com.intellij.util.ui.EDT
import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl
Expand Down Expand Up @@ -164,8 +167,10 @@ abstract class AbstractKotlinSymbolProcessingExtension(
logger.logging("round $rounds of processing")
val psiManager = PsiManager.getInstance(project)
if (initialized) {
psiManager.dropPsiCaches()
psiManager.dropResolveCaches()
maybeRunInWriteAction {
psiManager.dropPsiCaches()
psiManager.dropResolveCaches()
}
invalidateKotlinCliJavaFileManagerCache(project)
} else {
// In case of broken builds.
Expand Down Expand Up @@ -529,3 +534,20 @@ private fun invalidateKotlinCliJavaFileManagerCache(project: Project): Boolean {
(privateCacheField.get(javaFileManager) as? MutableMap<*, *>)?.clear() ?: return false
return true
}

private fun <R> maybeRunInWriteAction(f: () -> R) {
synchronized(EDT::class.java) {
if (!EDT.isCurrentThreadEdt()) {
val edt = EDT::class.java.getDeclaredField("myEventDispatchThread")
edt.isAccessible = true
edt.set(null, Thread.currentThread())
}
if (ApplicationManager.getApplication() != null) {
runWriteAction {
f()
}
} else {
f()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class KSAnnotationImpl private constructor(val ktAnnotationEntry: KtAnnotationEn
CONSTRUCTOR_PARAMETER -> AnnotationUseSiteTarget.PARAM
SETTER_PARAMETER -> AnnotationUseSiteTarget.SETPARAM
PROPERTY_DELEGATE_FIELD -> AnnotationUseSiteTarget.DELEGATE
ALL -> null
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.testFramework.TestDataFile
import org.jetbrains.kotlin.analysis.test.framework.services.TargetPlatformDirectives
import org.jetbrains.kotlin.analysis.test.framework.services.TargetPlatformProviderForAnalysisApiTests
import org.jetbrains.kotlin.cli.common.disposeRootInWriteAction
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot
Expand Down Expand Up @@ -58,13 +61,13 @@ abstract class DisposableTest {
protected val disposable: Disposable get() = _disposable!!

@BeforeEach
private fun initDisposable(testInfo: TestInfo) {
fun initDisposable(testInfo: TestInfo) {
_disposable = Disposer.newDisposable("disposable for ${testInfo.displayName}")
}

@AfterEach
private fun disposeDisposable() {
_disposable?.let { Disposer.dispose(it) }
fun disposeDisposable() {
_disposable?.let { disposeRootInWriteAction(it) }
_disposable = null
}
}
Expand Down Expand Up @@ -121,9 +124,11 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
useAdditionalService<KotlinStandardLibrariesPathProvider> { StandardLibrariesPathProviderForKotlinProject }
useAdditionalService<TargetPlatformProvider>(::TargetPlatformProviderForAnalysisApiTests)

useDirectives(*AbstractKotlinCompilerTest.defaultDirectiveContainers.toTypedArray())
useDirectives(JvmEnvironmentConfigurationDirectives)
useDirectives(TargetPlatformDirectives)

defaultDirectives {
+JvmEnvironmentConfigurationDirectives.FULL_JDK
Expand Down Expand Up @@ -163,7 +168,7 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
open fun compileModule(module: TestModule, testServices: TestServices) {
val javaFiles = module.writeJavaFiles()
val compilerConfiguration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
val dependencies = module.allDependencies.map { outDirForModule(it.moduleName) }
val dependencies = module.allDependencies.map { outDirForModule(it.dependencyModule.name) }
compilerConfiguration.addJvmClasspathRoots(dependencies)
compilerConfiguration.addJavaSourceRoot(module.javaDir)

Expand Down Expand Up @@ -196,8 +201,8 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
path,
testConfiguration.directives,
)
val dependencyProvider = DependencyProviderImpl(testServices, moduleStructure.modules)
testServices.registerDependencyProvider(dependencyProvider)
val dependencyProvider = ArtifactsProvider(testServices, moduleStructure.modules)
testServices.registerArtifactsProvider(dependencyProvider)
testServices.register(TestModuleStructure::class, moduleStructure)

val mainModule = moduleStructure.modules.last()
Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# Copied from kotlinc
org.gradle.jvmargs=-Duser.country=US -Dkotlin.daemon.jvm.options=-Xmx4096m -Dfile.encoding=UTF-8

kotlinBaseVersion=2.1.20-dev-8066
kotlinBaseVersion=2.2.0-dev-745
agpBaseVersion=8.10.0-alpha03
intellijVersion=233.13135.128
intellijVersion=241.19416.19
junitVersion=4.13.1
junit5Version=5.8.2
junitPlatformVersion=1.8.2
googleTruthVersion=1.1

aaKotlinBaseVersion=2.1.20-dev-8066
aaIntellijVersion=233.13135.128
aaKotlinBaseVersion=2.2.0-dev-745
aaIntellijVersion=241.19416.19
aaGuavaVersion=33.2.0-jre
aaAsmVersion=9.0
aaFastutilVersion=8.5.11-18
aaFastutilVersion=8.5.13-jb4
aaStax2Version=4.2.1
aaAaltoXmlVersion=1.3.0
aaStreamexVersion=0.7.2
Expand Down
4 changes: 4 additions & 0 deletions kotlin-analysis-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ dependencies {
"com.jetbrains.intellij.platform:core-impl",
"com.jetbrains.intellij.platform:extensions",
"com.jetbrains.intellij.platform:diagnostic",
"com.jetbrains.intellij.platform:diagnostic-telemetry",
"com.jetbrains.intellij.java:java-frontback-psi",
"com.jetbrains.intellij.java:java-frontback-psi-impl",
"com.jetbrains.intellij.java:java-psi",
Expand Down Expand Up @@ -102,6 +103,8 @@ dependencies {
}
implementation("org.jetbrains:annotations:24.1.0")

implementation("io.opentelemetry:opentelemetry-api:1.34.1") { isTransitive = false }

compileOnly(project(":common-deps"))

implementation(project(":api"))
Expand All @@ -117,6 +120,7 @@ dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-compiler-internal-test-framework:$aaKotlinBaseVersion")
testImplementation(project(":common-deps"))
testImplementation(project(":test-utils"))
testImplementation("org.jetbrains.kotlin:analysis-api-test-framework:$aaKotlinBaseVersion")

libsForTesting(kotlin("stdlib", aaKotlinBaseVersion))
libsForTesting(kotlin("test", aaKotlinBaseVersion))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ import com.google.devtools.ksp.symbol.Origin
import com.intellij.core.CoreApplicationEnvironment
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.StandardFileSystems
Expand All @@ -53,6 +55,7 @@ import com.intellij.psi.PsiManager
import com.intellij.psi.PsiTreeChangeAdapter
import com.intellij.psi.PsiTreeChangeListener
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.ui.EDT
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
import org.jetbrains.kotlin.analysis.api.KaImplementationDetail
import org.jetbrains.kotlin.analysis.api.platform.KotlinMessageBusProvider
Expand Down Expand Up @@ -539,12 +542,14 @@ class KotlinSymbolProcessing(
}

fun dropCaches() {
KotlinGlobalModificationService.getInstance(project).publishGlobalSourceModuleStateModification()
KaSessionProvider.getInstance(project).clearCaches()
psiManager.dropResolveCaches()
psiManager.dropPsiCaches()
maybeRunInWriteAction {
KotlinGlobalModificationService.getInstance(project).publishGlobalSourceModuleStateModification()
KaSessionProvider.getInstance(project).clearCaches()
psiManager.dropResolveCaches()
psiManager.dropPsiCaches()

KSObjectCacheManager.clear()
KSObjectCacheManager.clear()
}
}

var rounds = 0
Expand Down Expand Up @@ -623,7 +628,9 @@ class KotlinSymbolProcessing(
dropCaches()
codeGenerator.closeFiles()
} finally {
Disposer.dispose(projectDisposable)
maybeRunInWriteAction {
Disposer.dispose(projectDisposable)
}
}

return if (logger.hasError) ExitCode.PROCESSING_ERROR else ExitCode.OK
Expand Down Expand Up @@ -668,6 +675,8 @@ fun String?.toKotlinVersion(): KotlinVersion {
@Suppress("unused")
@OptIn(KaImplementationDetail::class)
internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap::class.java,
it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSourceWithSmartPointerFactory::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.projectStructure.KaBaseModuleProvider::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService::class.java,
Expand All @@ -677,7 +686,7 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
org.jetbrains.kotlin.analysis.api.standalone.base.declarations.KotlinStandaloneFirDirectInheritorsProvider::class.java,
org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLRealFirElementByPsiElementChooser::class.java,
org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInvalidationService::class.java,
org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.LLStubBasedLibrarySymbolProviderFactory::class.java,
org.jetbrains.kotlin.analysis.low.level.api.fir.symbolProviders.factories.LLStubOriginLibrarySymbolProviderFactory::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionChecker::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.permissions.KaBaseAnalysisPermissionRegistry::class.java,
org.jetbrains.kotlin.analysis.api.impl.base.symbols.pointers.KaBasePsiSymbolPointerCreator::class.java,
Expand All @@ -698,6 +707,8 @@ internal val DEAR_SHADOW_JAR_PLEASE_DO_NOT_REMOVE_THESE = listOf(
com.intellij.diagnostic.ActivityCategory::class.java,
com.intellij.openapi.application.JetBrainsProtocolHandler::class.java,
com.intellij.openapi.editor.impl.EditorDocumentPriorities::class.java,
com.intellij.platform.diagnostic.telemetry.TelemetryManager::class.java,
com.intellij.psi.impl.PsiSubstitutorImpl::class.java,
com.intellij.psi.tree.ChildRoleBase::class.java,
com.intellij.util.xmlb.Constants::class.java,
com.intellij.xml.CommonXmlStrings::class.java,
Expand Down Expand Up @@ -725,3 +736,17 @@ fun TargetPlatform.getPlatformInfo(kspConfig: KSPConfig): List<PlatformInfo> =
else -> UnknownPlatformInfoImpl(platform.toString())
}
}

private fun <R> maybeRunInWriteAction(f: () -> R) {
synchronized(EDT::class.java) {
if (!EDT.isCurrentThreadEdt())
EDT.updateEdt()
if (ApplicationManager.getApplication() != null) {
runWriteAction {
f()
}
} else {
f()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class KSAnnotationImpl private constructor(
CONSTRUCTOR_PARAMETER -> AnnotationUseSiteTarget.PARAM
SETTER_PARAMETER -> AnnotationUseSiteTarget.SETPARAM
PROPERTY_DELEGATE_FIELD -> AnnotationUseSiteTarget.DELEGATE
// FIXME
ALL -> null
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ class KSAnnotationResolvedImpl private constructor(
CONSTRUCTOR_PARAMETER -> AnnotationUseSiteTarget.PARAM
SETTER_PARAMETER -> AnnotationUseSiteTarget.SETPARAM
PROPERTY_DELEGATE_FIELD -> AnnotationUseSiteTarget.DELEGATE
// FIXME:
ALL -> null
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ abstract class AbstractKSPAATest : AbstractKSPTest(FrontendKinds.FIR) {
override fun compileModule(module: TestModule, testServices: TestServices) {
module.writeKtFiles()
val javaFiles = module.writeJavaFiles()
val dependencies = module.allDependencies.map { outDirForModule(it.moduleName) }
val dependencies = module.allDependencies.map { outDirForModule(it.dependencyModule.name) }
compileKotlin(dependencies, module.kotlinSrc.path, module.javaDir.path, module.outDir, module.name)
val classpath = (dependencies + KtTestUtil.getAnnotationsJar() + module.outDir)
.joinToString(File.pathSeparator) { it.absolutePath }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.testFramework.TestDataFile
import org.jetbrains.kotlin.analysis.test.framework.services.TargetPlatformDirectives
import org.jetbrains.kotlin.analysis.test.framework.services.TargetPlatformProviderForAnalysisApiTests
import org.jetbrains.kotlin.cli.common.disposeRootInWriteAction
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot
Expand Down Expand Up @@ -58,13 +61,13 @@ abstract class DisposableTest {
protected val disposable: Disposable get() = _disposable!!

@BeforeEach
private fun initDisposable(testInfo: TestInfo) {
fun initDisposable(testInfo: TestInfo) {
_disposable = Disposer.newDisposable("disposable for ${testInfo.displayName}")
}

@AfterEach
private fun disposeDisposable() {
_disposable?.let { Disposer.dispose(it) }
fun disposeDisposable() {
_disposable?.let { disposeRootInWriteAction(it) }
_disposable = null
}
}
Expand Down Expand Up @@ -121,9 +124,11 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
useAdditionalService<TemporaryDirectoryManager>(::TemporaryDirectoryManagerImpl)
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
useAdditionalService<KotlinStandardLibrariesPathProvider> { StandardLibrariesPathProviderForKotlinProject }
useAdditionalService<TargetPlatformProvider>(::TargetPlatformProviderForAnalysisApiTests)

useDirectives(*AbstractKotlinCompilerTest.defaultDirectiveContainers.toTypedArray())
useDirectives(JvmEnvironmentConfigurationDirectives)
useDirectives(TargetPlatformDirectives)

defaultDirectives {
+JvmEnvironmentConfigurationDirectives.FULL_JDK
Expand Down Expand Up @@ -163,7 +168,7 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
open fun compileModule(module: TestModule, testServices: TestServices) {
val javaFiles = module.writeJavaFiles()
val compilerConfiguration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module)
val dependencies = module.allDependencies.map { outDirForModule(it.moduleName) }
val dependencies = module.allDependencies.map { outDirForModule(it.dependencyModule.name) }
compilerConfiguration.addJvmClasspathRoots(dependencies)
compilerConfiguration.addJavaSourceRoot(module.javaDir)

Expand Down Expand Up @@ -196,8 +201,8 @@ abstract class AbstractKSPTest(frontend: FrontendKind<*>) : DisposableTest() {
path,
testConfiguration.directives,
)
val dependencyProvider = DependencyProviderImpl(testServices, moduleStructure.modules)
testServices.registerDependencyProvider(dependencyProvider)
val dependencyProvider = ArtifactsProvider(testServices, moduleStructure.modules)
testServices.registerArtifactsProvider(dependencyProvider)
testServices.register(TestModuleStructure::class, moduleStructure)

val mainModule = moduleStructure.modules.last()
Expand Down
1 change: 1 addition & 0 deletions symbol-processing-aa-embeddable/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ val prefixesToRelocate = listOf(
"com.intellij.",
"com.sun.jna.",
"gnu.trove.",
"io.opentelemetry.api.",
"it.unimi.dsi.",
"javaslang.",
"javax.inject.",
Expand Down

0 comments on commit 0ff31b1

Please sign in to comment.