From 53946456cfe90100f1ffc4af9a0eefe5a60b2a35 Mon Sep 17 00:00:00 2001 From: Vyacheslav Karpukhin Date: Tue, 30 Jan 2018 18:46:03 +0100 Subject: [PATCH] Do not use hardcoded plugin ID for update checks When Kotlin plugin is bundled into another plugin, there won't be a plugin with ID org.jetbrains.kotlin registered in PluginManager, which leads to runtime exceptions. To fix that let's determine the plugin ID dynamically instead. --- .../org/jetbrains/kotlin/idea/KotlinPluginUtil.java | 11 ++++++++++- .../org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt | 3 ++- .../idea/actions/ConfigurePluginUpdatesAction.kt | 9 ++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java index 1a4282052a0..a54feee6ac3 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManager; import com.intellij.ide.plugins.PluginManagerCore; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.extensions.PluginId; import org.jetbrains.annotations.NotNull; @@ -15,7 +16,15 @@ import java.util.Arrays; public class KotlinPluginUtil { - public static final PluginId KOTLIN_PLUGIN_ID = PluginId.getId("org.jetbrains.kotlin"); + public static final PluginId KOTLIN_PLUGIN_ID; + + static { + PluginId pluginId = PluginManagerCore.getPluginByClassName(KotlinPluginUtil.class.getName()); + if (pluginId == null && ApplicationManager.getApplication().isUnitTestMode()) { + pluginId = PluginId.getId("org.jetbrains.kotlin"); + } + KOTLIN_PLUGIN_ID = pluginId; + } @NotNull public static String getPluginVersion() { diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt index e9f39ff24c2..f38915c9192 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt @@ -162,7 +162,8 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos val currentVersion = KotlinPluginUtil.getPluginVersion() val os = URLEncoder.encode(SystemInfo.OS_NAME + " " + SystemInfo.OS_VERSION, CharsetToolkit.UTF8) val uid = PermanentInstallationID.get() - val url = "https://plugins.jetbrains.com/plugins/list?pluginId=6954&build=$buildNumber&pluginVersion=$currentVersion&os=$os&uuid=$uid" + val pluginId = KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString + val url = "https://plugins.jetbrains.com/plugins/list?pluginId=$pluginId&build=$buildNumber&pluginVersion=$currentVersion&os=$os&uuid=$uid" val responseDoc = HttpRequests.request(url).connect { JDOMUtil.load(it.inputStream) } diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt index a19d2478585..01f1169ef76 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigurePluginUpdatesAction.kt @@ -101,7 +101,10 @@ class ConfigurePluginUpdatesDialog(project: Project?) : DialogWrapper(project, f private fun saveSelectedChannel(channel: Int) { val hosts = UpdateSettings.getInstance().storedPluginHosts - hosts.removeIf { it.startsWith("https://plugins.jetbrains.com/plugins/") && it.endsWith("/6954") } + hosts.removeIf { + it.startsWith("https://plugins.jetbrains.com/plugins/") && + (it.endsWith("/6954") || it.endsWith(KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString)) + } when (channel) { EAP_1_3.uiIndex -> hosts.add(EAP_1_3.url) EAP_1_2.uiIndex -> hosts.add(EAP_1_2.url) @@ -119,8 +122,8 @@ class ConfigurePluginUpdatesDialog(project: Project?) : DialogWrapper(project, f } enum class EAPChannels(val url: String, val uiIndex: Int) { - EAP_1_2("https://plugins.jetbrains.com/plugins/eap-1.2/6954", 1), - EAP_1_3("https://plugins.jetbrains.com/plugins/eap-next/6954", 2); + EAP_1_2("https://plugins.jetbrains.com/plugins/eap-1.2/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 1), + EAP_1_3("https://plugins.jetbrains.com/plugins/eap-next/${KotlinPluginUtil.KOTLIN_PLUGIN_ID.idString}", 2); val hasChannel: Boolean get() = url in UpdateSettings.getInstance().pluginHosts }