summaryrefslogtreecommitdiff
path: root/plugins/kotlin/gradle/gradle-java/tests/test/org/jetbrains/kotlin/idea/codeInsight/gradle/ImportStatusCollector.kt
blob: 6e8631ad5899268c1d61a92e36f3f925abc441ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.idea.codeInsight.gradle

import com.intellij.build.events.BuildIssueEvent
import com.intellij.build.events.MessageEvent
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationEvent
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListenerAdapter
import com.intellij.openapi.externalSystem.model.task.event.ExternalSystemBuildEvent

/**
 * Collects all events from external system (such as gradle) during import
 * these events usually appears in Build windows -> Build Output tab (by default on left side next to build logs)
 */
class ImportStatusCollector : ExternalSystemTaskNotificationListenerAdapter() {
    private val events: MutableList<ExternalSystemTaskNotificationEvent> = mutableListOf()

    override fun onStatusChange(event: ExternalSystemTaskNotificationEvent) {
        events.add(event)
    }

    val allEvents get() = events.toList()
    val buildEvents get() = events.filterIsInstance<ExternalSystemBuildEvent>()

    val buildErrors get() = buildEvents
        .mapNotNull { it.buildEvent as? BuildIssueEvent }
        .filter { it.kind == MessageEvent.Kind.ERROR }
}