Fix build helpers publishing (#1416)

* Fix compatibility with Intellij 2021.3

Resolves #1373

* Use Java reflection

* Set Java source & target compatibility for build helpers

Otherwise, Gradle might set Gradle metadata attributes in such way,
that transitive dependencies of published modules are not resolved

* Configure shadow jar manually

Applying plugin configures additional publication,
so that both .jar and -shadow.jar are published,
and additional configurations are added to Gradle metadata.

To avoid unexpected metadata resolution results,
ShadowJar task is now configured manually

* Fix closeStagingRepo JSON request

* Update publishing build-helpers in compose
This commit is contained in:
Alexey Tsvetkov
2021-11-18 13:00:54 +03:00
committed by GitHub
parent 5168a86755
commit 588ad2c8c0
10 changed files with 47 additions and 16 deletions

View File

@@ -3,8 +3,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile
plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "1.5.10"
id("org.jetbrains.intellij") version "1.1.2"
id("org.jetbrains.changelog") version "1.1.2"
id("org.jetbrains.intellij") version "1.3.0"
id("org.jetbrains.changelog") version "1.3.1"
}
val projectProperties = ProjectProperties(project)

View File

@@ -1,12 +1,12 @@
# Opt-out flag for bundling Kotlin standard library.
# See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details.
kotlin.stdlib.default.dependency = false
kotlin.stdlib.default.dependency=false
deploy.version=0.1-SNAPSHOT
plugin.channels=snapshots
plugin.since.build=203
plugin.until.build=212.*
plugin.until.build=213.*
## See https://jb.gg/intellij-platform-builds-list for available build versions.
plugin.verifier.ide.versions=2020.3.2, 2021.1

View File

@@ -13,7 +13,6 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
import com.intellij.util.concurrency.annotations.RequiresReadLock
import org.jetbrains.kotlin.idea.configuration.KotlinTargetData
import org.jetbrains.plugins.gradle.settings.GradleSettings
import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -30,7 +29,7 @@ internal class ConfigurePreviewTaskNameProviderImpl : ConfigurePreviewTaskNamePr
val modulePath = ExternalSystemApiUtil.getExternalProjectPath(module) ?: return null
val moduleNode = moduleDataNodeOrNull(module.project, modulePath)
if (moduleNode != null) {
val target = ExternalSystemApiUtil.getChildren(moduleNode, KotlinTargetData.KEY).singleOrNull()
val target = ExternalSystemApiUtil.getChildren(moduleNode, kotlinTargetDataKey).singleOrNull()
if (target != null) {
return previewTaskName(target.data.externalName)
}

View File

@@ -8,7 +8,6 @@ package org.jetbrains.compose.desktop.ide.preview
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.roots.ProjectFileIndex
import com.intellij.util.concurrency.annotations.RequiresReadLock
import org.jetbrains.kotlin.idea.debugger.getService
import org.jetbrains.kotlin.psi.KtNamedFunction
data class PreviewLocation(val fqName: String, val modulePath: String, val taskName: String)
@@ -21,7 +20,7 @@ internal fun KtNamedFunction.asPreviewFunctionOrNull(): PreviewLocation? {
val module = ProjectFileIndex.getInstance(project).getModuleForFile(containingFile.virtualFile)
if (module == null || module.isDisposed) return null
val service = project.getService<PreviewStateService>()
val service = project.getService(PreviewStateService::class.java)
val previewTaskName = service.configurePreviewTaskNameOrNull(module) ?: DEFAULT_CONFIGURE_PREVIEW_TASK_NAME
val modulePath = ExternalSystemApiUtil.getExternalProjectPath(module) ?: return null
return PreviewLocation(fqName = fqName, modulePath = modulePath, taskName = previewTaskName)

View File

@@ -17,7 +17,7 @@ import com.intellij.openapi.util.Disposer
import com.intellij.ui.components.JBLoadingPanel
import com.intellij.util.concurrency.annotations.RequiresReadLock
import org.jetbrains.compose.desktop.ui.tooling.preview.rpc.*
import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
import org.jetbrains.plugins.gradle.util.GradleConstants
import javax.swing.JComponent
import javax.swing.event.AncestorEvent
import javax.swing.event.AncestorListener
@@ -140,7 +140,7 @@ private class ConfigurePreviewTaskNameCacheInvalidator(
) : ExternalSystemTaskNotificationListenerAdapter(null) {
override fun onStart(id: ExternalSystemTaskId, workingDir: String?) {
if (
id.projectSystemId == GRADLE_SYSTEM_ID &&
id.projectSystemId == GradleConstants.SYSTEM_ID &&
id.type == ExternalSystemTaskType.RESOLVE_PROJECT
) {
configurePreviewTaskNameCache.invalidate()

View File

@@ -0,0 +1,30 @@
/*
* Copyright 2020-2021 JetBrains s.r.o. and respective authors and developers.
* Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file.
*/
package org.jetbrains.compose.desktop.ide.preview
import com.intellij.openapi.externalSystem.model.Key
import com.intellij.openapi.externalSystem.model.project.AbstractNamedData
import java.lang.reflect.Modifier
internal val kotlinTargetDataKey: Key<out AbstractNamedData> = run {
val kotlinTargetDataClass = try {
Class.forName("org.jetbrains.kotlin.idea.gradle.configuration.KotlinTargetData")
} catch (e: ClassNotFoundException) {
try {
Class.forName("org.jetbrains.kotlin.idea.configuration.KotlinTargetData")
} catch (e: ClassNotFoundException) {
error("Could not find 'KotlinTargetData' class")
}
}
val companionField = kotlinTargetDataClass.fields.firstOrNull { Modifier.isStatic(it.modifiers) && it.name == "Companion" }
?: error("'${kotlinTargetDataClass.canonicalName}.Companion")
val companionInstance = companionField.get(kotlinTargetDataClass)
val companionClass = companionInstance.javaClass
val getKeyMethod = companionClass.methods.firstOrNull { it.name == "getKEY" }
?: error("Cannot find '${kotlinTargetDataClass.canonicalName}.Companion.getKEY'")
@Suppress("UNCHECKED_CAST")
getKeyMethod.invoke(companionInstance) as Key<out AbstractNamedData>
}