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 d39102e476d..71a64dfc39b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinPluginUtil.java @@ -14,24 +14,45 @@ import org.jetbrains.annotations.NotNull; import java.util.Arrays; public class KotlinPluginUtil { - public static final PluginId KOTLIN_PLUGIN_ID; + private static final String PATCHED_PLUGIN_VERSION; + private static final String PATCHED_PLUGIN_VERSION_KEY = "kotlin.plugin.version"; + static { PluginId pluginId = PluginManagerCore.getPluginByClassName(KotlinPluginUtil.class.getName()); if (pluginId == null) { pluginId = PluginId.getId("org.jetbrains.kotlin"); } KOTLIN_PLUGIN_ID = pluginId; + + PATCHED_PLUGIN_VERSION = System.getProperty(PATCHED_PLUGIN_VERSION_KEY, null); } @NotNull public static String getPluginVersion() { + if (PATCHED_PLUGIN_VERSION != null) { + assert isPatched(); + return PATCHED_PLUGIN_VERSION; + } + + //noinspection deprecation + return getPluginVersionFromIdea(); + } + + @SuppressWarnings("DeprecatedIsStillUsed") + @Deprecated + @NotNull + public static String getPluginVersionFromIdea() { IdeaPluginDescriptor plugin = PluginManager.getPlugin(KOTLIN_PLUGIN_ID); assert plugin != null : "Kotlin plugin not found: " + Arrays.toString(PluginManagerCore.getPlugins()); return plugin.getVersion(); } + public static boolean isPatched() { + return PATCHED_PLUGIN_VERSION != null; + } + public static boolean isSnapshotVersion() { return "@snapshot@".equals(getPluginVersion()); } diff --git a/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt b/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt index df552290445..cb827e5cc44 100644 --- a/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt +++ b/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt @@ -136,7 +136,7 @@ class KotlinPluginUpdater(val propertiesComponent: PropertiesComponent) : Dispos private fun updateCheck(callback: (PluginUpdateStatus) -> Boolean) { var updateStatus: PluginUpdateStatus - if (KotlinPluginUtil.isSnapshotVersion()) { + if (KotlinPluginUtil.isSnapshotVersion() || KotlinPluginUtil.isPatched()) { updateStatus = PluginUpdateStatus.LatestVersionInstalled } else { try { diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java index 42f02aaf7d5..73a9d525d99 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/ConfigurePluginUpdatesForm.java @@ -29,7 +29,16 @@ public class ConfigurePluginUpdatesForm { public ConfigurePluginUpdatesForm() { showVerifierDisabledStatus(); - currentVersion.setText(KotlinPluginUtil.getPluginVersion()); + + String pluginVersion = KotlinPluginUtil.getPluginVersion(); + + if (KotlinPluginUtil.isPatched()) { + @SuppressWarnings("deprecation") + String pluginVersionFromIdea = KotlinPluginUtil.getPluginVersionFromIdea(); + currentVersion.setText(pluginVersion + " (Patched! Original: " + pluginVersionFromIdea + ")"); + } else { + currentVersion.setText(pluginVersion); + } if (ApplicationManager.getApplication().isInternal()) { String buildNumber = VersioningKt.getBuildNumber(); diff --git a/idea/src/org/jetbrains/kotlin/idea/reporter/KotlinReportSubmitter.kt b/idea/src/org/jetbrains/kotlin/idea/reporter/KotlinReportSubmitter.kt index bca48638891..17ab56fee9a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/reporter/KotlinReportSubmitter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/reporter/KotlinReportSubmitter.kt @@ -16,9 +16,14 @@ package org.jetbrains.kotlin.idea.reporter +import com.intellij.diagnostic.ReportMessages +import com.intellij.ide.DataManager +import com.intellij.notification.NotificationType +import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.diagnostic.IdeaLoggingEvent import com.intellij.openapi.diagnostic.SubmittedReportInfo +import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import com.intellij.util.Consumer import org.jetbrains.kotlin.idea.KotlinPluginUpdater @@ -56,6 +61,19 @@ class KotlinReportSubmitter : ITNReporterCompat() { return super.submitCompat(events, additionalInfo, parentComponent, consumer) } + val project: Project? = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(parentComponent)) + if (KotlinPluginUtil.isPatched()) { + ReportMessages.GROUP + .createNotification( + ReportMessages.ERROR_REPORT, + "Can't report exception from patched plugin", + NotificationType.INFORMATION, + null) + .setImportant(false) + .notify(project) + return true + } + KotlinPluginUpdater.getInstance().runUpdateCheck { status -> if (status is PluginUpdateStatus.Update) { hasUpdate = true @@ -82,6 +100,7 @@ class KotlinReportSubmitter : ITNReporterCompat() { } false } + return true }