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.
This commit is contained in:
Vyacheslav Karpukhin
2018-01-30 18:46:03 +01:00
committed by Nikolay Krasko
parent f5e78a89bc
commit 53946456cf
3 changed files with 18 additions and 5 deletions
@@ -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() {
@@ -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)
}
@@ -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
}