[BuildEvent] new: add BuildEvents service with the BuildEvent builders

### Issues
  * IJPL-201465 External system: provide API to create instances of build event implementations

GitOrigin-RevId: 7a1bf97e64443be9366e6e4f66db70218966996e
This commit is contained in:
Sergei Vorobyov
2025-09-04 15:14:25 +00:00
committed by intellij-monorepo-bot
parent c37fbee0d7
commit 670c9b1cd8
75 changed files with 2632 additions and 735 deletions
@@ -3,8 +3,11 @@ package com.intellij.openapi.externalSystem.service.execution
import com.intellij.build.BuildProgressListener
import com.intellij.build.DefaultBuildDescriptor
import com.intellij.build.events.impl.*
import com.intellij.build.events.impl.BuildEventsImpl
import com.intellij.build.events.impl.SuccessResultImpl
import com.intellij.build.output.BuildOutputParser
import com.intellij.build.progress.BuildProgressDescriptorImpl
import com.intellij.build.progress.BuildRootProgressImpl
import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId
import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskType
@@ -15,10 +18,17 @@ import org.assertj.core.api.Assertions.assertThat
class ExternalSystemEventDispatcherTest : LightPlatformTestCase() {
private val buildEvents = BuildEventsImpl()
fun `test invokeOnCompletion`() {
val parsers = listOf(
BuildOutputParser { line, reader, messageConsumer ->
messageConsumer.accept(OutputBuildEventImpl(reader.parentEventId, line, true))
messageConsumer.accept(
buildEvents.output()
.withParentId(reader.parentEventId)
.withMessage(line)
.build()
)
return@BuildOutputParser true
}
)
@@ -30,7 +40,12 @@ class ExternalSystemEventDispatcherTest : LightPlatformTestCase() {
val parsers = listOf(
BuildOutputParser { _, _, _ -> throw RuntimeException("Bad parser") },
BuildOutputParser { line, reader, messageConsumer ->
messageConsumer.accept(OutputBuildEventImpl(reader.parentEventId, line, true))
messageConsumer.accept(
buildEvents.output()
.withParentId(reader.parentEventId)
.withMessage(line)
.build()
)
return@BuildOutputParser true
}
)
@@ -42,21 +57,23 @@ class ExternalSystemEventDispatcherTest : LightPlatformTestCase() {
val eventMessages = mutableListOf<String>()
ExtensionTestUtil.maskExtensions(ExternalSystemOutputParserProvider.EP_NAME, listOf(TestParserProvider(parsers)), testRootDisposable)
val semaphore = Semaphore(1)
val buildDescriptor = DefaultBuildDescriptor(taskId, "test task", "/path", System.currentTimeMillis())
val dispatcher = ExternalSystemEventDispatcher(taskId, BuildProgressListener { _, event -> eventMessages += event.message })
dispatcher.use {
it.onEvent(1, StartBuildEventImpl(DefaultBuildDescriptor(taskId, "test task", "/path", System.currentTimeMillis()), "Build started"))
it.invokeOnCompletion { eventMessages += "completion message 1" }
it.onEvent(1, StartEventImpl(2, 1, System.currentTimeMillis(), "sub task1 started"))
it.appendLine("Task output line 1")
it.onEvent(1, StartEventImpl(3, 1, System.currentTimeMillis(), "sub task2 started"))
it.appendLine("Task output line 2")
it.onEvent(1, FinishEventImpl(3, 1, System.currentTimeMillis(), "sub task2 finished", SuccessResultImpl()))
it.onEvent(1, FinishEventImpl(2, 1, System.currentTimeMillis(), "sub task1 finished", SuccessResultImpl()))
it.onEvent(1, FinishBuildEventImpl(taskId, null, System.currentTimeMillis(), "Build finished", SuccessResultImpl()))
it.invokeOnCompletion { throw RuntimeException("Bad happens") }
it.invokeOnCompletion { eventMessages += "completion message 2" }
it.invokeOnCompletion { semaphore.up() }
it.appendLine("Task output line 3")
val buildRootProgress = BuildRootProgressImpl(buildEvents, dispatcher)
buildRootProgress.start("Build started", BuildProgressDescriptorImpl(buildDescriptor))
dispatcher.invokeOnCompletion { eventMessages += "completion message 1" }
val task1Progress = buildRootProgress.startChildProgress("sub task1 started")
dispatcher.appendLine("Task output line 1")
val task2Progress = buildRootProgress.startChildProgress("sub task2 started")
dispatcher.appendLine("Task output line 2")
task2Progress.finish("sub task2 finished", SuccessResultImpl())
task1Progress.finish("sub task1 finished", SuccessResultImpl())
buildRootProgress.finish("Build finished", SuccessResultImpl())
dispatcher.invokeOnCompletion { throw RuntimeException("Bad happens") }
dispatcher.invokeOnCompletion { eventMessages += "completion message 2" }
dispatcher.invokeOnCompletion { semaphore.up() }
dispatcher.appendLine("Task output line 3")
}
dispatcher.invokeOnCompletion { eventMessages += "Late completion message" }
+146
View File
@@ -14,17 +14,163 @@
- getLanguage():com.intellij.lang.Language
- getLanguageDomainId():java.lang.String
- getPropertyDescription(java.lang.String):java.lang.String
*:com.intellij.build.BuildViewSettingsProvider
- a:isExecutionViewHidden():Z
*:com.intellij.build.BuildWorkspaceConfiguration
- s:getInstance(com.intellij.openapi.project.Project):com.intellij.build.BuildWorkspaceConfiguration
- a:isShowFirstErrorInEditor():Z
*:com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:build():com.intellij.build.events.BuildIssueEvent
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:withIssue(com.intellij.build.issue.BuildIssue):com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:withKind(com.intellij.build.events.MessageEvent$Kind):com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.BuildIssueEventBuilder
*:com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:build():com.intellij.build.events.FileDownloadEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withDownloadPath(java.lang.String):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withFirstInGroup(Z):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withProgress(java.lang.Long):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withStartId(java.lang.Object):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withTotal(java.lang.Long):com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:withUnit(java.lang.String):com.intellij.build.eventBuilders.FileDownloadEventBuilder
*:com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:build():com.intellij.build.events.FileDownloadedEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withDownloadPath(java.lang.String):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withDuration(J):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withStartId(java.lang.Object):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.FileDownloadedEventBuilder
*:com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:build():com.intellij.build.events.FileMessageEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withFilePosition(com.intellij.build.FilePosition):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withGroup(java.lang.String):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withKind(com.intellij.build.events.MessageEvent$Kind):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.FileMessageEventBuilder
*:com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:build():com.intellij.build.events.FinishBuildEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withResult(com.intellij.build.events.EventResult):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withStartBuildId(java.lang.Object):com.intellij.build.eventBuilders.FinishBuildEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.FinishBuildEventBuilder
*:com.intellij.build.eventBuilders.FinishEventBuilder
- a:build():com.intellij.build.events.FinishEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withResult(com.intellij.build.events.EventResult):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withStartId(java.lang.Object):com.intellij.build.eventBuilders.FinishEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.FinishEventBuilder
*:com.intellij.build.eventBuilders.MessageEventBuilder
- a:build():com.intellij.build.events.MessageEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withGroup(java.lang.String):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withKind(com.intellij.build.events.MessageEvent$Kind):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withNavigatable(com.intellij.pom.Navigatable):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.MessageEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.MessageEventBuilder
*:com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:build():com.intellij.build.events.OutputBuildEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withOutputType(com.intellij.execution.process.ProcessOutputType):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.OutputBuildEventBuilder
*:com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:build():com.intellij.build.events.PresentableBuildEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withPresentationData(com.intellij.build.events.BuildEventPresentationData):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.PresentableBuildEventBuilder
*:com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:build():com.intellij.build.events.ProgressBuildEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withProgress(java.lang.Long):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withStartId(java.lang.Object):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withTotal(java.lang.Long):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:withUnit(java.lang.String):com.intellij.build.eventBuilders.ProgressBuildEventBuilder
*:com.intellij.build.eventBuilders.StartBuildEventBuilder
- a:build():com.intellij.build.events.StartBuildEvent
- a:withBuildDescriptor(com.intellij.build.BuildDescriptor):com.intellij.build.eventBuilders.StartBuildEventBuilder
- *a:withBuildViewSettings(com.intellij.build.BuildViewSettingsProvider):com.intellij.build.eventBuilders.StartBuildEventBuilder
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.StartBuildEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.StartBuildEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.StartBuildEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.StartBuildEventBuilder
*:com.intellij.build.eventBuilders.StartEventBuilder
- a:build():com.intellij.build.events.StartEvent
- a:withDescription(java.lang.String):com.intellij.build.eventBuilders.StartEventBuilder
- a:withHint(java.lang.String):com.intellij.build.eventBuilders.StartEventBuilder
- a:withId(java.lang.Object):com.intellij.build.eventBuilders.StartEventBuilder
- a:withMessage(java.lang.String):com.intellij.build.eventBuilders.StartEventBuilder
- a:withParentId(java.lang.Object):com.intellij.build.eventBuilders.StartEventBuilder
- a:withTime(java.lang.Long):com.intellij.build.eventBuilders.StartEventBuilder
*:com.intellij.build.events.BuildEventPresentationData
- a:consoleToolbarActions():com.intellij.openapi.actionSystem.ActionGroup
- a:getExecutionConsole():com.intellij.execution.ui.ExecutionConsole
- a:getNodeIcon():javax.swing.Icon
*:com.intellij.build.events.BuildEvents
- *sf:Companion:com.intellij.build.events.BuildEvents$Companion
- a:buildIssue():com.intellij.build.eventBuilders.BuildIssueEventBuilder
- a:fileDownload():com.intellij.build.eventBuilders.FileDownloadEventBuilder
- a:fileDownloaded():com.intellij.build.eventBuilders.FileDownloadedEventBuilder
- a:fileMessage():com.intellij.build.eventBuilders.FileMessageEventBuilder
- a:finish():com.intellij.build.eventBuilders.FinishEventBuilder
- a:finishBuild():com.intellij.build.eventBuilders.FinishBuildEventBuilder
- s:getInstance():com.intellij.build.events.BuildEvents
- a:message():com.intellij.build.eventBuilders.MessageEventBuilder
- a:output():com.intellij.build.eventBuilders.OutputBuildEventBuilder
- a:presentable():com.intellij.build.eventBuilders.PresentableBuildEventBuilder
- a:progress():com.intellij.build.eventBuilders.ProgressBuildEventBuilder
- a:start():com.intellij.build.eventBuilders.StartEventBuilder
- a:startBuild():com.intellij.build.eventBuilders.StartBuildEventBuilder
*f:com.intellij.build.events.BuildEvents$Companion
- f:getInstance():com.intellij.build.events.BuildEvents
*:com.intellij.build.events.BuildIssueEvent
- com.intellij.build.events.MessageEvent
- a:getDescription():java.lang.String
- a:getIssue():com.intellij.build.issue.BuildIssue
*:com.intellij.build.events.DerivedResult
- com.intellij.build.events.EventResult
- a:createDefaultResult():com.intellij.build.events.EventResult
- a:createFailureResult():com.intellij.build.events.FailureResult
*:com.intellij.build.events.DuplicateMessageAware
*:com.intellij.build.events.PresentableBuildEvent
- com.intellij.build.events.BuildEvent
- a:getPresentationData():com.intellij.build.events.BuildEventPresentationData
com.intellij.build.events.StartBuildEvent
- com.intellij.build.events.StartEvent
- *:getBuildViewSettings():com.intellij.build.BuildViewSettingsProvider
*:com.intellij.build.issue.BuildIssueChecker
- a:check(com.intellij.build.issue.BuildIssueData):com.intellij.build.issue.BuildIssue
*:com.intellij.build.issue.BuildIssueData
+9
View File
@@ -32,6 +32,14 @@ com.intellij.build.events.Failure
com.intellij.build.events.FailureResult
- com.intellij.build.events.EventResult
- a:getFailures():java.util.List
com.intellij.build.events.FileDownloadEvent
- com.intellij.build.events.ProgressBuildEvent
- a:getDownloadPath():java.lang.String
- a:isFirstInGroup():Z
com.intellij.build.events.FileDownloadedEvent
- com.intellij.build.events.BuildEvent
- a:getDownloadPath():java.lang.String
- a:getDuration():J
com.intellij.build.events.FileMessageEvent
- com.intellij.build.events.MessageEvent
- a:getFilePosition():com.intellij.build.FilePosition
@@ -52,6 +60,7 @@ com.intellij.build.events.MessageEventResult
- getDetails():java.lang.String
- a:getKind():com.intellij.build.events.MessageEvent$Kind
com.intellij.build.events.OutputBuildEvent
- com.intellij.build.events.BuildEvent
- a:getMessage():java.lang.String
- a:getOutputType():com.intellij.execution.process.ProcessOutputType
- isStdOut():Z
@@ -0,0 +1,10 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build;
import org.jetbrains.annotations.ApiStatus.Experimental;
@Experimental
public interface BuildViewSettingsProvider {
boolean isExecutionViewHidden();
}
@@ -0,0 +1,35 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.*
import com.intellij.build.events.BuildIssueEvent
import com.intellij.build.events.MessageEvent
import com.intellij.build.issue.BuildIssue
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface BuildIssueEventBuilder {
@CheckReturnValue
fun withId(id: Any?): BuildIssueEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): BuildIssueEventBuilder
@CheckReturnValue
fun withTime(time: Long?): BuildIssueEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): BuildIssueEventBuilder
@CheckReturnValue // mandatory field
fun withKind(kind: MessageEvent.Kind): BuildIssueEventBuilder
@CheckReturnValue // mandatory field
fun withIssue(issue: BuildIssue): BuildIssueEventBuilder
fun build(): BuildIssueEvent
}
@@ -0,0 +1,48 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.*
import com.intellij.build.events.FileDownloadEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface FileDownloadEventBuilder {
@CheckReturnValue // mandatory field
fun withStartId(startId: Any): FileDownloadEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): FileDownloadEventBuilder
@CheckReturnValue
fun withTime(time: Long?): FileDownloadEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): FileDownloadEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): FileDownloadEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): FileDownloadEventBuilder
@CheckReturnValue
fun withTotal(total: Long?): FileDownloadEventBuilder
@CheckReturnValue
fun withProgress(progress: Long?): FileDownloadEventBuilder
@CheckReturnValue
fun withUnit(unit: String?): FileDownloadEventBuilder
@CheckReturnValue // mandatory field
fun withFirstInGroup(isFirstInGroup: Boolean): FileDownloadEventBuilder
@CheckReturnValue // mandatory field
fun withDownloadPath(downloadPath: String): FileDownloadEventBuilder
fun build(): FileDownloadEvent
}
@@ -0,0 +1,41 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.FileDownloadedEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface FileDownloadedEventBuilder {
@CheckReturnValue // mandatory field
fun withStartId(startId: Any): FileDownloadedEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): FileDownloadedEventBuilder
@CheckReturnValue
fun withTime(time: Long?): FileDownloadedEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): FileDownloadedEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): FileDownloadedEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): FileDownloadedEventBuilder
@CheckReturnValue // mandatory field
fun withDuration(duration: Long): FileDownloadedEventBuilder
@CheckReturnValue // mandatory field
fun withDownloadPath(downloadPath: String): FileDownloadedEventBuilder
fun build(): FileDownloadedEvent
}
@@ -0,0 +1,47 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.FilePosition
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.BuildEventsNls.Title
import com.intellij.build.events.FileMessageEvent
import com.intellij.build.events.MessageEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface FileMessageEventBuilder {
@CheckReturnValue
fun withId(id: Any?): FileMessageEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): FileMessageEventBuilder
@CheckReturnValue
fun withTime(time: Long?): FileMessageEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): FileMessageEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): FileMessageEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): FileMessageEventBuilder
@CheckReturnValue // mandatory field
fun withKind(kind: MessageEvent.Kind): FileMessageEventBuilder
@CheckReturnValue
fun withGroup(group: @Title String?): FileMessageEventBuilder
@CheckReturnValue // mandatory field
fun withFilePosition(filePosition: FilePosition): FileMessageEventBuilder
fun build(): FileMessageEvent
}
@@ -0,0 +1,39 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.EventResult
import com.intellij.build.events.FinishBuildEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface FinishBuildEventBuilder {
@CheckReturnValue // mandatory field
fun withStartBuildId(startBuildId: Any): FinishBuildEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): FinishBuildEventBuilder
@CheckReturnValue
fun withTime(time: Long?): FinishBuildEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): FinishBuildEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): FinishBuildEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): FinishBuildEventBuilder
@CheckReturnValue // mandatory field
fun withResult(result: EventResult): FinishBuildEventBuilder
fun build(): FinishBuildEvent
}
@@ -0,0 +1,39 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.EventResult
import com.intellij.build.events.FinishEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface FinishEventBuilder {
@CheckReturnValue // mandatory field
fun withStartId(startId: Any): FinishEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): FinishEventBuilder
@CheckReturnValue
fun withTime(time: Long?): FinishEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): FinishEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): FinishEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): FinishEventBuilder
@CheckReturnValue // mandatory field
fun withResult(result: EventResult): FinishEventBuilder
fun build(): FinishEvent
}
@@ -0,0 +1,46 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.BuildEventsNls.Title
import com.intellij.build.events.MessageEvent
import com.intellij.pom.Navigatable
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface MessageEventBuilder {
@CheckReturnValue
fun withId(id: Any?): MessageEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): MessageEventBuilder
@CheckReturnValue
fun withTime(time: Long?): MessageEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): MessageEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): MessageEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): MessageEventBuilder
@CheckReturnValue // mandatory field
fun withKind(kind: MessageEvent.Kind): MessageEventBuilder
@CheckReturnValue
fun withGroup(group: @Title String?): MessageEventBuilder
@CheckReturnValue
fun withNavigatable(navigatable: Navigatable?): MessageEventBuilder
fun build(): MessageEvent
}
@@ -0,0 +1,37 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.*
import com.intellij.build.events.OutputBuildEvent
import com.intellij.execution.process.ProcessOutputType
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface OutputBuildEventBuilder {
@CheckReturnValue
fun withId(id: Any?): OutputBuildEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): OutputBuildEventBuilder
@CheckReturnValue
fun withTime(time: Long?): OutputBuildEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): OutputBuildEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): OutputBuildEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): OutputBuildEventBuilder
@CheckReturnValue
fun withOutputType(outputType: ProcessOutputType?): OutputBuildEventBuilder
fun build(): OutputBuildEvent
}
@@ -0,0 +1,37 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventPresentationData
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.PresentableBuildEvent
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.CheckReturnValue
@ApiStatus.Experimental
interface PresentableBuildEventBuilder {
@CheckReturnValue
fun withId(id: Any?): PresentableBuildEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): PresentableBuildEventBuilder
@CheckReturnValue
fun withTime(time: Long?): PresentableBuildEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): PresentableBuildEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): PresentableBuildEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): PresentableBuildEventBuilder
@CheckReturnValue // mandatory field
fun withPresentationData(presentationData: BuildEventPresentationData): PresentableBuildEventBuilder
fun build(): PresentableBuildEvent
}
@@ -0,0 +1,44 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.ProgressBuildEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface ProgressBuildEventBuilder {
@CheckReturnValue // mandatory field
fun withStartId(startId: Any): ProgressBuildEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): ProgressBuildEventBuilder
@CheckReturnValue
fun withTime(time: Long?): ProgressBuildEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): ProgressBuildEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): ProgressBuildEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): ProgressBuildEventBuilder
@CheckReturnValue
fun withTotal(total: Long?): ProgressBuildEventBuilder
@CheckReturnValue
fun withProgress(progress: Long?): ProgressBuildEventBuilder
@CheckReturnValue
fun withUnit(unit: String?): ProgressBuildEventBuilder
fun build(): ProgressBuildEvent
}
@@ -0,0 +1,38 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.BuildDescriptor
import com.intellij.build.BuildViewSettingsProvider
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.StartBuildEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface StartBuildEventBuilder {
@CheckReturnValue
fun withParentId(parentId: Any?): StartBuildEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): StartBuildEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): StartBuildEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): StartBuildEventBuilder
@CheckReturnValue // mandatory field
fun withBuildDescriptor(buildDescriptor: BuildDescriptor): StartBuildEventBuilder
@Experimental
@CheckReturnValue
fun withBuildViewSettings(buildViewSettings: BuildViewSettingsProvider?): StartBuildEventBuilder
fun build(): StartBuildEvent
}
@@ -0,0 +1,35 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.StartEvent
import org.jetbrains.annotations.ApiStatus.Experimental
import org.jetbrains.annotations.ApiStatus.NonExtendable
import org.jetbrains.annotations.CheckReturnValue
@Experimental
@NonExtendable
interface StartEventBuilder {
@CheckReturnValue
fun withId(id: Any): StartEventBuilder
@CheckReturnValue
fun withParentId(parentId: Any?): StartEventBuilder
@CheckReturnValue
fun withTime(time: Long?): StartEventBuilder
@CheckReturnValue // mandatory field
fun withMessage(message: @Message String): StartEventBuilder
@CheckReturnValue
fun withHint(hint: @Hint String?): StartEventBuilder
@CheckReturnValue
fun withDescription(description: @Description String?): StartEventBuilder
fun build(): StartEvent
}
@@ -15,6 +15,9 @@
*/
package com.intellij.build.events;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -23,42 +26,30 @@ import org.jetbrains.annotations.Nullable;
*/
public interface BuildEvent {
/**
* Returns an id that uniquely identifies the event.
*
* @return The event id.
* Returns an ID that uniquely identifies the event.
* The events with equal IDs replaces each other.
*/
@NotNull
Object getId();
@NotNull Object getId();
/**
* Returns the parent event id, if any.
*
* @return The parent event id.
*/
@Nullable
Object getParentId();
@Nullable Object getParentId();
/**
* Returns the time this event was triggered.
*
* @return The event time, in milliseconds since the epoch.
* Returns the time, in milliseconds since the epoch, this event was triggered.
*/
long getEventTime();
/**
* Returns textual representation of the event.
*
* @return The event text message.
*/
@NotNull
@BuildEventsNls.Message
String getMessage();
@Message
@NotNull String getMessage();
@Nullable
@BuildEventsNls.Hint
String getHint();
@Hint
@Nullable String getHint();
@Nullable
@BuildEventsNls.Description
String getDescription();
@Description
@Nullable String getDescription();
}
@@ -1,16 +1,17 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events;
import com.intellij.execution.ui.ExecutionConsole;
import com.intellij.openapi.actionSystem.ActionGroup;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@ApiStatus.Experimental
@Experimental
public interface BuildEventPresentationData {
@NotNull Icon getNodeIcon();
@Nullable ExecutionConsole getExecutionConsole();
@@ -0,0 +1,43 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events
import com.intellij.build.eventBuilders.*
import com.intellij.openapi.components.service
import com.intellij.util.application
import org.jetbrains.annotations.ApiStatus.Experimental
@Experimental
interface BuildEvents {
fun startBuild(): StartBuildEventBuilder
fun finishBuild(): FinishBuildEventBuilder
fun start(): StartEventBuilder
fun finish(): FinishEventBuilder
fun output(): OutputBuildEventBuilder
fun progress(): ProgressBuildEventBuilder
fun message(): MessageEventBuilder
fun fileMessage(): FileMessageEventBuilder
fun buildIssue(): BuildIssueEventBuilder
fun fileDownload(): FileDownloadEventBuilder
fun fileDownloaded(): FileDownloadedEventBuilder
fun presentable(): PresentableBuildEventBuilder
companion object {
@JvmStatic
fun getInstance(): BuildEvents {
return application.service()
}
}
}
@@ -2,14 +2,18 @@
package com.intellij.build.events;
import com.intellij.build.issue.BuildIssue;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@ApiStatus.Experimental
@Experimental
public interface BuildIssueEvent extends MessageEvent {
@NotNull
BuildIssue getIssue();
@Override
@Nullable String getDescription();
@NotNull BuildIssue getIssue();
}
@@ -0,0 +1,13 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@ApiStatus.NonExtendable
public interface FileDownloadEvent extends ProgressBuildEvent {
boolean isFirstInGroup();
@NotNull String getDownloadPath();
}
@@ -0,0 +1,11 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events;
import org.jetbrains.annotations.NotNull;
public interface FileDownloadedEvent extends BuildEvent {
long getDuration();
@NotNull String getDownloadPath();
}
@@ -2,13 +2,15 @@
package com.intellij.build.events;
import com.intellij.build.FilePosition;
import org.jetbrains.annotations.NotNull;
/**
* @author Vladislav.Soroka
*/
public interface FileMessageEvent extends MessageEvent {
FilePosition getFilePosition();
@NotNull FilePosition getFilePosition();
@Override
FileMessageEventResult getResult();
@NotNull FileMessageEventResult getResult();
}
@@ -15,9 +15,12 @@
*/
package com.intellij.build.events;
import org.jetbrains.annotations.NotNull;
/**
* @author Vladislav.Soroka
*/
public interface FinishEvent extends BuildEvent {
EventResult getResult();
@NotNull EventResult getResult();
}
@@ -1,6 +1,7 @@
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.build.events;
import com.intellij.build.events.BuildEventsNls.Title;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.NotNull;
@@ -14,15 +15,12 @@ public interface MessageEvent extends BuildEvent {
ERROR, WARNING, INFO, STATISTICS, SIMPLE
}
@NotNull
Kind getKind();
@NotNull Kind getKind();
@NotNull
@BuildEventsNls.Title
String getGroup();
@Title
@NotNull String getGroup();
@Nullable
Navigatable getNavigatable(@NotNull Project project);
@Nullable Navigatable getNavigatable(@NotNull Project project);
MessageEventResult getResult();
@NotNull MessageEventResult getResult();
}
@@ -1,15 +1,15 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.execution.process.ProcessOutputType;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@ApiStatus.NonExtendable
public interface OutputBuildEvent {
@NotNull
@BuildEventsNls.Message
String getMessage();
public interface OutputBuildEvent extends BuildEvent {
@Override
@Message
@NotNull String getMessage();
/**
* @return type of the output (stdout, stderr, or system)
@@ -0,0 +1,14 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.NotNull;
/**
* Implement this interface in the {@link BuildEvent} to customize its appearance on Build tool window.
*/
@Experimental
public interface PresentableBuildEvent extends BuildEvent {
@NotNull BuildEventPresentationData getPresentationData();
}
@@ -15,6 +15,8 @@
*/
package com.intellij.build.events;
import org.jetbrains.annotations.NotNull;
/**
* @author Vladislav.Soroka
*/
@@ -38,5 +40,5 @@ public interface ProgressBuildEvent extends BuildEvent {
*
* @return The measure used to express the amount of work.
*/
String getUnit();
@NotNull String getUnit();
}
@@ -16,11 +16,21 @@
package com.intellij.build.events;
import com.intellij.build.BuildDescriptor;
import com.intellij.build.BuildViewSettingsProvider;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@ApiStatus.NonExtendable
public interface StartBuildEvent extends StartEvent {
@NotNull BuildDescriptor getBuildDescriptor();
@ApiStatus.Experimental
default @Nullable BuildViewSettingsProvider getBuildViewSettings() {
return null;
}
}
@@ -19,4 +19,5 @@ package com.intellij.build.events;
* @author Vladislav.Soroka
*/
public interface StartEvent extends BuildEvent {
}
+1
View File
@@ -54,6 +54,7 @@ jvm_library(
"//jps/model-impl",
"//platform/analysis-impl",
"//platform/structure-view-impl:structureView-impl",
"@lib//:commons-lang3",
"@lib//:commons-logging",
"//platform/diff-impl",
"//platform/built-in-server-api:builtInServer",
+7 -26
View File
@@ -66,8 +66,6 @@ c:com.intellij.build.BuildView
c:com.intellij.build.BuildViewManager
- com.intellij.build.AbstractViewManager
- *s:createBuildProgress(com.intellij.openapi.project.Project):com.intellij.build.progress.BuildProgress
*:com.intellij.build.BuildViewSettingsProvider
- a:isExecutionViewHidden():Z
c:com.intellij.build.DefaultBuildDescriptor
- com.intellij.build.BuildDescriptor
- *:getActions():java.util.List
@@ -89,29 +87,6 @@ c:com.intellij.build.ExecutionNode
c:com.intellij.build.SyncViewManager
- com.intellij.build.AbstractViewManager
- *s:createBuildProgress(com.intellij.openapi.project.Project):com.intellij.build.progress.BuildProgress
*:com.intellij.build.events.BuildEventPresentationData
- a:consoleToolbarActions():com.intellij.openapi.actionSystem.ActionGroup
- a:getExecutionConsole():com.intellij.execution.ui.ExecutionConsole
- a:getNodeIcon():javax.swing.Icon
*:com.intellij.build.events.PresentableBuildEvent
- com.intellij.build.events.BuildEvent
- a:getPresentationData():com.intellij.build.events.BuildEventPresentationData
*f:com.intellij.build.events.impl.BuildIssueEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.BuildIssueEvent
- <init>(java.lang.Object,com.intellij.build.issue.BuildIssue,com.intellij.build.events.MessageEvent$Kind):V
- getDescription():java.lang.String
- getGroup():java.lang.String
- getIssue():com.intellij.build.issue.BuildIssue
- getKind():com.intellij.build.events.MessageEvent$Kind
- getNavigatable(com.intellij.openapi.project.Project):com.intellij.pom.Navigatable
- getResult():com.intellij.build.events.MessageEventResult
f:com.intellij.build.events.impl.StartBuildEventImpl
- com.intellij.build.events.impl.StartEventImpl
- com.intellij.build.events.StartBuildEvent
- *:getBuildDescriptor():com.intellij.build.DefaultBuildDescriptor
- *:getBuildViewSettingsProvider():com.intellij.build.BuildViewSettingsProvider
- *:withBuildViewSettingsProvider(com.intellij.build.BuildViewSettingsProvider):com.intellij.build.events.impl.StartBuildEventImpl
*f:com.intellij.build.issue.quickfix.OpenFileQuickFix
- com.intellij.build.issue.BuildIssueQuickFix
- *sf:Companion:com.intellij.build.issue.quickfix.OpenFileQuickFix$Companion
@@ -137,14 +112,20 @@ c:com.intellij.build.output.BuildOutputInstantReaderImpl
- a:fileMessage(java.lang.String,java.lang.String,com.intellij.build.events.MessageEvent$Kind,com.intellij.build.FilePosition):com.intellij.build.progress.BuildProgress
- a:finish():com.intellij.build.progress.BuildProgress
- a:finish(J):com.intellij.build.progress.BuildProgress
- a:finish(J,java.lang.String,com.intellij.build.events.EventResult):com.intellij.build.progress.BuildProgress
- a:finish(J,Z,java.lang.String):com.intellij.build.progress.BuildProgress
- a:finish(com.intellij.build.events.EventResult):com.intellij.build.progress.BuildProgress
- a:finish(java.lang.String,com.intellij.build.events.EventResult):com.intellij.build.progress.BuildProgress
- a:finish(Z):com.intellij.build.progress.BuildProgress
- a:getId():java.lang.Object
- a:message(java.lang.String,java.lang.String,com.intellij.build.events.MessageEvent$Kind,com.intellij.pom.Navigatable):com.intellij.build.progress.BuildProgress
- a:output(java.lang.String,Z):com.intellij.build.progress.BuildProgress
- a:output(java.lang.String,com.intellij.execution.process.ProcessOutputType):com.intellij.build.progress.BuildProgress
- output(java.lang.String,Z):com.intellij.build.progress.BuildProgress
- a:presentable(java.lang.String,com.intellij.build.events.BuildEventPresentationData):com.intellij.build.progress.BuildProgress
- a:progress(java.lang.String):com.intellij.build.progress.BuildProgress
- a:progress(java.lang.String,J,J,java.lang.String):com.intellij.build.progress.BuildProgress
- a:start(com.intellij.build.progress.BuildProgressDescriptor):com.intellij.build.progress.BuildProgress
- a:start(java.lang.String,com.intellij.build.progress.BuildProgressDescriptor):com.intellij.build.progress.BuildProgress
- a:startChildProgress(java.lang.String):com.intellij.build.progress.BuildProgress
*:com.intellij.build.progress.BuildProgressDescriptor
- a:getBuildDescriptor():com.intellij.build.BuildDescriptor
@@ -1074,18 +1074,6 @@ c:com.intellij.build.SyncViewManager
- com.intellij.build.AbstractViewManager
- <init>(com.intellij.openapi.project.Project):V
- getViewName():java.lang.String
a:com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.BuildEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String):V
- getDescription():java.lang.String
- getEventTime():J
- getHint():java.lang.String
- getId():java.lang.Object
- getMessage():java.lang.String
- getParentId():java.lang.Object
- setDescription(java.lang.String):V
- setHint(java.lang.String):V
- setParentId(java.lang.Object):V
f:com.intellij.build.events.impl.DerivedResultImpl
- com.intellij.build.events.DerivedResult
- <init>():V
@@ -1113,75 +1101,9 @@ c:com.intellij.build.events.impl.FailureResultImpl
- <init>(java.lang.Throwable):V
- <init>(java.util.List):V
- getFailures():java.util.List
c:com.intellij.build.events.impl.FileDownloadEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.ProgressBuildEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String,J,J,java.lang.String,Z,java.lang.String):V
- getDownloadPath():java.lang.String
- getProgress():J
- getTotal():J
- getUnit():java.lang.String
- isFirstInGroup():Z
c:com.intellij.build.events.impl.FileDownloadedEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String,J,java.lang.String):V
- getDownloadPath():java.lang.String
- getDuration():J
c:com.intellij.build.events.impl.FileMessageEventImpl
- com.intellij.build.events.impl.MessageEventImpl
- com.intellij.build.events.FileMessageEvent
- <init>(java.lang.Object,com.intellij.build.events.MessageEvent$Kind,java.lang.String,java.lang.String,java.lang.String,com.intellij.build.FilePosition):V
- equals(java.lang.Object):Z
- getFilePosition():com.intellij.build.FilePosition
- getHint():java.lang.String
- getNavigatable(com.intellij.openapi.project.Project):com.intellij.pom.Navigatable
- getResult():com.intellij.build.events.FileMessageEventResult
- hashCode():I
f:com.intellij.build.events.impl.FinishBuildEventImpl
- com.intellij.build.events.impl.FinishEventImpl
- com.intellij.build.events.FinishBuildEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String,com.intellij.build.events.EventResult):V
c:com.intellij.build.events.impl.FinishEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.FinishEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String,com.intellij.build.events.EventResult):V
- getResult():com.intellij.build.events.EventResult
c:com.intellij.build.events.impl.MessageEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.MessageEvent
- <init>(java.lang.Object,com.intellij.build.events.MessageEvent$Kind,java.lang.String,java.lang.String,java.lang.String):V
- equals(java.lang.Object):Z
- getGroup():java.lang.String
- getKind():com.intellij.build.events.MessageEvent$Kind
- getNavigatable(com.intellij.openapi.project.Project):com.intellij.pom.Navigatable
- getResult():com.intellij.build.events.MessageEventResult
- hashCode():I
- f:setDescription(java.lang.String):V
f:com.intellij.build.events.impl.OutputBuildEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.OutputBuildEvent
- <init>(java.lang.Object,java.lang.Object,java.lang.String,Z):V
- <init>(java.lang.Object,java.lang.String,Z):V
f:com.intellij.build.events.impl.ProgressBuildEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.ProgressBuildEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String,J,J,java.lang.String):V
- getProgress():J
- getTotal():J
- getUnit():java.lang.String
f:com.intellij.build.events.impl.SkippedResultImpl
- com.intellij.build.events.SkippedResult
- <init>():V
f:com.intellij.build.events.impl.StartBuildEventImpl
- com.intellij.build.events.impl.StartEventImpl
- com.intellij.build.events.StartBuildEvent
- <init>(com.intellij.build.BuildDescriptor,java.lang.String):V
- withExecutionFilter(com.intellij.execution.filters.Filter):com.intellij.build.events.impl.StartBuildEventImpl
- withRestartActions(com.intellij.openapi.actionSystem.AnAction[]):com.intellij.build.events.impl.StartBuildEventImpl
c:com.intellij.build.events.impl.StartEventImpl
- com.intellij.build.events.impl.AbstractBuildEvent
- com.intellij.build.events.StartEvent
- <init>(java.lang.Object,java.lang.Object,J,java.lang.String):V
f:com.intellij.build.events.impl.SuccessResultImpl
- com.intellij.build.events.SuccessResult
- <init>():V
-4
View File
@@ -61,10 +61,6 @@ com.intellij.application.options.editor.AutoImportOptionsProvider
- com.intellij.openapi.options.UnnamedConfigurable
com.intellij.application.options.editor.CodeFoldingOptionsProvider
- com.intellij.openapi.options.UnnamedConfigurable
f:com.intellij.build.events.impl.OutputBuildEventImpl
- <init>(java.lang.Object,java.lang.Object,java.lang.String,com.intellij.execution.process.ProcessOutputType):V
- <init>(java.lang.Object,java.lang.String,com.intellij.execution.process.ProcessOutputType):V
- getOutputType():com.intellij.execution.process.ProcessOutputType
com.intellij.codeInsight.actions.DirectoryFormattingOptions
- com.intellij.codeInsight.actions.ReformatFilesOptions
- a:isIncludeSubdirectories():Z
@@ -63,6 +63,7 @@
<orderEntry type="module" module-name="intellij.platform.jps.model.impl" />
<orderEntry type="module" module-name="intellij.platform.analysis.impl" exported="" />
<orderEntry type="module" module-name="intellij.platform.structureView.impl" />
<orderEntry type="library" name="commons-lang3" level="project" />
<orderEntry type="library" name="commons-logging" level="project" />
<orderEntry type="module" module-name="intellij.platform.diff.impl" />
<orderEntry type="module" module-name="intellij.platform.builtInServer" />
@@ -4,7 +4,6 @@ package com.intellij.build;
import com.intellij.build.events.BuildEvent;
import com.intellij.build.events.OutputBuildEvent;
import com.intellij.build.events.StartBuildEvent;
import com.intellij.build.events.impl.StartBuildEventImpl;
import com.intellij.build.process.BuildProcessHandler;
import com.intellij.execution.actions.StopAction;
import com.intellij.execution.actions.StopProcessAction;
@@ -160,9 +159,7 @@ public class BuildView extends CompositeView<ExecutionConsole>
return;
}
if (startBuildEvent instanceof StartBuildEventImpl) {
myViewSettingsProvider = ((StartBuildEventImpl)startBuildEvent).getBuildViewSettingsProvider();
}
myViewSettingsProvider = startBuildEvent.getBuildViewSettings();
if (myViewSettingsProvider == null) {
myViewSettingsProvider = () -> false;
}
@@ -1,6 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.progress.BuildProgress;
import com.intellij.build.progress.BuildProgressDescriptor;
import com.intellij.build.progress.BuildRootProgressImpl;
@@ -26,6 +27,9 @@ public class BuildViewManager extends AbstractViewManager {
@ApiStatus.Experimental
public static BuildProgress<BuildProgressDescriptor> createBuildProgress(@NotNull Project project) {
return new BuildRootProgressImpl(project.getService(BuildViewManager.class));
return new BuildRootProgressImpl(
BuildEvents.getInstance(),
project.getService(BuildViewManager.class)
);
}
}
@@ -1,9 +0,0 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.build;
import org.jetbrains.annotations.ApiStatus;
@ApiStatus.Experimental
public interface BuildViewSettingsProvider {
boolean isExecutionViewHidden();
}
@@ -1,6 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.progress.BuildProgress;
import com.intellij.build.progress.BuildProgressDescriptor;
import com.intellij.build.progress.BuildRootProgressImpl;
@@ -24,6 +25,9 @@ public class SyncViewManager extends AbstractViewManager {
@ApiStatus.Experimental
public static BuildProgress<BuildProgressDescriptor> createBuildProgress(@NotNull Project project) {
return new BuildRootProgressImpl(project.getService(SyncViewManager.class));
return new BuildRootProgressImpl(
BuildEvents.getInstance(),
project.getService(SyncViewManager.class)
);
}
}
@@ -0,0 +1,51 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.BuildIssueEventBuilder
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.impl.BuildIssueEventImpl
import com.intellij.build.issue.BuildIssue
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class BuildIssueEventBuilderImpl : BuildIssueEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var hint: @Hint String? = null
private var kind: MessageEvent.Kind? = null
private var issue: BuildIssue? = null
override fun withId(id: Any?): BuildIssueEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): BuildIssueEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): BuildIssueEventBuilderImpl =
apply { this.time = time }
override fun withHint(hint: @Hint String?): BuildIssueEventBuilderImpl =
apply { this.hint = hint }
override fun withKind(kind: MessageEvent.Kind): BuildIssueEventBuilderImpl =
apply { this.kind = kind }
override fun withIssue(issue: BuildIssue): BuildIssueEventBuilderImpl =
apply { this.issue = issue }
override fun build(): BuildIssueEventImpl {
return BuildIssueEventImpl(
id,
parentId,
time,
hint,
kind ?: throw IllegalStateException("The BuildIssueEvent's 'kind' property should be defined"),
issue ?: throw IllegalStateException("The BuildIssueEvent's 'issue' property should be defined")
)
}
}
@@ -0,0 +1,75 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.FileDownloadEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.FileDownloadEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class FileDownloadEventBuilderImpl : FileDownloadEventBuilder {
private var startId: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var total: Long? = null
private var progress: Long? = null
private var unit: String? = null
private var isFirstInGroup: Boolean? = null
private var downloadPath: String? = null
override fun withStartId(startId: Any): FileDownloadEventBuilderImpl =
apply { this.startId = startId }
override fun withParentId(parentId: Any?): FileDownloadEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): FileDownloadEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): FileDownloadEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): FileDownloadEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): FileDownloadEventBuilderImpl =
apply { this.description = description }
override fun withTotal(total: Long?): FileDownloadEventBuilderImpl =
apply { this.total = total }
override fun withProgress(progress: Long?): FileDownloadEventBuilderImpl =
apply { this.progress = progress }
override fun withUnit(unit: String?): FileDownloadEventBuilderImpl =
apply { this.unit = unit }
override fun withFirstInGroup(isFirstInGroup: Boolean): FileDownloadEventBuilderImpl =
apply { this.isFirstInGroup = isFirstInGroup }
override fun withDownloadPath(downloadPath: String): FileDownloadEventBuilderImpl =
apply { this.downloadPath = downloadPath }
override fun build(): FileDownloadEventImpl =
FileDownloadEventImpl(
startId ?: throw IllegalStateException("The FileDownloadEvent's 'startId' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The FileDownloadEvent's 'message' property should be defined"),
hint,
description,
total,
progress,
unit,
isFirstInGroup ?: throw IllegalStateException("The FileDownloadEvent's 'isFirstInGroup' property should be defined"),
downloadPath ?: throw IllegalStateException("The FileDownloadEvent's 'downloadPath' property should be defined")
)
}
@@ -0,0 +1,59 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.FileDownloadedEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.FileDownloadedEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class FileDownloadedEventBuilderImpl : FileDownloadedEventBuilder {
private var startId: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var duration: Long? = null
private var downloadPath: String? = null
override fun withStartId(startId: Any): FileDownloadedEventBuilderImpl =
apply { this.startId = startId }
override fun withParentId(parentId: Any?): FileDownloadedEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): FileDownloadedEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): FileDownloadedEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): FileDownloadedEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): FileDownloadedEventBuilderImpl =
apply { this.description = description }
override fun withDuration(duration: Long): FileDownloadedEventBuilderImpl =
apply { this.duration = duration }
override fun withDownloadPath(downloadPath: String): FileDownloadedEventBuilderImpl =
apply { this.downloadPath = downloadPath }
override fun build(): FileDownloadedEventImpl =
FileDownloadedEventImpl(
startId ?: throw IllegalStateException("The FileDownloadedEvent's 'startId' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The FileDownloadedEvent's 'message' property should be defined"),
hint,
description,
duration ?: throw IllegalStateException("The FileDownloadedEvent's 'duration' property should be defined"),
downloadPath ?: throw IllegalStateException("The FileDownloadedEvent's 'downloadPath' property should be defined")
)
}
@@ -0,0 +1,65 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.FilePosition
import com.intellij.build.eventBuilders.FileMessageEventBuilder
import com.intellij.build.events.BuildEventsNls.*
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.impl.FileMessageEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class FileMessageEventBuilderImpl : FileMessageEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var kind: MessageEvent.Kind? = null
private var group: @Title String? = null
private var filePosition: FilePosition? = null
override fun withId(id: Any?): FileMessageEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): FileMessageEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): FileMessageEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): FileMessageEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): FileMessageEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): FileMessageEventBuilderImpl =
apply { this.description = description }
override fun withKind(kind: MessageEvent.Kind): FileMessageEventBuilderImpl =
apply { this.kind = kind }
override fun withGroup(group: @Title String?): FileMessageEventBuilderImpl =
apply { this.group = group }
override fun withFilePosition(filePosition: FilePosition): FileMessageEventBuilderImpl =
apply { this.filePosition = filePosition }
override fun build(): FileMessageEventImpl =
FileMessageEventImpl(
id,
parentId,
time,
message ?: throw IllegalStateException("The FileMessageEvent's 'message' property should be defined"),
hint,
description,
kind ?: throw IllegalStateException("The FileMessageEvent's 'kind' property should be defined"),
group,
filePosition ?: throw IllegalStateException("The FileMessageEvent's 'filePosition' property should be defined")
)
}
@@ -0,0 +1,55 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.FinishBuildEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.EventResult
import com.intellij.build.events.impl.FinishBuildEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class FinishBuildEventBuilderImpl : FinishBuildEventBuilder {
private var startBuildId: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var result: EventResult? = null
override fun withStartBuildId(startBuildId: Any): FinishBuildEventBuilderImpl =
apply { this.startBuildId = startBuildId }
override fun withParentId(parentId: Any?): FinishBuildEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): FinishBuildEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): FinishBuildEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): FinishBuildEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): FinishBuildEventBuilderImpl =
apply { this.description = description }
override fun withResult(result: EventResult): FinishBuildEventBuilderImpl =
apply { this.result = result }
override fun build(): FinishBuildEventImpl =
FinishBuildEventImpl(
startBuildId ?: throw IllegalStateException("The FinishBuildEvent's 'startBuildId' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The FinishBuildEvent's 'message' property should be defined"),
hint,
description,
result ?: throw IllegalStateException("The FinishBuildEvent's 'result' property should be defined")
)
}
@@ -0,0 +1,55 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.FinishEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.EventResult
import com.intellij.build.events.impl.FinishEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class FinishEventBuilderImpl : FinishEventBuilder {
private var startId: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var result: EventResult? = null
override fun withStartId(startId: Any): FinishEventBuilderImpl =
apply { this.startId = startId }
override fun withParentId(parentId: Any?): FinishEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): FinishEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): FinishEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): FinishEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): FinishEventBuilderImpl =
apply { this.description = description }
override fun withResult(result: EventResult): FinishEventBuilderImpl =
apply { this.result = result }
override fun build(): FinishEventImpl =
FinishEventImpl(
startId ?: throw IllegalStateException("The FinishEvent's 'startId' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The FinishEvent's 'message' property should be defined"),
hint,
description,
result ?: throw IllegalStateException("The FinishEvent's 'result' property should be defined")
)
}
@@ -0,0 +1,67 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.MessageEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.BuildEventsNls.Title
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.impl.MessageEventImpl
import com.intellij.pom.Navigatable
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class MessageEventBuilderImpl : MessageEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var kind: MessageEvent.Kind? = null
private var group: @Title String? = null
private var navigatable: Navigatable? = null
override fun withId(id: Any?): MessageEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): MessageEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): MessageEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): MessageEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): MessageEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): MessageEventBuilderImpl =
apply { this.description = description }
override fun withKind(kind: MessageEvent.Kind): MessageEventBuilderImpl =
apply { this.kind = kind }
override fun withGroup(group: @Title String?): MessageEventBuilderImpl =
apply { this.group = group }
override fun withNavigatable(navigatable: Navigatable?): MessageEventBuilderImpl =
apply { this.navigatable = navigatable }
override fun build(): MessageEventImpl =
MessageEventImpl(
id,
parentId,
time,
message ?: throw IllegalStateException("The MessageEvent's 'message' property should be defined"),
hint,
description,
kind ?: throw IllegalStateException("The MessageEvent's 'kind' property should be defined"),
group,
navigatable
)
}
@@ -0,0 +1,55 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.OutputBuildEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.OutputBuildEventImpl
import com.intellij.execution.process.ProcessOutputType
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class OutputBuildEventBuilderImpl : OutputBuildEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var outputType: ProcessOutputType? = null
override fun withId(id: Any?): OutputBuildEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): OutputBuildEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): OutputBuildEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): OutputBuildEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): OutputBuildEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): OutputBuildEventBuilderImpl =
apply { this.description = description }
override fun withOutputType(outputType: ProcessOutputType?): OutputBuildEventBuilderImpl =
apply { this.outputType = outputType }
override fun build(): OutputBuildEventImpl =
OutputBuildEventImpl(
id,
parentId,
time,
message ?: throw IllegalStateException("The OutputBuildEvent's 'message' property should be defined"),
hint,
description,
outputType
)
}
@@ -0,0 +1,57 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.PresentableBuildEventBuilder
import com.intellij.build.events.BuildEventPresentationData
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.PresentableBuildEvent
import com.intellij.build.events.impl.PresentableBuildEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class PresentableBuildEventBuilderImpl : PresentableBuildEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var presentationData: BuildEventPresentationData? = null
override fun withId(id: Any?): PresentableBuildEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): PresentableBuildEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): PresentableBuildEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): PresentableBuildEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): PresentableBuildEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): PresentableBuildEventBuilderImpl =
apply { this.description = description }
override fun withPresentationData(presentationData: BuildEventPresentationData): PresentableBuildEventBuilderImpl =
apply { this.presentationData = presentationData }
override fun build(): PresentableBuildEvent {
return PresentableBuildEventImpl(
id,
parentId,
time,
message ?: throw IllegalStateException("The PresentableBuildEvent's 'message' property should be defined"),
hint,
description,
presentationData ?: throw IllegalStateException("The PresentableBuildEvent's 'presentationData' property should be defined")
)
}
}
@@ -0,0 +1,64 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.ProgressBuildEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.ProgressBuildEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class ProgressBuildEventBuilderImpl : ProgressBuildEventBuilder {
private var startId: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var total: Long? = null
private var progress: Long? = null
private var unit: String? = null
override fun withStartId(startId: Any): ProgressBuildEventBuilderImpl =
apply { this.startId = startId }
override fun withParentId(parentId: Any?): ProgressBuildEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): ProgressBuildEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): ProgressBuildEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): ProgressBuildEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): ProgressBuildEventBuilderImpl =
apply { this.description = description }
override fun withTotal(total: Long?): ProgressBuildEventBuilderImpl =
apply { this.total = total }
override fun withProgress(progress: Long?): ProgressBuildEventBuilderImpl =
apply { this.progress = progress }
override fun withUnit(unit: String?): ProgressBuildEventBuilderImpl =
apply { this.unit = unit }
override fun build(): ProgressBuildEventImpl =
ProgressBuildEventImpl(
startId ?: throw IllegalStateException("The ProgressBuildEvent's 'startId' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The ProgressBuildEvent's 'message' property should be defined"),
hint,
description,
total,
progress,
unit
)
}
@@ -0,0 +1,51 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.BuildDescriptor
import com.intellij.build.BuildViewSettingsProvider
import com.intellij.build.eventBuilders.StartBuildEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.StartBuildEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class StartBuildEventBuilderImpl : StartBuildEventBuilder {
private var parentId: Any? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
private var buildDescriptor: BuildDescriptor? = null
private var buildViewSettings: BuildViewSettingsProvider? = null
override fun withParentId(parentId: Any?): StartBuildEventBuilderImpl =
apply { this.parentId = parentId }
override fun withMessage(message: @Message String): StartBuildEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): StartBuildEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): StartBuildEventBuilderImpl =
apply { this.description = description }
override fun withBuildDescriptor(buildDescriptor: BuildDescriptor): StartBuildEventBuilderImpl =
apply { this.buildDescriptor = buildDescriptor }
override fun withBuildViewSettings(buildViewSettings: BuildViewSettingsProvider?): StartBuildEventBuilderImpl =
apply { this.buildViewSettings = buildViewSettings }
override fun build(): StartBuildEventImpl =
StartBuildEventImpl(
parentId,
message ?: throw IllegalStateException("The StartBuildEvent's 'message' property should be defined"),
hint,
description,
buildDescriptor ?: throw IllegalStateException("The StartBuildEvent's 'buildDescriptor' property should be defined"),
buildViewSettings
)
}
@@ -0,0 +1,48 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.eventBuilders.impl
import com.intellij.build.eventBuilders.StartEventBuilder
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.impl.StartEventImpl
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class StartEventBuilderImpl : StartEventBuilder {
private var id: Any? = null
private var parentId: Any? = null
private var time: Long? = null
private var message: @Message String? = null
private var hint: @Hint String? = null
private var description: @Description String? = null
override fun withId(id: Any): StartEventBuilderImpl =
apply { this.id = id }
override fun withParentId(parentId: Any?): StartEventBuilderImpl =
apply { this.parentId = parentId }
override fun withTime(time: Long?): StartEventBuilderImpl =
apply { this.time = time }
override fun withMessage(message: @Message String): StartEventBuilderImpl =
apply { this.message = message }
override fun withHint(hint: @Hint String?): StartEventBuilderImpl =
apply { this.hint = hint }
override fun withDescription(description: @Description String?): StartEventBuilderImpl =
apply { this.description = description }
override fun build(): StartEventImpl =
StartEventImpl(
id ?: throw IllegalStateException("The StartEvent's 'id' property should be defined"),
parentId,
time,
message ?: throw IllegalStateException("The StartEvent's 'buildDescriptor' property should be defined"),
hint,
description
)
}
@@ -1,14 +0,0 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.build.events;
import org.jetbrains.annotations.ApiStatus;
/**
* Implement this interface in the {@link BuildEvent} to customize its appearance on Build tool window.
*
* @see BuildEventPresentationData
*/
@ApiStatus.Experimental
public interface PresentableBuildEvent extends BuildEvent {
BuildEventPresentationData getPresentationData();
}
@@ -2,33 +2,62 @@
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEvent;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.util.ObjectUtils.notNull;
/**
* @author Vladislav.Soroka
*/
@Internal
public abstract class AbstractBuildEvent implements BuildEvent {
private final @NotNull Object myEventId;
private final @NotNull Object myId;
private @Nullable Object myParentId;
private final long myEventTime;
private final @NotNull @BuildEventsNls.Message String myMessage;
private @Nullable @BuildEventsNls.Hint String myHint;
private @Nullable @BuildEventsNls.Description String myDescription;
private final @NotNull Long myTime;
private final @NotNull @Message String myMessage;
private @Nullable @Hint String myHint;
private @Nullable @Description String myDescription;
public AbstractBuildEvent(@NotNull Object eventId, @Nullable Object parentId, long eventTime, @NotNull @BuildEventsNls.Message String message) {
myEventId = eventId;
@Internal
protected AbstractBuildEvent(
@Nullable Object id,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description
) {
myId = notNull(id, () -> new Object());
myParentId = parentId;
myEventTime = eventTime;
myTime = notNull(time, () -> System.currentTimeMillis());
myMessage = message;
myHint = hint;
myDescription = description;
}
/**
* @deprecated Use instead {@link AbstractBuildEvent} constructor with hint and description parameters.
*/
@Deprecated
public AbstractBuildEvent(
@NotNull Object eventId,
@Nullable Object parentId,
long time,
@NotNull @Message String message
) {
this(eventId, parentId, time, message, null, null);
}
@Override
public @NotNull Object getId() {
return myEventId;
return myId;
}
@Override
@@ -42,11 +71,11 @@ public abstract class AbstractBuildEvent implements BuildEvent {
@Override
public long getEventTime() {
return myEventTime;
return myTime;
}
@Override
public @NotNull @BuildEventsNls.Message String getMessage() {
public @NotNull @Message String getMessage() {
return myMessage;
}
@@ -55,25 +84,25 @@ public abstract class AbstractBuildEvent implements BuildEvent {
return myHint;
}
public void setHint(@Nullable @BuildEventsNls.Hint String hint) {
public void setHint(@Nullable @Hint String hint) {
myHint = hint;
}
@Override
public @Nullable @BuildEventsNls.Description String getDescription() {
public @Nullable @Description String getDescription() {
return myDescription;
}
public void setDescription(@Nullable @BuildEventsNls.Description String description) {
public void setDescription(@Nullable @Description String description) {
myDescription = description;
}
@Override
public @NonNls String toString() {
return getClass().getSimpleName() + "{" +
"myEventId=" + myEventId +
"myEventId=" + myId +
", myParentId=" + myParentId +
", myEventTime=" + myEventTime +
", myTime=" + myTime +
", myMessage='" + myMessage + '\'' +
", myHint='" + myHint + '\'' +
", myDescription='" + myDescription + '\'' +
@@ -0,0 +1,34 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl
import com.intellij.build.eventBuilders.impl.*
import com.intellij.build.events.BuildEvents
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class BuildEventsImpl : BuildEvents {
override fun startBuild(): StartBuildEventBuilderImpl = StartBuildEventBuilderImpl()
override fun finishBuild(): FinishBuildEventBuilderImpl = FinishBuildEventBuilderImpl()
override fun start(): StartEventBuilderImpl = StartEventBuilderImpl()
override fun finish(): FinishEventBuilderImpl = FinishEventBuilderImpl()
override fun output(): OutputBuildEventBuilderImpl = OutputBuildEventBuilderImpl()
override fun progress(): ProgressBuildEventBuilderImpl = ProgressBuildEventBuilderImpl()
override fun message(): MessageEventBuilderImpl = MessageEventBuilderImpl()
override fun fileMessage(): FileMessageEventBuilderImpl = FileMessageEventBuilderImpl()
override fun buildIssue(): BuildIssueEventBuilderImpl = BuildIssueEventBuilderImpl()
override fun fileDownload(): FileDownloadEventBuilderImpl = FileDownloadEventBuilderImpl()
override fun fileDownloaded(): FileDownloadedEventBuilderImpl = FileDownloadedEventBuilderImpl()
override fun presentable(): PresentableBuildEventBuilderImpl = PresentableBuildEventBuilderImpl()
}
@@ -1,35 +1,52 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildIssueEvent;
import com.intellij.build.events.MessageEventResult;
import com.intellij.build.issue.BuildIssue;
import com.intellij.lang.LangBundle;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@ApiStatus.Experimental
@Internal
public final class BuildIssueEventImpl extends AbstractBuildEvent implements BuildIssueEvent {
private final BuildIssue myIssue;
private final Kind myKind;
public BuildIssueEventImpl(@NotNull Object parentId,
@NotNull BuildIssue buildIssue,
@NotNull Kind kind) {
super(new Object(), parentId, System.currentTimeMillis(), buildIssue.getTitle());
private final @NotNull Kind myKind;
private final @NotNull BuildIssue myIssue;
@Internal
public BuildIssueEventImpl(
@Nullable Object id,
@Nullable Object parentId,
@Nullable Long time,
@Nullable @BuildEventsNls.Hint String hint,
@NotNull Kind kind,
@NotNull BuildIssue buildIssue
) {
super(id, parentId, time, buildIssue.getTitle(), hint, buildIssue.getDescription());
myIssue = buildIssue;
myKind = kind;
}
public BuildIssueEventImpl(
@NotNull Object parentId,
@NotNull BuildIssue buildIssue,
@NotNull Kind kind
) {
this(null, parentId, null, null, kind, buildIssue);
}
@Override
public @NotNull String getDescription() {
return myIssue.getDescription();
assert super.getDescription() != null;
return super.getDescription();
}
@Override
@@ -53,7 +70,7 @@ public final class BuildIssueEventImpl extends AbstractBuildEvent implements Bui
}
@Override
public MessageEventResult getResult() {
public @NotNull MessageEventResult getResult() {
return new MessageEventResult() {
@Override
public Kind getKind() {
@@ -1,36 +1,69 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.ProgressBuildEvent;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.FileDownloadEvent;
import com.intellij.openapi.util.NlsContexts.ProgressText;
import com.intellij.openapi.util.NlsContexts.ProgressTitle;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class FileDownloadEventImpl extends AbstractBuildEvent implements ProgressBuildEvent {
import static com.intellij.util.ObjectUtils.notNull;
@Internal
public class FileDownloadEventImpl extends AbstractBuildEvent implements FileDownloadEvent {
private final @NotNull Long myTotal;
private final @NotNull Long myProgress;
private final @NotNull String myUnit;
private final long myTotal;
private final long myProgress;
private final @NotNull @NlsSafe String myUnit;
private final boolean myFirstInGroup;
private final @NotNull String myDownloadPath;
public FileDownloadEventImpl(@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull String message,
long total,
long progress,
@NotNull String unit,
boolean firstInGroup,
@NotNull String downloadPath) {
super(eventId, parentId, eventTime, message);
myTotal = total;
myProgress = progress;
myUnit = unit;
@Internal
public FileDownloadEventImpl(
@NotNull Object startId,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @ProgressTitle @ProgressText @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@Nullable Long total,
@Nullable Long progress,
@Nullable String unit,
boolean firstInGroup,
@NotNull String downloadPath
) {
super(startId, parentId, time, message, hint, description);
myTotal = notNull(total, -1L);
myProgress = notNull(progress, -1L);
myUnit = notNull(unit, "");
myFirstInGroup = firstInGroup;
myDownloadPath = downloadPath;
}
/**
* @deprecated Use {@link BuildEvents#fileDownload()} instead
*/
@Deprecated
public FileDownloadEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @ProgressTitle @ProgressText @Message String message,
long total,
long progress,
@NotNull String unit,
boolean firstInGroup,
@NotNull String downloadPath
) {
this(eventId, parentId, eventTime, message, null, null, total, progress, unit, firstInGroup, downloadPath);
}
@Override
public long getTotal() {
return myTotal;
@@ -42,14 +75,16 @@ public class FileDownloadEventImpl extends AbstractBuildEvent implements Progres
}
@Override
public String getUnit() {
public @NotNull String getUnit() {
return myUnit;
}
@Override
public boolean isFirstInGroup() {
return myFirstInGroup;
}
@Override
public @NotNull String getDownloadPath() {
return myDownloadPath;
}
@@ -1,29 +1,58 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.FileDownloadedEvent;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class FileDownloadedEventImpl extends AbstractBuildEvent {
@Internal
public class FileDownloadedEventImpl extends AbstractBuildEvent implements FileDownloadedEvent {
private final long myDuration;
private final @NotNull Long myDuration;
private final @NotNull String myDownloadPath;
public FileDownloadedEventImpl(@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull String message,
long duration,
@NotNull String downloadPath) {
super(eventId, parentId, eventTime, message);
@Internal
public FileDownloadedEventImpl(
@NotNull Object startId,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull Long duration,
@NotNull String downloadPath
) {
super(startId, parentId, time, message, hint, description);
myDuration = duration;
myDownloadPath = downloadPath;
}
/**
* @deprecated Use {@link BuildEvents#fileDownloaded()} instead
*/
@Deprecated
public FileDownloadedEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @Message String message,
long duration,
@NotNull String downloadPath
) {
this(eventId, parentId, eventTime, message, null, null, duration, downloadPath);
}
@Override
public long getDuration() {
return myDuration;
}
@Override
public @NotNull String getDownloadPath() {
return myDownloadPath;
}
@@ -3,11 +3,15 @@ package com.intellij.build.events.impl;
import com.intellij.build.FileNavigatable;
import com.intellij.build.FilePosition;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.BuildEventsNls.Title;
import com.intellij.build.events.FileMessageEvent;
import com.intellij.build.events.FileMessageEventResult;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -16,22 +20,44 @@ import java.util.Objects;
/**
* @author Vladislav.Soroka
*/
@Internal
public class FileMessageEventImpl extends MessageEventImpl implements FileMessageEvent {
private final FilePosition myFilePosition;
private final @NotNull FilePosition myFilePosition;
public FileMessageEventImpl(@NotNull Object parentId,
@NotNull Kind kind,
@Nullable @BuildEventsNls.Title String group,
@NotNull @BuildEventsNls.Message String message,
@Nullable @BuildEventsNls.Description String detailedMessage,
@NotNull FilePosition filePosition) {
super(parentId, kind, group, message, detailedMessage);
@Internal
public FileMessageEventImpl(
@Nullable Object id,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull Kind kind,
@Nullable @Title String group,
@NotNull FilePosition filePosition
) {
super(id, parentId, time, message, hint, description, kind, group, null);
myFilePosition = filePosition;
}
/**
* @deprecated Use {@link com.intellij.build.events.BuildEvents} event builder instead.
*/
@Deprecated
public FileMessageEventImpl(
@NotNull Object parentId,
@NotNull Kind kind,
@Nullable @Title String group,
@NotNull @Message String message,
@Nullable @Description String detailedMessage,
@NotNull FilePosition filePosition
) {
this(null, parentId, null, message, null, detailedMessage, kind, group, filePosition);
}
@Override
public FileMessageEventResult getResult() {
public @NotNull FileMessageEventResult getResult() {
return new FileMessageEventResult() {
@Override
public FilePosition getFilePosition() {
@@ -51,7 +77,7 @@ public class FileMessageEventImpl extends MessageEventImpl implements FileMessag
}
@Override
public FilePosition getFilePosition() {
public @NotNull FilePosition getFilePosition() {
return myFilePosition;
}
@@ -1,22 +1,46 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.EventResult;
import com.intellij.build.events.FinishBuildEvent;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@Internal
public final class FinishBuildEventImpl extends FinishEventImpl implements FinishBuildEvent {
public FinishBuildEventImpl(@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @BuildEventsNls.Message String message,
@NotNull EventResult result) {
super(eventId, parentId, eventTime, message, result);
@Internal
public FinishBuildEventImpl(
@NotNull Object startBuildId,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull EventResult result
) {
super(startBuildId, parentId, time, message, hint, description, result);
}
/**
* @deprecated Use {@link BuildEvents#finishBuild()} event builder instead.
*/
@Deprecated
public FinishBuildEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @Message String message,
@NotNull EventResult result
) {
this(eventId, parentId, eventTime, message, null, null, result);
}
}
@@ -15,35 +15,67 @@
*/
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.EventResult;
import com.intellij.build.events.FinishEvent;
import com.intellij.build.events.SuccessResult;
import com.intellij.lang.LangBundle;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@Internal
public class FinishEventImpl extends AbstractBuildEvent implements FinishEvent {
private final EventResult myResult;
private final @NotNull EventResult myResult;
public FinishEventImpl(@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @BuildEventsNls.Message String message,
@NotNull EventResult result) {
super(eventId, parentId, eventTime, message);
@Internal
public FinishEventImpl(
@NotNull Object startId,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull EventResult result
) {
super(startId, parentId, time, message, hint, description);
myResult = result;
if(myResult instanceof SuccessResult && ((SuccessResult)myResult).isUpToDate()) {
setHint(LangBundle.message("build.event.message.up.to.date"));
}
}
/**
* @deprecated Use {@link BuildEvents#finish()} event builder instead.
*/
@Deprecated
public FinishEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @Message String message,
@NotNull EventResult result
) {
this(eventId, parentId, eventTime, message, null, null, result);
}
@Override
public EventResult getResult() {
public @Nullable String getHint() {
if (super.getHint() != null) {
return super.getHint();
}
if (myResult instanceof SuccessResult successResult && successResult.isUpToDate()) {
return LangBundle.message("build.event.message.up.to.date");
}
return null;
}
@Override
public @NotNull EventResult getResult() {
return myResult;
}
}
@@ -1,38 +1,68 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.BuildEventsNls.Title;
import com.intellij.build.events.MessageEvent;
import com.intellij.build.events.MessageEventResult;
import com.intellij.lang.LangBundle;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
import static com.intellij.util.ObjectUtils.notNull;
/**
* @author Vladislav.Soroka
*/
@Internal
public class MessageEventImpl extends AbstractBuildEvent implements MessageEvent {
private final @NotNull Kind myKind;
private final @NotNull @BuildEventsNls.Title String myGroup;
private final @NotNull @Title String myGroup;
private final @Nullable Navigatable myNavigatable;
public MessageEventImpl(@NotNull Object parentId,
@NotNull Kind kind,
@Nullable @BuildEventsNls.Title String group,
@NotNull @BuildEventsNls.Message String message,
@Nullable @BuildEventsNls.Description String detailedMessage) {
super(new Object(), parentId, System.currentTimeMillis(), message);
@Internal
public MessageEventImpl(
@Nullable Object id,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull Kind kind,
@Nullable @Title String group,
@Nullable Navigatable navigatable
) {
super(id, parentId, time, message, hint, description);
myKind = kind;
myGroup = group == null ? LangBundle.message("build.event.title.other.messages") : group;
setDescription(detailedMessage);
myGroup = notNull(group, () -> LangBundle.message("build.event.title.other.messages"));
myNavigatable = navigatable;
}
/**
* @deprecated Use {@link BuildEvents#message()} event builder instead.
*/
@Deprecated
public MessageEventImpl(
@NotNull Object parentId,
@NotNull Kind kind,
@Nullable @Title String group,
@NotNull @Message String message,
@Nullable @Description String detailedMessage
) {
this(null, parentId, null, message, null, detailedMessage, kind, group, null);
}
@Override
public final void setDescription(@Nullable @BuildEventsNls.Description String description) {
public final void setDescription(@Nullable @Description String description) {
super.setDescription(description);
}
@@ -48,11 +78,11 @@ public class MessageEventImpl extends AbstractBuildEvent implements MessageEvent
@Override
public @Nullable Navigatable getNavigatable(@NotNull Project project) {
return null;
return myNavigatable;
}
@Override
public MessageEventResult getResult() {
public @NotNull MessageEventResult getResult() {
return new MessageEventResult() {
@Override
public Kind getKind() {
@@ -1,37 +1,83 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.OutputBuildEvent;
import com.intellij.execution.process.ProcessOutputType;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.util.ObjectUtils.notNull;
@Internal
public final class OutputBuildEventImpl extends AbstractBuildEvent implements OutputBuildEvent {
private final @NotNull ProcessOutputType myOutputType;
public OutputBuildEventImpl(@Nullable Object parentId, @NotNull @BuildEventsNls.Message String message, @NotNull ProcessOutputType outputType) {
this(new Object(), parentId, message, outputType);
}
public OutputBuildEventImpl(@NotNull Object eventId, @Nullable Object parentId, @NotNull @BuildEventsNls.Message String message, @NotNull ProcessOutputType outputType) {
super(eventId, parentId, -1, message);
myOutputType = outputType;
@Internal
public OutputBuildEventImpl(
@Nullable Object id,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@Nullable ProcessOutputType outputType
) {
super(id, parentId, time, message, hint, description);
myOutputType = notNull(outputType, () -> ProcessOutputType.STDOUT);
}
/**
* @deprecated Use {@link #OutputBuildEventImpl(Object, String, ProcessOutputType)} instead
* @deprecated Use the {@link BuildEvents#output} event builder function instead.
*/
@Deprecated
public OutputBuildEventImpl(@Nullable Object parentId, @NotNull @BuildEventsNls.Message String message, boolean stdOut) {
public OutputBuildEventImpl(
@Nullable Object parentId,
@NotNull @Message String message,
@NotNull ProcessOutputType outputType
) {
this(null, parentId, null, message, null, null, outputType);
}
/**
* @deprecated Use the {@link BuildEvents#output} event builder function instead.
*/
@Deprecated
public OutputBuildEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
@NotNull @Message String message,
@NotNull ProcessOutputType outputType
) {
this(eventId, parentId, null, message, null, null, outputType);
}
/**
* @deprecated Use the {@link BuildEvents#output} event builder function instead.
*/
@Deprecated
public OutputBuildEventImpl(
@Nullable Object parentId,
@NotNull @Message String message,
boolean stdOut
) {
this(parentId, message, stdOut ? ProcessOutputType.STDOUT : ProcessOutputType.STDERR);
}
/**
* @deprecated Use {@link #OutputBuildEventImpl(Object, Object, String, ProcessOutputType)} instead
* @deprecated Use the {@link BuildEvents#output} event builder function instead.
*/
@Deprecated
public OutputBuildEventImpl(@NotNull Object eventId, @Nullable Object parentId, @NotNull @BuildEventsNls.Message String message, boolean stdOut) {
public OutputBuildEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
@NotNull @Message String message,
boolean stdOut
) {
this(eventId, parentId, message, stdOut ? ProcessOutputType.STDOUT : ProcessOutputType.STDERR);
}
@@ -0,0 +1,26 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl
import com.intellij.build.events.BuildEventPresentationData
import com.intellij.build.events.BuildEventsNls.Description
import com.intellij.build.events.BuildEventsNls.Hint
import com.intellij.build.events.BuildEventsNls.Message
import com.intellij.build.events.PresentableBuildEvent
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
internal class PresentableBuildEventImpl(
id: Any?,
parentId: Any?,
time: Long?,
message: @Message String,
hint: @Hint String?,
description: @Description String?,
private val presentableData: BuildEventPresentationData,
) : AbstractBuildEvent(id, parentId, time, message, hint, description),
PresentableBuildEvent {
override fun getPresentationData(): BuildEventPresentationData {
return presentableData
}
}
@@ -1,32 +1,61 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.ProgressBuildEvent;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.NlsContexts.ProgressText;
import com.intellij.openapi.util.NlsContexts.ProgressTitle;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.util.ObjectUtils.notNull;
/**
* @author Vladislav.Soroka
*/
@Internal
public final class ProgressBuildEventImpl extends AbstractBuildEvent implements ProgressBuildEvent {
private final long myTotal;
private final long myProgress;
private final String myUnit;
private final @NotNull Long myTotal;
private final @NotNull Long myProgress;
private final @NotNull String myUnit;
public ProgressBuildEventImpl(@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NlsContexts.ProgressTitle
@NotNull @NlsContexts.ProgressText String message,
long total,
long progress,
@NotNull String unit) {
super(eventId, parentId, eventTime, message);
myTotal = total;
myProgress = progress;
myUnit = unit;
@Internal
public ProgressBuildEventImpl(
@NotNull Object startId,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @ProgressTitle @ProgressText @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@Nullable Long total,
@Nullable Long progress,
@Nullable String unit
) {
super(startId, parentId, time, message, hint, description);
myTotal = notNull(total, -1L);
myProgress = notNull(progress, -1L);
myUnit = notNull(unit, "");
}
/**
* @deprecated Use {@link BuildEvents#progress()} event builder instead.
*/
@Deprecated
public ProgressBuildEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @ProgressTitle @ProgressText @Message String message,
long total,
long progress,
@NotNull String unit
) {
this(eventId, parentId, eventTime, message, null, null, total, progress, unit);
}
@Override
@@ -40,7 +69,7 @@ public final class ProgressBuildEventImpl extends AbstractBuildEvent implements
}
@Override
public String getUnit() {
public @NotNull String getUnit() {
return myUnit;
}
}
@@ -4,11 +4,15 @@ package com.intellij.build.events.impl;
import com.intellij.build.BuildDescriptor;
import com.intellij.build.BuildViewSettingsProvider;
import com.intellij.build.DefaultBuildDescriptor;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.StartBuildEvent;
import com.intellij.execution.filters.Filter;
import com.intellij.openapi.actionSystem.AnAction;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -17,23 +21,48 @@ import java.util.Arrays;
/**
* @author Vladislav.Soroka
*/
@Internal
public final class StartBuildEventImpl extends StartEventImpl implements StartBuildEvent {
private final @NotNull DefaultBuildDescriptor myBuildDescriptor;
private @Nullable BuildViewSettingsProvider myBuildViewSettingsProvider;
private @Nullable BuildViewSettingsProvider myBuildViewSettings;
public StartBuildEventImpl(@NotNull BuildDescriptor descriptor, @NotNull @BuildEventsNls.Message String message) {
super(descriptor.getId(), null, descriptor.getStartTime(), message);
myBuildDescriptor =
descriptor instanceof DefaultBuildDescriptor ? (DefaultBuildDescriptor)descriptor : new DefaultBuildDescriptor(descriptor);
@Internal
public StartBuildEventImpl(
@Nullable Object parentId,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description,
@NotNull BuildDescriptor buildDescriptor,
@Nullable BuildViewSettingsProvider buildViewSettings
) {
super(buildDescriptor.getId(), parentId, buildDescriptor.getStartTime(), message, hint, description);
myBuildDescriptor = buildDescriptor instanceof DefaultBuildDescriptor defaultBuildDescriptor
? defaultBuildDescriptor : new DefaultBuildDescriptor(buildDescriptor);
myBuildViewSettings = buildViewSettings;
}
/**
* @deprecated Use {@link BuildEvents#startBuild()} event builder instead.
*/
@Deprecated
public StartBuildEventImpl(
@NotNull BuildDescriptor descriptor,
@NotNull @Message String message
) {
this(null, message, null, null, descriptor, null);
}
@ApiStatus.Experimental
@Override
public @NotNull DefaultBuildDescriptor getBuildDescriptor() {
return myBuildDescriptor;
}
@Override
public @Nullable BuildViewSettingsProvider getBuildViewSettings() {
return myBuildViewSettings;
}
/**
* @deprecated use {@link DefaultBuildDescriptor#withProcessHandler}
*/
@@ -52,14 +81,22 @@ public final class StartBuildEventImpl extends StartEventImpl implements StartBu
return this;
}
@ApiStatus.Experimental
/**
* @deprecated Use {@link #getBuildViewSettings()} instead.
*/
@Deprecated
@Experimental
public @Nullable BuildViewSettingsProvider getBuildViewSettingsProvider() {
return myBuildViewSettingsProvider;
return myBuildViewSettings;
}
@ApiStatus.Experimental
/**
* @deprecated Use {@link BuildEvents#startBuild} event builder instead.
*/
@Deprecated
@Experimental
public StartBuildEventImpl withBuildViewSettingsProvider(@Nullable BuildViewSettingsProvider viewSettingsProvider) {
myBuildViewSettingsProvider = viewSettingsProvider;
myBuildViewSettings = viewSettingsProvider;
return this;
}
}
@@ -15,17 +15,43 @@
*/
package com.intellij.build.events.impl;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEvents;
import com.intellij.build.events.BuildEventsNls.Description;
import com.intellij.build.events.BuildEventsNls.Hint;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.StartEvent;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Vladislav.Soroka
*/
@Internal
public class StartEventImpl extends AbstractBuildEvent implements StartEvent {
public StartEventImpl(@NotNull Object eventId, @Nullable Object parentId, long eventTime, @NotNull @BuildEventsNls.Message String message) {
super(eventId, parentId, eventTime, message);
@Internal
public StartEventImpl(
@NotNull Object id,
@Nullable Object parentId,
@Nullable Long time,
@NotNull @Message String message,
@Nullable @Hint String hint,
@Nullable @Description String description
) {
super(id, parentId, time, message, hint, description);
}
/**
* @deprecated Use {@link BuildEvents#start()} event builder instead.
*/
@Deprecated
public StartEventImpl(
@NotNull Object eventId,
@Nullable Object parentId,
long eventTime,
@NotNull @Message String message
) {
this(eventId, parentId, eventTime, message, null, null);
}
}
@@ -0,0 +1,221 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.progress;
import com.intellij.build.BuildProgressListener;
import com.intellij.build.FilePosition;
import com.intellij.build.events.*;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.impl.FailureResultImpl;
import com.intellij.build.events.impl.SkippedResultImpl;
import com.intellij.build.events.impl.SuccessResultImpl;
import com.intellij.build.issue.BuildIssue;
import com.intellij.execution.process.ProcessOutputType;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@Internal
public abstract class AbstractBuildProgress implements BuildProgress<BuildProgressDescriptor> {
protected final @NotNull BuildEvents myBuildEvents;
private final @NotNull BuildProgressListener myListener;
AbstractBuildProgress(
@NotNull BuildEvents buildEvents,
@NotNull BuildProgressListener listener
) {
myBuildEvents = buildEvents;
myListener = listener;
}
protected abstract @NotNull BuildProgressDescriptor getDescriptor();
protected final @NotNull Object getBuildId() {
return getDescriptor().getBuildDescriptor().getId();
}
protected abstract @NotNull Object getStartId();
protected abstract @Nullable Object getParentId();
protected abstract @NotNull @Message String getStartMessage();
protected abstract @NotNull @Message String getFinishMessage();
protected abstract @NotNull @Message String getFailMessage();
protected abstract @NotNull @Message String getCancelMessage();
@Override
public final @NotNull Object getId() {
return getStartId();
}
protected @NotNull BuildProgress<BuildProgressDescriptor> event(@NotNull BuildEvent event) {
myListener.onEvent(getBuildId(), event);
return this;
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> start(@NotNull BuildProgressDescriptor descriptor) {
return start(getStartMessage(), descriptor);
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(@NotNull EventResult result) {
return finish(getFinishMessage(), result);
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(@NotNull String message, @NotNull EventResult result) {
return finish(System.currentTimeMillis(), message, result);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> finish() {
return finish(false);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> finish(boolean isUpToDate) {
return finish(System.currentTimeMillis(), isUpToDate, getFinishMessage());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp) {
return finish(timeStamp, false, getFinishMessage());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, boolean isUpToDate, @NotNull String message) {
return finish(timeStamp, message, new SuccessResultImpl(isUpToDate));
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> fail() {
return fail(System.currentTimeMillis(), getFailMessage());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> fail(long timeStamp, @NotNull String message) {
return finish(timeStamp, message, new FailureResultImpl());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> cancel() {
return cancel(System.currentTimeMillis(), getCancelMessage());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> cancel(long timeStamp, @NotNull String message) {
return finish(timeStamp, message, new SkippedResultImpl());
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> startChildProgress(@NotNull String title) {
var childBuildProgressDescriptor = new BuildProgressDescriptorImpl(title, getDescriptor().getBuildDescriptor());
var childBuildProgress = new ChildBuildProgressImpl(myBuildEvents, myListener, childBuildProgressDescriptor, this);
return childBuildProgress.start(childBuildProgressDescriptor);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> progress(@NotNull String title) {
return event(
myBuildEvents.progress()
.withStartId(getStartId())
.withParentId(getParentId())
.withMessage(title)
.build()
);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> progress(@NotNull String title, long total, long progress, String unit) {
return event(
myBuildEvents.progress()
.withStartId(getStartId())
.withParentId(getParentId())
.withMessage(title)
.withTotal(total)
.withProgress(progress)
.withUnit(unit)
.build()
);
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> presentable(
@NotNull String title,
@NotNull BuildEventPresentationData presentationData
) {
return event(
myBuildEvents.presentable()
.withParentId(getStartId())
.withMessage(title)
.withPresentationData(presentationData)
.build()
);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> output(@NotNull String text, @NotNull ProcessOutputType processOutputType) {
return event(
myBuildEvents.output()
.withParentId(getStartId())
.withMessage(text)
.withOutputType(processOutputType)
.build()
);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> message(
@NotNull String title,
@NotNull String message,
@NotNull MessageEvent.Kind kind,
@Nullable Navigatable navigatable
) {
return event(
myBuildEvents.message()
.withParentId(getStartId())
.withMessage(title)
.withDescription(message)
.withKind(kind)
.withNavigatable(navigatable)
.build()
);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> fileMessage(
@NotNull String title,
@NotNull String message,
@NotNull MessageEvent.Kind kind,
@NotNull FilePosition filePosition
) {
return event(
myBuildEvents.fileMessage()
.withParentId(getStartId())
.withMessage(title)
.withDescription(message)
.withKind(kind)
.withFilePosition(filePosition)
.build()
);
}
@Override
public final @NotNull BuildProgress<BuildProgressDescriptor> buildIssue(
@NotNull BuildIssue issue,
@NotNull MessageEvent.Kind kind
) {
return event(
myBuildEvents.buildIssue()
.withParentId(getStartId())
.withIssue(issue)
.withKind(kind)
.build()
);
}
}
@@ -2,36 +2,35 @@
package com.intellij.build.progress;
import com.intellij.build.FilePosition;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.BuildEventPresentationData;
import com.intellij.build.events.BuildEventsNls.Message;
import com.intellij.build.events.BuildEventsNls.Title;
import com.intellij.build.events.EventResult;
import com.intellij.build.events.MessageEvent;
import com.intellij.build.issue.BuildIssue;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.execution.process.ProcessOutputType;
import com.intellij.openapi.util.NlsContexts.ProgressTitle;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.ApiStatus.Experimental;
import org.jetbrains.annotations.ApiStatus.NonExtendable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ApiStatus.Experimental
@Experimental
@NonExtendable
public interface BuildProgress<T extends BuildProgressDescriptor> {
@NotNull Object getId();
@NotNull BuildProgress<T> start(@NotNull T descriptor);
@NotNull BuildProgress<T> progress(@NlsContexts.ProgressTitle @NotNull String title);
@NotNull BuildProgress<BuildProgressDescriptor> start(@NotNull @Message String message, @NotNull T descriptor);
@NotNull BuildProgress<T> progress(@NlsContexts.ProgressTitle @NotNull String title, long total, long progress, String unit);
@NotNull BuildProgress<BuildProgressDescriptor> finish(@NotNull EventResult result);
@NotNull BuildProgress<T> output(@BuildEventsNls.Message @NotNull String text, boolean stdOut);
@NotNull BuildProgress<BuildProgressDescriptor> finish(@NotNull @Message String message, @NotNull EventResult result);
@NotNull BuildProgress<T> message(@BuildEventsNls.Title @NotNull String title,
@BuildEventsNls.Message @NotNull String message,
@NotNull MessageEvent.Kind kind,
@Nullable Navigatable navigatable);
@NotNull BuildProgress<T> fileMessage(@BuildEventsNls.Title @NotNull String title,
@BuildEventsNls.Message @NotNull String message,
@NotNull MessageEvent.Kind kind,
@NotNull FilePosition filePosition);
@NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, @NotNull @Message String title, @NotNull EventResult result);
@NotNull BuildProgress<BuildProgressDescriptor> finish();
@@ -39,17 +38,50 @@ public interface BuildProgress<T extends BuildProgressDescriptor> {
@NotNull BuildProgress<BuildProgressDescriptor> finish(boolean isUpToDate);
@NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, boolean isUpToDate, @BuildEventsNls.Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, boolean isUpToDate, @Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> fail();
@NotNull BuildProgress<BuildProgressDescriptor> fail(long timeStamp, @BuildEventsNls.Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> fail(long timeStamp, @Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> cancel();
@NotNull BuildProgress<BuildProgressDescriptor> cancel(long timeStamp, @BuildEventsNls.Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> cancel(long timeStamp, @Message @NotNull String message);
@NotNull BuildProgress<BuildProgressDescriptor> startChildProgress(@BuildEventsNls.Title @NotNull String title);
@NotNull BuildProgress<BuildProgressDescriptor> startChildProgress(@Title @NotNull String title);
@NotNull BuildProgress<BuildProgressDescriptor> buildIssue(@NotNull BuildIssue issue, @NotNull MessageEvent.Kind kind);
@NotNull BuildProgress<T> progress(@ProgressTitle @NotNull String title);
@NotNull BuildProgress<T> progress(@ProgressTitle @NotNull String title, long total, long progress, String unit);
@NotNull BuildProgress<T> presentable(@Message @NotNull String title, @NotNull BuildEventPresentationData presentationData);
@NotNull BuildProgress<T> output(@Message @NotNull String text, @NotNull ProcessOutputType processOutputType);
/**
* @deprecated Use {@link output} event with {@link ProcessOutputType} instead.
*/
@Deprecated
default @NotNull BuildProgress<T> output(@Message @NotNull String text, boolean stdOut) {
return output(text, stdOut ? ProcessOutputType.STDOUT : ProcessOutputType.STDERR);
}
@NotNull BuildProgress<T> message(
@Title @NotNull String title,
@Message @NotNull String message,
@NotNull MessageEvent.Kind kind,
@Nullable Navigatable navigatable
);
@NotNull BuildProgress<T> fileMessage(
@Title @NotNull String title,
@Message @NotNull String message,
@NotNull MessageEvent.Kind kind,
@NotNull FilePosition filePosition
);
@NotNull BuildProgress<BuildProgressDescriptor> buildIssue(
@NotNull BuildIssue issue,
@NotNull MessageEvent.Kind kind
);
}
@@ -0,0 +1,20 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.progress
import com.intellij.build.BuildDescriptor
import com.intellij.build.events.BuildEventsNls.Title
import org.jetbrains.annotations.ApiStatus.Internal
@Internal
class BuildProgressDescriptorImpl(
private val title: @Title String,
private val buildDescriptor: BuildDescriptor,
) : BuildProgressDescriptor {
constructor(buildDescriptor: BuildDescriptor) :
this(buildDescriptor.title, buildDescriptor)
override fun getTitle(): @Title String = title
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
}
@@ -1,186 +0,0 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.progress;
import com.intellij.build.BuildDescriptor;
import com.intellij.build.BuildProgressListener;
import com.intellij.build.FilePosition;
import com.intellij.build.events.EventResult;
import com.intellij.build.events.FinishEvent;
import com.intellij.build.events.MessageEvent;
import com.intellij.build.events.StartEvent;
import com.intellij.build.events.impl.*;
import com.intellij.build.issue.BuildIssue;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.pom.Navigatable;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ApiStatus.Internal
public class BuildProgressImpl implements BuildProgress<BuildProgressDescriptor> {
private final Object myId = new Object();
private final BuildProgressListener myListener;
private final @Nullable BuildProgress<BuildProgressDescriptor> myParentProgress;
private BuildProgressDescriptor myDescriptor;
BuildProgressImpl(BuildProgressListener listener, @Nullable BuildProgress<BuildProgressDescriptor> parentProgress) {
myListener = listener;
myParentProgress = parentProgress;
}
protected Object getBuildId() {
return myDescriptor.getBuildDescriptor().getId();
}
@Override
public @NotNull Object getId() {
return myId;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> start(@NotNull BuildProgressDescriptor descriptor) {
myDescriptor = descriptor;
StartEvent event = createStartEvent(descriptor);
myListener.onEvent(getBuildId(), event);
return this;
}
protected @NotNull StartEvent createStartEvent(BuildProgressDescriptor descriptor) {
assert myParentProgress != null;
return new StartEventImpl(getId(), myParentProgress.getId(), System.currentTimeMillis(), descriptor.getTitle());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> startChildProgress(@NotNull String title) {
BuildDescriptor buildDescriptor = myDescriptor.getBuildDescriptor();
return new BuildProgressImpl(myListener, this).start(new BuildProgressDescriptor() {
@Override
public @NotNull String getTitle() {
return title;
}
@Override
public @NotNull BuildDescriptor getBuildDescriptor() {
return buildDescriptor;
}
});
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> progress(@NotNull String title) {
return progress(title, -1, -1 , "");
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> progress(@NotNull String title, long total, long progress, String unit) {
Object parentId = myParentProgress != null ? myParentProgress.getId() : null;
myListener.onEvent(getBuildId(), new ProgressBuildEventImpl(getId(), parentId, System.currentTimeMillis(), title, total, progress, unit));
return this;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> output(@NotNull String text, boolean stdOut) {
myListener.onEvent(getBuildId(), new OutputBuildEventImpl(getId(), text, stdOut));
return this;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> fileMessage(@NotNull String title,
@NotNull String message,
@NotNull MessageEvent.Kind kind,
@NotNull FilePosition filePosition) {
StringBuilder fileLink = new StringBuilder(filePosition.getFile().getPath());
if (filePosition.getStartLine() > 0) {
fileLink.append(":").append(filePosition.getStartLine() + 1);
if (filePosition.getStartColumn() > 0) {
fileLink.append(":").append(filePosition.getStartColumn() + 1);
}
}
@NlsSafe String detailedMessage = fileLink.toString() + '\n' + message;
FileMessageEventImpl event = new FileMessageEventImpl(getId(), kind, null, title, detailedMessage, filePosition);
myListener.onEvent(getBuildId(), event);
return this;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> message(@NotNull String title,
@NotNull String message,
@NotNull MessageEvent.Kind kind,
@Nullable Navigatable navigatable) {
MessageEventImpl event = new MessageEventImpl(getId(), kind, null, title, message) {
@Override
public @Nullable Navigatable getNavigatable(@NotNull Project project) {
return navigatable;
}
};
myListener.onEvent(getBuildId(), event);
return this;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish() {
return finish(false);
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(boolean isUpToDate) {
return finish(System.currentTimeMillis(), isUpToDate, myDescriptor.getTitle());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp) {
return finish(timeStamp, false, myDescriptor.getTitle());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, boolean isUpToDate, @NotNull String message) {
assertStarted();
assert myParentProgress != null;
EventResult result = new SuccessResultImpl(isUpToDate);
FinishEvent event = new FinishEventImpl(getId(), myParentProgress.getId(), timeStamp, message, result);
myListener.onEvent(getBuildId(), event);
return myParentProgress;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> fail() {
return fail(System.currentTimeMillis(), myDescriptor.getTitle());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> fail(long timeStamp, @NotNull String message) {
assertStarted();
assert myParentProgress != null;
FinishEvent event = new FinishEventImpl(getId(), myParentProgress.getId(), timeStamp, message, new FailureResultImpl());
myListener.onEvent(getBuildId(), event);
return myParentProgress;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> cancel() {
return cancel(System.currentTimeMillis(), myDescriptor.getTitle());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> cancel(long timeStamp, @NotNull String message) {
assertStarted();
assert myParentProgress != null;
FinishEventImpl event = new FinishEventImpl(getId(), myParentProgress.getId(), timeStamp, message, new SkippedResultImpl());
myListener.onEvent(getBuildId(), event);
return myParentProgress;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> buildIssue(@NotNull BuildIssue issue, @NotNull MessageEvent.Kind kind) {
myListener.onEvent(getBuildId(), new BuildIssueEventImpl(getId(), issue, kind));
return this;
}
protected void assertStarted() {
if (myDescriptor == null) {
throw new IllegalStateException("The start event was not triggered yet.");
}
}
}
@@ -3,69 +3,78 @@ package com.intellij.build.progress;
import com.intellij.build.BuildBundle;
import com.intellij.build.BuildProgressListener;
import com.intellij.build.events.BuildEventsNls;
import com.intellij.build.events.FinishBuildEvent;
import com.intellij.build.events.FinishEvent;
import com.intellij.build.events.StartEvent;
import com.intellij.build.events.*;
import com.intellij.build.events.impl.*;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ApiStatus.Internal
public final class BuildRootProgressImpl extends BuildProgressImpl {
private final BuildProgressListener myListener;
public final class BuildRootProgressImpl extends AbstractBuildProgress {
public BuildRootProgressImpl(BuildProgressListener buildProgressListener) {
super(buildProgressListener, null);
myListener = buildProgressListener;
private @Nullable BuildProgressDescriptor myDescriptor;
public BuildRootProgressImpl(
@NotNull BuildEvents buildEvents,
@NotNull BuildProgressListener buildProgressListener
) {
super(buildEvents, buildProgressListener);
}
@Override
public @NotNull Object getId() {
protected @NotNull BuildProgressDescriptor getDescriptor() {
assert myDescriptor != null : "The task was not started yet.";
return myDescriptor;
}
@Override
public @NotNull Object getStartId() {
return getBuildId();
}
@Override
protected @NotNull StartEvent createStartEvent(BuildProgressDescriptor descriptor) {
return new StartBuildEventImpl(descriptor.getBuildDescriptor(), BuildBundle.message("build.status.running"));
protected @Nullable Object getParentId() {
return null;
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish() {
return finish(System.currentTimeMillis(), false, BuildBundle.message("build.status.finished"));
protected @NotNull String getStartMessage() {
return BuildBundle.message("build.status.running");
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, boolean isUpToDate, @NotNull @BuildEventsNls.Message String message) {
assertStarted();
FinishEvent event = new FinishBuildEventImpl(getId(), null, timeStamp, message, new SuccessResultImpl(isUpToDate));
myListener.onEvent(getBuildId(), event);
return this;
protected @NotNull String getFinishMessage() {
return BuildBundle.message("build.status.finished");
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> fail() {
return fail(System.currentTimeMillis(), BuildBundle.message("build.status.failed"));
protected @NotNull String getFailMessage() {
return BuildBundle.message("build.status.failed");
}
@Override
public @NotNull BuildRootProgressImpl fail(long timeStamp, @NotNull @BuildEventsNls.Message String message) {
assertStarted();
FinishBuildEvent event = new FinishBuildEventImpl(getId(), null, timeStamp, message, new FailureResultImpl());
myListener.onEvent(getBuildId(), event);
return this;
protected @NotNull String getCancelMessage() {
return BuildBundle.message("build.status.cancelled");
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> cancel() {
return cancel(System.currentTimeMillis(), BuildBundle.message("build.status.cancelled"));
public @NotNull BuildProgress<BuildProgressDescriptor> start(@NotNull String message, @NotNull BuildProgressDescriptor descriptor) {
myDescriptor = descriptor;
return event(myBuildEvents.startBuild()
.withParentId(getParentId())
.withMessage(message)
.withBuildDescriptor(descriptor.getBuildDescriptor())
.build());
}
@Override
public @NotNull BuildRootProgressImpl cancel(long timeStamp, @NotNull String message) {
assertStarted();
FinishBuildEventImpl event = new FinishBuildEventImpl(getId(), null, timeStamp, message, new SkippedResultImpl());
myListener.onEvent(getBuildId(), event);
return this;
public @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, @NotNull String message, @NotNull EventResult result) {
return event(myBuildEvents.finishBuild()
.withStartBuildId(getBuildId())
.withParentId(getParentId())
.withTime(timeStamp)
.withMessage(message)
.withResult(result)
.build());
}
}
@@ -0,0 +1,83 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.build.progress;
import com.intellij.build.BuildProgressListener;
import com.intellij.build.events.*;
import org.jetbrains.annotations.ApiStatus.Internal;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@Internal
public class ChildBuildProgressImpl extends AbstractBuildProgress {
private final @NotNull Object myId = new Object();
private final @NotNull BuildProgressDescriptor myDescriptor;
private final @NotNull BuildProgress<BuildProgressDescriptor> myParentProgress;
ChildBuildProgressImpl(
@NotNull BuildEvents buildEvents,
@NotNull BuildProgressListener listener,
@NotNull BuildProgressDescriptor descriptor,
@NotNull BuildProgress<BuildProgressDescriptor> parentProgress
) {
super(buildEvents, listener);
myDescriptor = descriptor;
myParentProgress = parentProgress;
}
@Override
protected @NotNull BuildProgressDescriptor getDescriptor() {
return myDescriptor;
}
@Override
public @NotNull Object getStartId() {
return myId;
}
@Override
protected @Nullable Object getParentId() {
return myParentProgress.getId();
}
@Override
protected @NotNull String getStartMessage() {
return myDescriptor.getTitle();
}
@Override
protected @NotNull String getFinishMessage() {
return myDescriptor.getTitle();
}
@Override
protected @NotNull String getFailMessage() {
return myDescriptor.getTitle();
}
@Override
protected @NotNull String getCancelMessage() {
return myDescriptor.getTitle();
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> start(@NotNull String message, @NotNull BuildProgressDescriptor descriptor) {
return event(myBuildEvents.start()
.withId(getStartId())
.withParentId(getParentId())
.withMessage(message)
.build());
}
@Override
public @NotNull BuildProgress<BuildProgressDescriptor> finish(long timeStamp, @NotNull String message, @NotNull EventResult result) {
event(myBuildEvents.finish()
.withStartId(getStartId())
.withParentId(getParentId())
.withTime(timeStamp)
.withMessage(message)
.withResult(result)
.build());
return myParentProgress;
}
}
@@ -2,7 +2,12 @@
package com.intellij.build
import com.intellij.build.events.MessageEvent
import com.intellij.build.events.impl.*
import com.intellij.build.events.impl.BuildEventsImpl
import com.intellij.build.events.impl.DerivedResultImpl
import com.intellij.build.events.impl.FailureResultImpl
import com.intellij.build.events.impl.SuccessResultImpl
import com.intellij.build.progress.BuildProgressDescriptorImpl
import com.intellij.build.progress.BuildRootProgressImpl
import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.util.Disposer
import com.intellij.platform.testFramework.assertion.BuildViewAssertions.showAllNodes
@@ -33,19 +38,16 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
override fun setUp() {
super.setUp()
buildDescriptor = DefaultBuildDescriptor(Object(),
"test descriptor",
"fake path",
1L)
buildDescriptor = DefaultBuildDescriptor(Any(), "test descriptor", "fake path", 1L)
treeConsoleView = BuildTreeConsoleView(project, buildDescriptor, null)
}
@Test
fun `test tree console handles event`() {
val tree = treeConsoleView.tree
val buildId = Object()
val message = "build Started"
treeConsoleView.onEvent(buildId, StartBuildEventImpl(buildDescriptor, message))
BuildRootProgressImpl(BuildEventsImpl(), treeConsoleView)
.start(message, BuildProgressDescriptorImpl(buildDescriptor))
waitUntilAssertSucceedsBlocking {
PlatformTestUtil.dispatchAllEventsInIdeEventQueue()
@@ -64,17 +66,15 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
fun `test build level of tree console view are auto-expanded`() {
val tree = treeConsoleView.tree
showAllNodes(treeConsoleView)
val buildId = Object()
listOf(
StartBuildEventImpl(buildDescriptor, "build started"),
StartEventImpl("event_id", buildDescriptor.id, 1000, "build event"),
StartEventImpl("sub_event_id", "event_id", 1100, "build nested event"),
FinishEventImpl("sub_event_id", "event_id", 1200, "build nested event", SuccessResultImpl(true)),
FinishEventImpl("event_id", buildDescriptor.id, 1500, "build event", SuccessResultImpl(true)),
FinishBuildEventImpl(buildDescriptor.id, null, 2000, "build finished", SuccessResultImpl(true))
).forEach {
treeConsoleView.onEvent(buildId, it)
}
// @formatter:off
BuildRootProgressImpl(BuildEventsImpl(), treeConsoleView)
.start("build started", BuildProgressDescriptorImpl(buildDescriptor))
.startChildProgress("build event")
.startChildProgress("build nested event")
.finish(SuccessResultImpl(true))
.finish(SuccessResultImpl(true))
.finish("build finished", SuccessResultImpl(true))
// @formatter:on
waitUntilAssertSucceedsBlocking {
PlatformTestUtil.dispatchAllEventsInIdeEventQueue()
@@ -94,29 +94,22 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
fun `test first message node is auto-expanded`() {
val tree = treeConsoleView.tree
showAllNodes(treeConsoleView)
val buildId = Object()
listOf(
StartBuildEventImpl(buildDescriptor, "build started"),
StartEventImpl("event_id_1", buildDescriptor.id, 1000, "build event 1"),
FileMessageEventImpl("event_id_1", MessageEvent.Kind.WARNING, null, "file message", null, FilePosition(File("a.file"), 0, 0)),
FinishEventImpl("event_id_1", buildDescriptor.id, 1500, "build event 1", SuccessResultImpl(true)),
StartEventImpl("event_id_2", buildDescriptor.id, 1000, "build event 2"),
FileMessageEventImpl("event_id_2", MessageEvent.Kind.WARNING, null, "file message 1", null, FilePosition(File("a1.file"), 0, 0)),
FileMessageEventImpl("event_id_2", MessageEvent.Kind.WARNING, null, "file message 2", null, FilePosition(File("a2.file"), 0, 0)),
FinishEventImpl("event_id_2", buildDescriptor.id, 1500, "build event 2", SuccessResultImpl(true)),
StartEventImpl("event_id_3", buildDescriptor.id, 1000, "build event 3"),
FileMessageEventImpl("event_id_3", MessageEvent.Kind.WARNING, null, "file message 3", null, FilePosition(File("a3.file"), 0, 0)),
FileMessageEventImpl("event_id_3", MessageEvent.Kind.ERROR, null, "file message with error", null,
FilePosition(File("a4.file"), 5, 0)),
FinishEventImpl("event_id_3", buildDescriptor.id, 1500, "build event 3", FailureResultImpl()),
FinishBuildEventImpl(buildDescriptor.id, null, 2000, "build failed", FailureResultImpl())
).forEach {
treeConsoleView.onEvent(buildId, it)
}
// @formatter:off
BuildRootProgressImpl(BuildEventsImpl(), treeConsoleView)
.start("build started", BuildProgressDescriptorImpl(buildDescriptor))
.startChildProgress("build event 1")
.fileMessage("file message", "file detailed message", MessageEvent.Kind.WARNING, FilePosition(File("a.file"), 0, 0))
.finish(true)
.startChildProgress("build event 2")
.fileMessage("file message 1", "file detailed message 1", MessageEvent.Kind.WARNING, FilePosition(File("a1.file"), 0, 0))
.fileMessage("file message 2", "file detailed message 2", MessageEvent.Kind.WARNING, FilePosition(File("a2.file"), 0, 0))
.finish(true)
.startChildProgress("build event 3")
.fileMessage("file message 3", "file detailed message 3", MessageEvent.Kind.WARNING, FilePosition(File("a3.file"), 0, 0))
.fileMessage("file message with error", "file detailed message with error", MessageEvent.Kind.ERROR, FilePosition(File("a4.file"), 5, 0))
.finish(FailureResultImpl())
.finish("build failed", FailureResultImpl())
// @formatter:on
waitUntilAssertSucceedsBlocking {
PlatformTestUtil.dispatchAllEventsInIdeEventQueue()
@@ -145,18 +138,16 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
@Test
fun `test derived result depend on child result - fail case`() {
showAllNodes(treeConsoleView)
val buildId = Object()
listOf(
StartBuildEventImpl(buildDescriptor, "build started"),
StartEventImpl("event_id", buildDescriptor.id, 1000, "build event"),
StartEventImpl("sub_event_id", "event_id", 1100, "build nested event"),
MessageEventImpl("event_id", MessageEvent.Kind.ERROR, "Error", "error message", "error message"),
FinishEventImpl("sub_event_id", "event_id", 1200, "build nested event", FailureResultImpl()),
FinishEventImpl("event_id", buildDescriptor.id, 1500, "build event", DerivedResultImpl()),
FinishBuildEventImpl(buildDescriptor.id, null, 2000, "build finished", DerivedResultImpl())
).forEach {
treeConsoleView.onEvent(buildId, it)
}
// @formatter:off
BuildRootProgressImpl(BuildEventsImpl(), treeConsoleView)
.start("build started", BuildProgressDescriptorImpl(buildDescriptor))
.startChildProgress("build event")
.startChildProgress( "build nested event")
.message("error message", "detailed error message", MessageEvent.Kind.ERROR, null)
.finish(FailureResultImpl())
.finish(DerivedResultImpl())
.finish("build finished", DerivedResultImpl())
// @formatter:on
val tree = treeConsoleView.tree
@@ -165,8 +156,8 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
PlatformTestUtil.assertTreeEqual(tree, "-\n" +
" -build finished\n" +
" -build event\n" +
" build nested event\n" +
" error message")
" -build nested event\n" +
" error message")
}
val visitor = CollectingTreeVisitor(tree)
@@ -181,17 +172,15 @@ class BuildTreeConsoleViewTest : LightPlatformTestCase() {
@Test
fun `test derived result depend on child result - success case`() {
showAllNodes(treeConsoleView)
val buildId = Object()
listOf(
StartBuildEventImpl(buildDescriptor, "build started"),
StartEventImpl("event_id", buildDescriptor.id, 1000, "build event"),
StartEventImpl("sub_event_id", "event_id", 1100, "build nested event"),
FinishEventImpl("sub_event_id", "event_id", 1200, "build nested event", SuccessResultImpl()),
FinishEventImpl("event_id", buildDescriptor.id, 1500, "build event", DerivedResultImpl()),
FinishBuildEventImpl(buildDescriptor.id, null, 2000, "build finished", DerivedResultImpl())
).forEach {
treeConsoleView.onEvent(buildId, it)
}
// @formatter:off
BuildRootProgressImpl(BuildEventsImpl(), treeConsoleView)
.start("build started", BuildProgressDescriptorImpl(buildDescriptor))
.startChildProgress("build event")
.startChildProgress("build nested event")
.finish(SuccessResultImpl())
.finish(DerivedResultImpl())
.finish("build finished", DerivedResultImpl())
// @formatter:on
val tree = treeConsoleView.tree
@@ -3,10 +3,10 @@ package com.intellij.build
import com.intellij.build.events.BuildEventPresentationData
import com.intellij.build.events.MessageEvent.Kind.*
import com.intellij.build.events.PresentableBuildEvent
import com.intellij.build.events.impl.*
import com.intellij.build.progress.BuildProgressDescriptor
import com.intellij.build.events.impl.SuccessResultImpl
import com.intellij.build.progress.BuildProgressDescriptorImpl
import com.intellij.execution.Platform
import com.intellij.execution.process.ProcessOutputType
import com.intellij.execution.ui.ExecutionConsole
import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionGroup
@@ -45,19 +45,14 @@ class BuildViewTest : LightPlatformTestCase() {
@Test
fun `test successful build`() {
val title = "A build"
val buildDescriptor = DefaultBuildDescriptor(Object(), title, "", System.currentTimeMillis())
val progressDescriptor = object : BuildProgressDescriptor {
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
override fun getTitle(): String = title
}
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", "", System.currentTimeMillis())
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start(progressDescriptor)
.start(BuildProgressDescriptorImpl(buildDescriptor))
.message("Root message", "Tex of the root message console", INFO, null)
.progress("Running…")
.progress("Running…")
.startChildProgress("Inner progress")
.fileMessage("File message1", "message1 descriptive text", INFO, FilePosition(File("aFile.java"), 0, 0))
.fileMessage("File message2", "message2 descriptive text", INFO, FilePosition(File("aFile.java"), 0, 0))
@@ -81,35 +76,26 @@ class BuildViewTest : LightPlatformTestCase() {
buildViewTestFixture.assertBuildViewNode("Root message", "Tex of the root message console\n")
buildViewTestFixture.assertBuildViewNode(
"File message1",
"aFile.java\n" +
"message1 descriptive text"
)
}
@Test
fun `test file messages presentation`() {
val title = "A build"
val tempDirectory = FileUtil.getTempDirectory() + "/project"
val buildDescriptor = DefaultBuildDescriptor(Object(), title, tempDirectory, System.currentTimeMillis())
val progressDescriptor = object : BuildProgressDescriptor {
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
override fun getTitle(): String = title
}
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", tempDirectory, System.currentTimeMillis())
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start(progressDescriptor)
.fileMessage("message 1", "message 1 descriptive text", INFO, FilePosition(File("aFile1.java"), 0, 0))
.fileMessage("message 1.1", "message 1.1 descriptive text", WARNING, FilePosition(File("aFile1.java"), 0, 0))
.fileMessage("message 2", "message 2 descriptive text", WARNING, FilePosition(File(tempDirectory, "project/aFile2.java"), 0, 0))
.fileMessage("message 2.1", "message 2.1 descriptive text", WARNING, FilePosition(File(tempDirectory), -1, -1))
.fileMessage("message 3", "message 3 descriptive text", WARNING, FilePosition(File(tempDirectory, "anotherDir1/aFile3.java"), 0, 0))
.fileMessage("message 3.1", "message 3.1 descriptive text", ERROR, FilePosition(File(tempDirectory, "anotherDir2/aFile3.java"), 0, 0))
.fileMessage("message 4", "message 4 descriptive text", INFO, FilePosition(File(SystemProperties.getUserHome(), "foo/aFile4.java"), 0, 0))
.start(BuildProgressDescriptorImpl(buildDescriptor))
.fileMessage("message 1", "message 1 descriptive text", INFO, FilePosition(File("aFile1.java"), 0, 0))
.fileMessage("message 1.1", "message 1.1 descriptive text", WARNING, FilePosition(File("aFile1.java"), 0, 0))
.fileMessage("message 2", "message 2 descriptive text", WARNING, FilePosition(File(tempDirectory, "project/aFile2.java"), 0, 0))
.fileMessage("message 2.1", "message 2.1 descriptive text", WARNING, FilePosition(File(tempDirectory), -1, -1))
.fileMessage("message 3", "message 3 descriptive text", WARNING, FilePosition(File(tempDirectory, "anotherDir1/aFile3.java"), 0, 0))
.fileMessage("message 3.1", "message 3.1 descriptive text", ERROR, FilePosition(File(tempDirectory, "anotherDir2/aFile3.java"), 0, 0))
.fileMessage("message 4", "message 4 descriptive text", INFO, FilePosition(File(SystemProperties.getUserHome(), "foo/aFile4.java"), 0, 0))
.finish()
// @formatter:on
@@ -159,19 +145,14 @@ class BuildViewTest : LightPlatformTestCase() {
@Test
fun `test build with errors`() {
val title = "A build"
val buildDescriptor = DefaultBuildDescriptor(Object(), title, "", System.currentTimeMillis())
val progressDescriptor = object : BuildProgressDescriptor {
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
override fun getTitle(): String = title
}
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", "", System.currentTimeMillis())
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start(progressDescriptor)
.start(BuildProgressDescriptorImpl(buildDescriptor))
.message("Root message", "Tex of the root message console", INFO, null)
.progress("Running…")
.progress("Running…")
.startChildProgress("Inner progress")
.fileMessage("File message1", "message1 descriptive text", ERROR, FilePosition(File("aFile.java"), 0, 0))
.fileMessage("File message2", "message2 descriptive text", ERROR, FilePosition(File("aFile.java"), 0, 0))
@@ -193,7 +174,6 @@ class BuildViewTest : LightPlatformTestCase() {
buildViewTestFixture.assertBuildViewSelectedNode(
"File message1",
"aFile.java\n" +
"message1 descriptive text"
)
buildViewTestFixture.assertBuildViewNode("failed", "")
@@ -202,19 +182,14 @@ class BuildViewTest : LightPlatformTestCase() {
@Test
fun `test cancelled build`() {
val title = "A build"
val buildDescriptor = DefaultBuildDescriptor(Object(), title, "", System.currentTimeMillis())
val progressDescriptor = object : BuildProgressDescriptor {
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
override fun getTitle(): String = title
}
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", "", System.currentTimeMillis())
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start(progressDescriptor)
.start(BuildProgressDescriptorImpl(buildDescriptor))
.message("Root message", "Tex of the root message console", INFO, null)
.progress("Running…")
.progress("Running…")
.startChildProgress("Inner progress")
.cancel()
.cancel()
@@ -236,12 +211,7 @@ class BuildViewTest : LightPlatformTestCase() {
@Test
fun `test build view listeners`() {
val title = "A build"
val buildDescriptor = DefaultBuildDescriptor(Object(), title, "", System.currentTimeMillis())
val progressDescriptor = object : BuildProgressDescriptor {
override fun getBuildDescriptor(): BuildDescriptor = buildDescriptor
override fun getTitle(): String = title
}
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", "", System.currentTimeMillis())
val buildMessages = mutableListOf<String>()
//BuildViewManager
@@ -253,16 +223,16 @@ class BuildViewTest : LightPlatformTestCase() {
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start(progressDescriptor)
.output("Build greeting\n", true)
.start(BuildProgressDescriptorImpl(buildDescriptor))
.output("Build greeting\n", ProcessOutputType.STDOUT)
.message("Root message", "Text of the root message console", INFO, null)
.progress("Running…")
.progress("Running…")
.startChildProgress("Inner progress")
.output("inner progress output", true)
.output("inner progress output", ProcessOutputType.STDOUT)
.fileMessage("File message1", "message1 descriptive text", INFO, FilePosition(File("aFile.java"), 0, 0))
.fileMessage("File message2", "message2 descriptive text", INFO, FilePosition(File("aFile.java"), 0, 0))
.finish()
.output("Build farewell", true)
.output("Build farewell", ProcessOutputType.STDOUT)
.finish()
// @formatter:on
@@ -282,8 +252,7 @@ class BuildViewTest : LightPlatformTestCase() {
"Build farewell")
buildViewTestFixture.assertBuildViewNode("Inner progress", "inner progress output")
buildViewTestFixture.assertBuildViewNode("Root message", "Text of the root message console\n")
buildViewTestFixture.assertBuildViewNode("File message1", "aFile.java\n" +
"message1 descriptive text")
buildViewTestFixture.assertBuildViewNode("File message1", "message1 descriptive text")
assertEquals("running…" +
"Build greeting\n" +
@@ -300,46 +269,38 @@ class BuildViewTest : LightPlatformTestCase() {
@Test
fun `test presentable build event`() {
val title = "A build"
val buildId = Object()
val buildDescriptor = DefaultBuildDescriptor(buildId, title, "", System.currentTimeMillis())
val buildViewManager = project.service<BuildViewManager>()
buildViewManager.onEvent(buildId, StartBuildEventImpl(buildDescriptor, "started"))
val buildDescriptor = DefaultBuildDescriptor(Object(), "A build", "", System.currentTimeMillis())
val component = JButton("test button")
class MyPresentableBuildEvent(eventId: Any, parentId: Any?, eventTime: Long, message: String) :
AbstractBuildEvent(eventId, parentId, eventTime, message), PresentableBuildEvent {
override fun getPresentationData(): BuildEventPresentationData {
return object : BuildEventPresentationData {
override fun getNodeIcon(): Icon = AllIcons.General.Add
override fun getExecutionConsole(): ExecutionConsole {
return object : ExecutionConsole {
override fun getComponent(): JComponent = component
override fun getPreferredFocusableComponent(): JComponent = component
override fun dispose() {}
}
}
override fun consoleToolbarActions(): ActionGroup? = null
val presentationData = object : BuildEventPresentationData {
override fun getNodeIcon(): Icon = AllIcons.General.Add
override fun consoleToolbarActions(): ActionGroup? = null
override fun getExecutionConsole(): ExecutionConsole {
return object : ExecutionConsole {
override fun getComponent(): JComponent = component
override fun getPreferredFocusableComponent(): JComponent = component
override fun dispose() {}
}
}
}
buildViewManager.onEvent(buildId, MyPresentableBuildEvent("1", buildId, System.currentTimeMillis(), "my event"))
buildViewManager.onEvent(buildId,
ProgressBuildEventImpl("1", buildId, System.currentTimeMillis(), "my event node text updated", -1, -1, ""))
buildViewManager.onEvent(buildId, FinishBuildEventImpl(buildId, null, System.currentTimeMillis(), "finished", SuccessResultImpl()))
// @formatter:off
BuildViewManager
.createBuildProgress(project)
.start("started", BuildProgressDescriptorImpl(buildDescriptor))
.presentable("my event", presentationData)
.finish("finished", SuccessResultImpl())
// @formatter:on
buildViewTestFixture.assertBuildViewTreeEquals(
"""
-
-finished
my event node text updated
my event
""".trimIndent()
)
buildViewTestFixture.assertBuildViewNodeConsole("my event node text updated") { executionConsole ->
buildViewTestFixture.assertBuildViewNodeConsole("my event") { executionConsole ->
assertThat(executionConsole.component)
.isEqualTo(component)
.matches { (it as JButton).text == "test button" }
@@ -1403,6 +1403,8 @@
testServiceImplementation="com.intellij.build.internal.DummySyncViewManager"/>
<projectService serviceInterface="com.intellij.build.BuildWorkspaceConfiguration"
serviceImplementation="com.intellij.build.BuildWorkspaceConfigurationImpl"/>
<applicationService serviceInterface="com.intellij.build.events.BuildEvents"
serviceImplementation="com.intellij.build.events.impl.BuildEventsImpl"/>
<moveLeftRightHandler language=""
implementationClass="com.intellij.codeInsight.editorActions.moveLeftRight.DefaultMoveElementLeftRightHandler"