diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.kt index 443f82a5782..c561f1583f2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/notifications/ConfigureKotlinNotification.kt @@ -14,89 +14,62 @@ * limitations under the License. */ -package org.jetbrains.kotlin.idea.configuration.ui.notifications; +package org.jetbrains.kotlin.idea.configuration.ui.notifications -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationListener; -import com.intellij.notification.NotificationType; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.util.Function; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinInProjectUtilsKt; -import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator; -import org.jetbrains.kotlin.idea.configuration.ui.KotlinConfigurationCheckerComponent; +import com.intellij.notification.Notification +import com.intellij.notification.NotificationListener +import com.intellij.notification.NotificationType +import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator +import org.jetbrains.kotlin.idea.configuration.getAbleToRunConfigurators +import org.jetbrains.kotlin.idea.configuration.getConfiguratorByName +import org.jetbrains.kotlin.idea.configuration.getNonConfiguredModules +import org.jetbrains.kotlin.idea.configuration.ui.KotlinConfigurationCheckerComponent +import javax.swing.event.HyperlinkEvent -import javax.swing.event.HyperlinkEvent; -import java.util.Collection; -import java.util.List; +class ConfigureKotlinNotification( + project: Project, + excludeModules: List) : Notification(KotlinConfigurationCheckerComponent.CONFIGURE_NOTIFICATION_GROUP_ID, "Configure Kotlin", + getNotificationString(project, excludeModules), + NotificationType.WARNING, NotificationListener { notification, event -> + if (event.eventType == HyperlinkEvent.EventType.ACTIVATED) { + val configurator = getConfiguratorByName(event.description) ?: throw AssertionError("Missed action: " + event.description) + notification.expire() -import static kotlin.collections.CollectionsKt.first; + configurator.configure(project, excludeModules) + } +}) { -public class ConfigureKotlinNotification extends Notification { - private static final String TITLE = "Configure Kotlin"; + override fun equals(o: Any?): Boolean { + if (this === o) return true + if (o !is ConfigureKotlinNotification) return false - public ConfigureKotlinNotification( - @NotNull final Project project, - @NotNull final List excludeModules - ) { - super(KotlinConfigurationCheckerComponent.CONFIGURE_NOTIFICATION_GROUP_ID, TITLE, getNotificationString(project, excludeModules), - NotificationType.WARNING, new NotificationListener() { - @Override - public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent event) { - if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - KotlinProjectConfigurator configurator = ConfigureKotlinInProjectUtilsKt.getConfiguratorByName(event.getDescription()); - if (configurator == null) { - throw new AssertionError("Missed action: " + event.getDescription()); - } - notification.expire(); + if (content != o.content) return false - configurator.configure(project, excludeModules); - } + return true + } + + override fun hashCode(): Int { + return content.hashCode() + } + + companion object { + fun getNotificationString(project: Project, excludeModules: Collection): String { + val modules = getNonConfiguredModules(project, excludeModules) + + val isOnlyOneModule = modules.size == 1 + + val modulesString = if (isOnlyOneModule) "'${modules.first().name}' module" else "modules" + val links = getAbleToRunConfigurators(project).joinToString(separator = "
") { + configurator -> getLink(configurator, isOnlyOneModule) } - }); - } - @NotNull - public static String getNotificationString(Project project, Collection excludeModules) { - Collection modules = ConfigureKotlinInProjectUtilsKt.getNonConfiguredModules(project, excludeModules); + return "Configure $modulesString in '${project.name}' project
$links" + } - final boolean isOnlyOneModule = modules.size() == 1; - - String modulesString = isOnlyOneModule ? String.format("'%s' module", first(modules).getName()) : "modules"; - String links = StringUtil.join(ConfigureKotlinInProjectUtilsKt.getAbleToRunConfigurators(project), new Function() { - @Override - public String fun(KotlinProjectConfigurator configurator) { - return getLink(configurator, isOnlyOneModule); - } - }, "
"); - - return String.format("Configure %s in '%s' project
%s", modulesString, project.getName(), links); - } - - @NotNull - private static String getLink(@NotNull KotlinProjectConfigurator configurator, boolean isOnlyOneModule) { - return StringUtil.join("as Kotlin (", - configurator.getPresentableText(), - isOnlyOneModule ? ") module" : ") modules", - ""); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof ConfigureKotlinNotification)) return false; - - ConfigureKotlinNotification that = (ConfigureKotlinNotification) o; - - if (!getContent().equals(that.getContent())) return false; - - return true; - } - - @Override - public int hashCode() { - return getContent().hashCode(); + private fun getLink(configurator: KotlinProjectConfigurator, isOnlyOneModule: Boolean): String { + return "as Kotlin (${configurator.presentableText}) module${if(!isOnlyOneModule) "s" else ""}" + } } }