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:
committed by
Nikolay Krasko
parent
f5e78a89bc
commit
53946456cf
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user