diff --git a/plugins/kotlin/kotlin.ide/src/org/jetbrains/kotlin/idea/suggestions/AmperPluginSuggestionProvider.kt b/plugins/kotlin/kotlin.ide/src/org/jetbrains/kotlin/idea/suggestions/AmperPluginSuggestionProvider.kt new file mode 100644 index 000000000000..16bd20f0cb5a --- /dev/null +++ b/plugins/kotlin/kotlin.ide/src/org/jetbrains/kotlin/idea/suggestions/AmperPluginSuggestionProvider.kt @@ -0,0 +1,45 @@ +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.suggestions + +import com.intellij.openapi.project.Project +import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginSuggestion +import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.PluginSuggestionProvider +import com.intellij.openapi.updateSettings.impl.pluginsAdvertisement.buildSuggestionForFileIfNeeded +import com.intellij.openapi.vfs.VirtualFile + +private const val AMPER_PLUGIN_ID = "org.jetbrains.amper" +private const val AMPER_PLUGIN_NAME = "Amper" +private const val AMPER_FILE_LABEL = "Amper" +private const val AMPER_PLUGIN_SUGGESTION_KEY = "amper.plugin.suggestion.dismissed" + +private const val MODULE_YAML_FILE_NAME: String = "module.yaml" +private const val MODULE_AMPER_FILE_NAME: String = "module.amper" +private const val PROJECT_YAML_FILE_NAME: String = "project.yaml" +private const val PROJECT_AMPER_FILE_NAME: String = "project.amper" +private const val PLUGIN_YAML_FILE_NAME: String = "plugin.yaml" +private const val TEMPLATE_FILE_SUFFIX = ".module-template.yaml" + +internal class AmperPluginSuggestionProvider : PluginSuggestionProvider { + + override fun getSuggestion(project: Project, file: VirtualFile): PluginSuggestion? { + if (!file.isAmperFile()) return null + + return buildSuggestionForFileIfNeeded( + project, + AMPER_PLUGIN_ID, + AMPER_PLUGIN_NAME, + AMPER_FILE_LABEL, + AMPER_PLUGIN_SUGGESTION_KEY + ) + } + + private fun VirtualFile.isAmperFile(): Boolean = isAmperModuleFile() || isAmperProjectFile() || isAmperTemplateFile() || isAmperPluginFile() + + private fun VirtualFile.isAmperModuleFile(): Boolean = name.equals(MODULE_YAML_FILE_NAME, ignoreCase = true) || name.equals(MODULE_AMPER_FILE_NAME, ignoreCase = true) + + private fun VirtualFile.isAmperTemplateFile(): Boolean = name.endsWith(TEMPLATE_FILE_SUFFIX, ignoreCase = true) + + private fun VirtualFile.isAmperProjectFile(): Boolean = name.equals(PROJECT_YAML_FILE_NAME, ignoreCase = true) || name.equals(PROJECT_AMPER_FILE_NAME, ignoreCase = true) + + private fun VirtualFile.isAmperPluginFile(): Boolean = name.equals(PLUGIN_YAML_FILE_NAME, ignoreCase = true) +} diff --git a/plugins/kotlin/plugin/common/resources/META-INF/kotlin-core.xml b/plugins/kotlin/plugin/common/resources/META-INF/kotlin-core.xml index c8ed9ee3b617..3f252a2da2ad 100644 --- a/plugins/kotlin/plugin/common/resources/META-INF/kotlin-core.xml +++ b/plugins/kotlin/plugin/common/resources/META-INF/kotlin-core.xml @@ -277,6 +277,7 @@ order="after propertyKeys"/> +