summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Zarechenskiy <mikhail.zarechenskiy@jetbrains.com>2022-06-27 11:49:36 +0200
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>2022-06-27 16:38:52 +0000
commit2488f885990f6dbfa1839eb777c7c79b65f946df (patch)
tree892b4442e0e1cf7baac3cc53fd38a17380e16800
parentdef30844cda555fcc28de0399f9a033abaec76cf (diff)
downloadintellij-kotlin-2488f885990f6dbfa1839eb777c7c79b65f946df.tar.gz
[kotlin] Show notification with features advertisement for Beta users
^KTIJ-22065 (cherry picked from commit ad66ad258cb111f030ddf59a3f7eb2c690a84b09) GitOrigin-RevId: b9919103bab5e2163afcc5228aea3db6987cc98c
-rw-r--r--plugins/kotlin/frontend-independent/resources-en/messages/KotlinBundle.properties5
-rw-r--r--plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt3
-rw-r--r--plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.kt1
-rw-r--r--plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt6
-rw-r--r--plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/configuration/notifications/eapAdvertismentNotification.kt38
-rw-r--r--plugins/kotlin/plugin/resources/META-INF/kotlin-core.xml5
6 files changed, 54 insertions, 4 deletions
diff --git a/plugins/kotlin/frontend-independent/resources-en/messages/KotlinBundle.properties b/plugins/kotlin/frontend-independent/resources-en/messages/KotlinBundle.properties
index 70447b25c53f..c23037bf96de 100644
--- a/plugins/kotlin/frontend-independent/resources-en/messages/KotlinBundle.properties
+++ b/plugins/kotlin/frontend-independent/resources-en/messages/KotlinBundle.properties
@@ -717,6 +717,11 @@ kotlin.eap.survey.notification.title=Kotlin Early Access Program
kotlin.eap.survey.notification.text=We want to know more about you and how we can make the EAP experience more convenient!
kotlin.eap.survey.notification.action=Take EAP survey
kotlin.eap.survey.notification.link=https://surveys.jetbrains.com/s3/kotlin-eaps-survey
+kotlin.eap.advertisement.notification.title=Try Kotlin 1.7.20\u2019s features early!
+kotlin.eap.notification.group.name=Kotlin EAP
+kotlin.eap.advertisement.notification.text=Change the Kotlin version in your build scripts to 1.7.20-Beta today.
+kotlin.eap.advertisement.notification.action=Learn about the new features
+kotlin.eap.advertisement.notification.link=https://kotlinlang.org/docs/whatsnew-eap.html?utm_source=ide&utm_medium=notification&utm_campaign=1-7-20-beta
configuration.name.kotlin.compiler=Kotlin Compiler
configuration.name.kotlin=Kotlin
configuration.name.method=Method
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt
index 734de7d490ca..6a7f25ddb2d3 100644
--- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt
+++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/KotlinPluginUpdater.kt
@@ -92,8 +92,7 @@ class KotlinPluginUpdater : Disposable {
@Volatile
private var lastUpdateStatus: PluginUpdateStatus? = null
- fun kotlinFileEdited(file: VirtualFile) {
- if (!file.isInLocalFileSystem) return
+ fun kotlinFileEdited() {
if (isUnitTestMode() || ApplicationManager.getApplication().isHeadlessEnvironment) return
if (!UpdateSettings.getInstance().isCheckNeeded) return
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.kt
index 7f63e31a080e..f34b849fb3e2 100644
--- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.kt
+++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupActivity.kt
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.KotlinPluginCompatibilityVerifier.checkCompatibility
import org.jetbrains.kotlin.idea.configuration.notifications.notifyKotlinStyleUpdateIfNeeded
+import org.jetbrains.kotlin.idea.configuration.notifications.showEapAdvertisementNotification
import org.jetbrains.kotlin.idea.configuration.notifications.showEapSurveyNotification
import org.jetbrains.kotlin.idea.reporter.KotlinReportSubmitter.Companion.setupReportingFromRelease
import org.jetbrains.kotlin.idea.search.containsKotlinFile
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt
index 234368acc3cc..e4498fd6a2cd 100644
--- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt
+++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/PluginStartupService.kt
@@ -11,6 +11,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.psi.search.searches.IndexPatternSearch
+import org.jetbrains.kotlin.idea.configuration.notifications.showEapAdvertisementNotification
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinTodoSearcher
import org.jetbrains.kotlin.idea.util.application.getServiceSafe
@@ -21,8 +22,9 @@ class PluginStartupService : Disposable {
val documentListener: DocumentListener = object : DocumentListener {
override fun documentChanged(e: DocumentEvent) {
FileDocumentManager.getInstance().getFile(e.document)?.let { virtualFile ->
- if (virtualFile.fileType === KotlinFileType.INSTANCE) {
- KotlinPluginUpdater.getInstance().kotlinFileEdited(virtualFile)
+ if (virtualFile.fileType === KotlinFileType.INSTANCE && virtualFile.isInLocalFileSystem) {
+ KotlinPluginUpdater.getInstance().kotlinFileEdited()
+ showEapAdvertisementNotification()
}
}
}
diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/configuration/notifications/eapAdvertismentNotification.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/configuration/notifications/eapAdvertismentNotification.kt
new file mode 100644
index 000000000000..cb0200aba2b5
--- /dev/null
+++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/configuration/notifications/eapAdvertismentNotification.kt
@@ -0,0 +1,38 @@
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package org.jetbrains.kotlin.idea.configuration.notifications
+
+import com.intellij.ide.util.RunOnceUtil
+import com.intellij.notification.BrowseNotificationAction
+import com.intellij.notification.NotificationGroupManager
+import com.intellij.notification.NotificationType
+import org.jetbrains.kotlin.idea.KotlinBundle
+import org.jetbrains.kotlin.idea.KotlinIcons
+import org.jetbrains.kotlin.idea.compiler.configuration.KotlinPluginLayout
+
+internal fun showEapAdvertisementNotification() {
+ val compilerVersion = KotlinPluginLayout.instance.ideCompilerVersion
+ if (!compilerVersion.startsWith("1.7.20-Beta")) return
+
+ // yes, this is hack, because 221 & 213 branches do not have API for the version parsing
+ if (compilerVersion.startsWith("1.7.20-Beta2") || compilerVersion.startsWith("1.7.20-Beta3")) return
+
+ RunOnceUtil.runOnceForApp("kotlin.eap.advertisement.was.shown.once") {
+ NotificationGroupManager.getInstance()
+ .getNotificationGroup("Kotlin EAP")
+ .createNotification(
+ KotlinBundle.message("kotlin.eap.advertisement.notification.title"),
+ KotlinBundle.message("kotlin.eap.advertisement.notification.text"),
+ NotificationType.INFORMATION,
+ )
+ .addAction(
+ BrowseNotificationAction(
+ KotlinBundle.message("kotlin.eap.advertisement.notification.action"),
+ KotlinBundle.message("kotlin.eap.advertisement.notification.link"),
+ )
+ )
+ .setSuggestionType(true)
+ .setIcon(KotlinIcons.SMALL_LOGO)
+ .setImportant(true)
+ .notify(null)
+ }
+} \ No newline at end of file
diff --git a/plugins/kotlin/plugin/resources/META-INF/kotlin-core.xml b/plugins/kotlin/plugin/resources/META-INF/kotlin-core.xml
index 8195beceea2f..b142450897cf 100644
--- a/plugins/kotlin/plugin/resources/META-INF/kotlin-core.xml
+++ b/plugins/kotlin/plugin/resources/META-INF/kotlin-core.xml
@@ -392,6 +392,11 @@
key="kotlin.eap.survey.notification.group.name"
/>
<notificationGroup
+ id="Kotlin EAP"
+ displayType="STICKY_BALLOON"
+ key="kotlin.eap.notification.group.name"
+ />
+ <notificationGroup
id="Update Kotlin code style"
displayType="STICKY_BALLOON"
key="configuration.kotlin.code.style.group.name"