From 670c9b1cd8a9956824baa5c702bd4ae821949322 Mon Sep 17 00:00:00 2001 From: Sergei Vorobyov Date: Wed, 27 Aug 2025 15:02:12 +0200 Subject: [PATCH] [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 --- .../ExternalSystemEventDispatcherTest.kt | 49 ++-- platform/lang-api/api-dump-experimental.txt | 146 ++++++++++++ platform/lang-api/api-dump.txt | 9 + .../build/BuildViewSettingsProvider.java | 10 + .../eventBuilders/BuildIssueEventBuilder.kt | 35 +++ .../eventBuilders/FileDownloadEventBuilder.kt | 48 ++++ .../FileDownloadedEventBuilder.kt | 41 ++++ .../eventBuilders/FileMessageEventBuilder.kt | 47 ++++ .../eventBuilders/FinishBuildEventBuilder.kt | 39 ++++ .../build/eventBuilders/FinishEventBuilder.kt | 39 ++++ .../eventBuilders/MessageEventBuilder.kt | 46 ++++ .../eventBuilders/OutputBuildEventBuilder.kt | 37 +++ .../PresentableBuildEventBuilder.kt | 37 +++ .../ProgressBuildEventBuilder.kt | 44 ++++ .../eventBuilders/StartBuildEventBuilder.kt | 38 +++ .../build/eventBuilders/StartEventBuilder.kt | 35 +++ .../com/intellij/build/events/BuildEvent.java | 37 ++- .../events/BuildEventPresentationData.java | 7 +- .../com/intellij/build/events/BuildEvents.kt | 43 ++++ .../build/events/BuildIssueEvent.java | 12 +- .../build/events/FileDownloadEvent.java | 13 ++ .../build/events/FileDownloadedEvent.java | 11 + .../build/events/FileMessageEvent.java | 6 +- .../intellij/build/events/FinishEvent.java | 5 +- .../intellij/build/events/MessageEvent.java | 14 +- .../build/events/OutputBuildEvent.java | 12 +- .../build/events/PresentableBuildEvent.java | 14 ++ .../build/events/ProgressBuildEvent.java | 4 +- .../build/events/StartBuildEvent.java | 10 + .../com/intellij/build/events/StartEvent.java | 1 + platform/lang-impl/BUILD.bazel | 1 + platform/lang-impl/api-dump-experimental.txt | 33 +-- platform/lang-impl/api-dump-unreviewed.txt | 78 ------- platform/lang-impl/api-dump.txt | 4 - .../lang-impl/intellij.platform.lang.impl.iml | 1 + .../src/com/intellij/build/BuildView.java | 5 +- .../com/intellij/build/BuildViewManager.java | 6 +- .../build/BuildViewSettingsProvider.java | 9 - .../com/intellij/build/SyncViewManager.java | 6 +- .../impl/BuildIssueEventBuilderImpl.kt | 51 ++++ .../impl/FileDownloadEventBuilderImpl.kt | 75 ++++++ .../impl/FileDownloadedEventBuilderImpl.kt | 59 +++++ .../impl/FileMessageEventBuilderImpl.kt | 65 ++++++ .../impl/FinishBuildEventBuilderImpl.kt | 55 +++++ .../impl/FinishEventBuilderImpl.kt | 55 +++++ .../impl/MessageEventBuilderImpl.kt | 67 ++++++ .../impl/OutputBuildEventBuilderImpl.kt | 55 +++++ .../impl/PresentableBuildEventBuilderImpl.kt | 57 +++++ .../impl/ProgressBuildEventBuilderImpl.kt | 64 +++++ .../impl/StartBuildEventBuilderImpl.kt | 51 ++++ .../impl/StartEventBuilderImpl.kt | 48 ++++ .../build/events/PresentableBuildEvent.java | 14 -- .../build/events/impl/AbstractBuildEvent.java | 63 +++-- .../build/events/impl/BuildEventsImpl.kt | 34 +++ .../events/impl/BuildIssueEventImpl.java | 37 ++- .../events/impl/FileDownloadEventImpl.java | 75 ++++-- .../events/impl/FileDownloadedEventImpl.java | 47 +++- .../events/impl/FileMessageEventImpl.java | 48 +++- .../events/impl/FinishBuildEventImpl.java | 38 ++- .../build/events/impl/FinishEventImpl.java | 56 ++++- .../build/events/impl/MessageEventImpl.java | 56 +++-- .../events/impl/OutputBuildEventImpl.java | 70 +++++- .../events/impl/PresentableBuildEventImpl.kt | 26 +++ .../events/impl/ProgressBuildEventImpl.java | 63 +++-- .../events/impl/StartBuildEventImpl.java | 61 ++++- .../build/events/impl/StartEventImpl.java | 32 ++- .../build/progress/AbstractBuildProgress.java | 221 ++++++++++++++++++ .../build/progress/BuildProgress.java | 74 ++++-- .../progress/BuildProgressDescriptorImpl.kt | 20 ++ .../build/progress/BuildProgressImpl.java | 186 --------------- .../build/progress/BuildRootProgressImpl.java | 75 +++--- .../progress/ChildBuildProgressImpl.java | 83 +++++++ .../build/BuildTreeConsoleViewTest.kt | 121 +++++----- .../com/intellij/build/BuildViewTest.kt | 131 ++++------- .../src/META-INF/LangExtensions.xml | 2 + 75 files changed, 2632 insertions(+), 735 deletions(-) create mode 100644 platform/lang-api/src/com/intellij/build/BuildViewSettingsProvider.java create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/BuildIssueEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadedEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/FileMessageEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/FinishBuildEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/FinishEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/MessageEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/OutputBuildEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/PresentableBuildEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/ProgressBuildEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/StartBuildEventBuilder.kt create mode 100644 platform/lang-api/src/com/intellij/build/eventBuilders/StartEventBuilder.kt rename platform/{lang-impl => lang-api}/src/com/intellij/build/events/BuildEventPresentationData.java (67%) create mode 100644 platform/lang-api/src/com/intellij/build/events/BuildEvents.kt create mode 100644 platform/lang-api/src/com/intellij/build/events/FileDownloadEvent.java create mode 100644 platform/lang-api/src/com/intellij/build/events/FileDownloadedEvent.java create mode 100644 platform/lang-api/src/com/intellij/build/events/PresentableBuildEvent.java delete mode 100644 platform/lang-impl/src/com/intellij/build/BuildViewSettingsProvider.java create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/BuildIssueEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadedEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileMessageEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishBuildEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/MessageEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/OutputBuildEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/PresentableBuildEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/ProgressBuildEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartBuildEventBuilderImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartEventBuilderImpl.kt delete mode 100644 platform/lang-impl/src/com/intellij/build/events/PresentableBuildEvent.java create mode 100644 platform/lang-impl/src/com/intellij/build/events/impl/BuildEventsImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/events/impl/PresentableBuildEventImpl.kt create mode 100644 platform/lang-impl/src/com/intellij/build/progress/AbstractBuildProgress.java create mode 100644 platform/lang-impl/src/com/intellij/build/progress/BuildProgressDescriptorImpl.kt delete mode 100644 platform/lang-impl/src/com/intellij/build/progress/BuildProgressImpl.java create mode 100644 platform/lang-impl/src/com/intellij/build/progress/ChildBuildProgressImpl.java diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemEventDispatcherTest.kt b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemEventDispatcherTest.kt index 605e86d49eb3..f0776ae15f39 100644 --- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemEventDispatcherTest.kt +++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/service/execution/ExternalSystemEventDispatcherTest.kt @@ -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() 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" } diff --git a/platform/lang-api/api-dump-experimental.txt b/platform/lang-api/api-dump-experimental.txt index cb040614efd8..852caf930ce4 100644 --- a/platform/lang-api/api-dump-experimental.txt +++ b/platform/lang-api/api-dump-experimental.txt @@ -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 diff --git a/platform/lang-api/api-dump.txt b/platform/lang-api/api-dump.txt index 0058538a3259..3a817efc4b2e 100644 --- a/platform/lang-api/api-dump.txt +++ b/platform/lang-api/api-dump.txt @@ -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 diff --git a/platform/lang-api/src/com/intellij/build/BuildViewSettingsProvider.java b/platform/lang-api/src/com/intellij/build/BuildViewSettingsProvider.java new file mode 100644 index 000000000000..0a8aadbef336 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/BuildViewSettingsProvider.java @@ -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(); +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/BuildIssueEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/BuildIssueEventBuilder.kt new file mode 100644 index 000000000000..25be86e4f0e1 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/BuildIssueEventBuilder.kt @@ -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 +} \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadEventBuilder.kt new file mode 100644 index 000000000000..3b7500ef3858 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadedEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadedEventBuilder.kt new file mode 100644 index 000000000000..5b069ba4bf1d --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/FileDownloadedEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/FileMessageEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/FileMessageEventBuilder.kt new file mode 100644 index 000000000000..3f7e5918263e --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/FileMessageEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/FinishBuildEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/FinishBuildEventBuilder.kt new file mode 100644 index 000000000000..cc6980375b4b --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/FinishBuildEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/FinishEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/FinishEventBuilder.kt new file mode 100644 index 000000000000..83f26c649e7c --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/FinishEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/MessageEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/MessageEventBuilder.kt new file mode 100644 index 000000000000..0ae47babf468 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/MessageEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/OutputBuildEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/OutputBuildEventBuilder.kt new file mode 100644 index 000000000000..e246407931ad --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/OutputBuildEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/PresentableBuildEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/PresentableBuildEventBuilder.kt new file mode 100644 index 000000000000..285fbeb47615 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/PresentableBuildEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/ProgressBuildEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/ProgressBuildEventBuilder.kt new file mode 100644 index 000000000000..01ab8e94b40b --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/ProgressBuildEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/StartBuildEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/StartBuildEventBuilder.kt new file mode 100644 index 000000000000..85aab2201cfe --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/StartBuildEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/eventBuilders/StartEventBuilder.kt b/platform/lang-api/src/com/intellij/build/eventBuilders/StartEventBuilder.kt new file mode 100644 index 000000000000..c6916689e8bd --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/eventBuilders/StartEventBuilder.kt @@ -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 +} diff --git a/platform/lang-api/src/com/intellij/build/events/BuildEvent.java b/platform/lang-api/src/com/intellij/build/events/BuildEvent.java index 05f1012e6946..f5216996e8d5 100644 --- a/platform/lang-api/src/com/intellij/build/events/BuildEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/BuildEvent.java @@ -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(); } diff --git a/platform/lang-impl/src/com/intellij/build/events/BuildEventPresentationData.java b/platform/lang-api/src/com/intellij/build/events/BuildEventPresentationData.java similarity index 67% rename from platform/lang-impl/src/com/intellij/build/events/BuildEventPresentationData.java rename to platform/lang-api/src/com/intellij/build/events/BuildEventPresentationData.java index c8daef744c58..604f8329a193 100644 --- a/platform/lang-impl/src/com/intellij/build/events/BuildEventPresentationData.java +++ b/platform/lang-api/src/com/intellij/build/events/BuildEventPresentationData.java @@ -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(); diff --git a/platform/lang-api/src/com/intellij/build/events/BuildEvents.kt b/platform/lang-api/src/com/intellij/build/events/BuildEvents.kt new file mode 100644 index 000000000000..7532fdef39c0 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/events/BuildEvents.kt @@ -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() + } + } +} \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/build/events/BuildIssueEvent.java b/platform/lang-api/src/com/intellij/build/events/BuildIssueEvent.java index 2611108775ab..bc6053c2f563 100644 --- a/platform/lang-api/src/com/intellij/build/events/BuildIssueEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/BuildIssueEvent.java @@ -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(); } diff --git a/platform/lang-api/src/com/intellij/build/events/FileDownloadEvent.java b/platform/lang-api/src/com/intellij/build/events/FileDownloadEvent.java new file mode 100644 index 000000000000..f458e84d0713 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/events/FileDownloadEvent.java @@ -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(); +} diff --git a/platform/lang-api/src/com/intellij/build/events/FileDownloadedEvent.java b/platform/lang-api/src/com/intellij/build/events/FileDownloadedEvent.java new file mode 100644 index 000000000000..4bab50e3eea0 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/events/FileDownloadedEvent.java @@ -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(); +} diff --git a/platform/lang-api/src/com/intellij/build/events/FileMessageEvent.java b/platform/lang-api/src/com/intellij/build/events/FileMessageEvent.java index 9c0750bb80e5..9868818b72e0 100644 --- a/platform/lang-api/src/com/intellij/build/events/FileMessageEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/FileMessageEvent.java @@ -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(); } diff --git a/platform/lang-api/src/com/intellij/build/events/FinishEvent.java b/platform/lang-api/src/com/intellij/build/events/FinishEvent.java index eb5cdd18bfad..c2dbf02f9baf 100644 --- a/platform/lang-api/src/com/intellij/build/events/FinishEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/FinishEvent.java @@ -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(); } diff --git a/platform/lang-api/src/com/intellij/build/events/MessageEvent.java b/platform/lang-api/src/com/intellij/build/events/MessageEvent.java index 10d8382ca837..4187e005ddee 100644 --- a/platform/lang-api/src/com/intellij/build/events/MessageEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/MessageEvent.java @@ -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(); } diff --git a/platform/lang-api/src/com/intellij/build/events/OutputBuildEvent.java b/platform/lang-api/src/com/intellij/build/events/OutputBuildEvent.java index f50f320ca4bc..c64378f27ab1 100644 --- a/platform/lang-api/src/com/intellij/build/events/OutputBuildEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/OutputBuildEvent.java @@ -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) diff --git a/platform/lang-api/src/com/intellij/build/events/PresentableBuildEvent.java b/platform/lang-api/src/com/intellij/build/events/PresentableBuildEvent.java new file mode 100644 index 000000000000..537bce07cce8 --- /dev/null +++ b/platform/lang-api/src/com/intellij/build/events/PresentableBuildEvent.java @@ -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(); +} diff --git a/platform/lang-api/src/com/intellij/build/events/ProgressBuildEvent.java b/platform/lang-api/src/com/intellij/build/events/ProgressBuildEvent.java index 11e6a80c9580..60fbf62c9732 100644 --- a/platform/lang-api/src/com/intellij/build/events/ProgressBuildEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/ProgressBuildEvent.java @@ -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(); } diff --git a/platform/lang-api/src/com/intellij/build/events/StartBuildEvent.java b/platform/lang-api/src/com/intellij/build/events/StartBuildEvent.java index 58230a80aac9..888c2c79b6fd 100644 --- a/platform/lang-api/src/com/intellij/build/events/StartBuildEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/StartBuildEvent.java @@ -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; + } } diff --git a/platform/lang-api/src/com/intellij/build/events/StartEvent.java b/platform/lang-api/src/com/intellij/build/events/StartEvent.java index f23c79f38924..afcbe59df50f 100644 --- a/platform/lang-api/src/com/intellij/build/events/StartEvent.java +++ b/platform/lang-api/src/com/intellij/build/events/StartEvent.java @@ -19,4 +19,5 @@ package com.intellij.build.events; * @author Vladislav.Soroka */ public interface StartEvent extends BuildEvent { + } diff --git a/platform/lang-impl/BUILD.bazel b/platform/lang-impl/BUILD.bazel index 22e8c1569ae1..683e45e58585 100644 --- a/platform/lang-impl/BUILD.bazel +++ b/platform/lang-impl/BUILD.bazel @@ -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", diff --git a/platform/lang-impl/api-dump-experimental.txt b/platform/lang-impl/api-dump-experimental.txt index 0e4baf534554..c89131b6979a 100644 --- a/platform/lang-impl/api-dump-experimental.txt +++ b/platform/lang-impl/api-dump-experimental.txt @@ -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 -- (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 diff --git a/platform/lang-impl/api-dump-unreviewed.txt b/platform/lang-impl/api-dump-unreviewed.txt index 61879747e48f..235bd66449e6 100644 --- a/platform/lang-impl/api-dump-unreviewed.txt +++ b/platform/lang-impl/api-dump-unreviewed.txt @@ -1074,18 +1074,6 @@ c:com.intellij.build.SyncViewManager - com.intellij.build.AbstractViewManager - (com.intellij.openapi.project.Project):V - getViewName():java.lang.String -a:com.intellij.build.events.impl.AbstractBuildEvent -- com.intellij.build.events.BuildEvent -- (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 - ():V @@ -1113,75 +1101,9 @@ c:com.intellij.build.events.impl.FailureResultImpl - (java.lang.Throwable):V - (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 -- (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 -- (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 -- (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 -- (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 -- (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 -- (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 -- (java.lang.Object,java.lang.Object,java.lang.String,Z):V -- (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 -- (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 - ():V -f:com.intellij.build.events.impl.StartBuildEventImpl -- com.intellij.build.events.impl.StartEventImpl -- com.intellij.build.events.StartBuildEvent -- (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 -- (java.lang.Object,java.lang.Object,J,java.lang.String):V f:com.intellij.build.events.impl.SuccessResultImpl - com.intellij.build.events.SuccessResult - ():V diff --git a/platform/lang-impl/api-dump.txt b/platform/lang-impl/api-dump.txt index b92558503394..e283a9a500b0 100644 --- a/platform/lang-impl/api-dump.txt +++ b/platform/lang-impl/api-dump.txt @@ -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 -- (java.lang.Object,java.lang.Object,java.lang.String,com.intellij.execution.process.ProcessOutputType):V -- (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 diff --git a/platform/lang-impl/intellij.platform.lang.impl.iml b/platform/lang-impl/intellij.platform.lang.impl.iml index ed1efded6fcb..456372d9e575 100644 --- a/platform/lang-impl/intellij.platform.lang.impl.iml +++ b/platform/lang-impl/intellij.platform.lang.impl.iml @@ -63,6 +63,7 @@ + diff --git a/platform/lang-impl/src/com/intellij/build/BuildView.java b/platform/lang-impl/src/com/intellij/build/BuildView.java index f55827c4bc8b..9400645431ae 100644 --- a/platform/lang-impl/src/com/intellij/build/BuildView.java +++ b/platform/lang-impl/src/com/intellij/build/BuildView.java @@ -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 return; } - if (startBuildEvent instanceof StartBuildEventImpl) { - myViewSettingsProvider = ((StartBuildEventImpl)startBuildEvent).getBuildViewSettingsProvider(); - } + myViewSettingsProvider = startBuildEvent.getBuildViewSettings(); if (myViewSettingsProvider == null) { myViewSettingsProvider = () -> false; } diff --git a/platform/lang-impl/src/com/intellij/build/BuildViewManager.java b/platform/lang-impl/src/com/intellij/build/BuildViewManager.java index 16d6f21ada94..714aef59929e 100644 --- a/platform/lang-impl/src/com/intellij/build/BuildViewManager.java +++ b/platform/lang-impl/src/com/intellij/build/BuildViewManager.java @@ -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 createBuildProgress(@NotNull Project project) { - return new BuildRootProgressImpl(project.getService(BuildViewManager.class)); + return new BuildRootProgressImpl( + BuildEvents.getInstance(), + project.getService(BuildViewManager.class) + ); } } diff --git a/platform/lang-impl/src/com/intellij/build/BuildViewSettingsProvider.java b/platform/lang-impl/src/com/intellij/build/BuildViewSettingsProvider.java deleted file mode 100644 index 42659b94dd8c..000000000000 --- a/platform/lang-impl/src/com/intellij/build/BuildViewSettingsProvider.java +++ /dev/null @@ -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(); -} diff --git a/platform/lang-impl/src/com/intellij/build/SyncViewManager.java b/platform/lang-impl/src/com/intellij/build/SyncViewManager.java index 961ee0e9950c..6538bd41d9b7 100644 --- a/platform/lang-impl/src/com/intellij/build/SyncViewManager.java +++ b/platform/lang-impl/src/com/intellij/build/SyncViewManager.java @@ -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 createBuildProgress(@NotNull Project project) { - return new BuildRootProgressImpl(project.getService(SyncViewManager.class)); + return new BuildRootProgressImpl( + BuildEvents.getInstance(), + project.getService(SyncViewManager.class) + ); } } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/BuildIssueEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/BuildIssueEventBuilderImpl.kt new file mode 100644 index 000000000000..9e5709ec15b2 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/BuildIssueEventBuilderImpl.kt @@ -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") + ) + } +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadEventBuilderImpl.kt new file mode 100644 index 000000000000..ed25f97058f1 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadEventBuilderImpl.kt @@ -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") + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadedEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadedEventBuilderImpl.kt new file mode 100644 index 000000000000..72bf47b019ea --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileDownloadedEventBuilderImpl.kt @@ -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") + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileMessageEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileMessageEventBuilderImpl.kt new file mode 100644 index 000000000000..5cbcebb89754 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FileMessageEventBuilderImpl.kt @@ -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") + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishBuildEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishBuildEventBuilderImpl.kt new file mode 100644 index 000000000000..bf4c0b4a3e76 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishBuildEventBuilderImpl.kt @@ -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") + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishEventBuilderImpl.kt new file mode 100644 index 000000000000..6c9059c79f38 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/FinishEventBuilderImpl.kt @@ -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") + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/MessageEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/MessageEventBuilderImpl.kt new file mode 100644 index 000000000000..0245a2553573 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/MessageEventBuilderImpl.kt @@ -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 + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/OutputBuildEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/OutputBuildEventBuilderImpl.kt new file mode 100644 index 000000000000..42b0d260505c --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/OutputBuildEventBuilderImpl.kt @@ -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 + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/PresentableBuildEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/PresentableBuildEventBuilderImpl.kt new file mode 100644 index 000000000000..390a4bc7f9d0 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/PresentableBuildEventBuilderImpl.kt @@ -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") + ) + } +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/ProgressBuildEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/ProgressBuildEventBuilderImpl.kt new file mode 100644 index 000000000000..39649b173923 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/ProgressBuildEventBuilderImpl.kt @@ -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 + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartBuildEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartBuildEventBuilderImpl.kt new file mode 100644 index 000000000000..f4b41c667430 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartBuildEventBuilderImpl.kt @@ -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 + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartEventBuilderImpl.kt b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartEventBuilderImpl.kt new file mode 100644 index 000000000000..ec8a07588c9e --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/eventBuilders/impl/StartEventBuilderImpl.kt @@ -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 + ) +} diff --git a/platform/lang-impl/src/com/intellij/build/events/PresentableBuildEvent.java b/platform/lang-impl/src/com/intellij/build/events/PresentableBuildEvent.java deleted file mode 100644 index e2d727b64ac0..000000000000 --- a/platform/lang-impl/src/com/intellij/build/events/PresentableBuildEvent.java +++ /dev/null @@ -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(); -} diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/AbstractBuildEvent.java b/platform/lang-impl/src/com/intellij/build/events/impl/AbstractBuildEvent.java index 6f9ca2f986ab..1512ca936360 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/AbstractBuildEvent.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/AbstractBuildEvent.java @@ -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 + '\'' + diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/BuildEventsImpl.kt b/platform/lang-impl/src/com/intellij/build/events/impl/BuildEventsImpl.kt new file mode 100644 index 000000000000..17ee1a8cb970 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/events/impl/BuildEventsImpl.kt @@ -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() +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/BuildIssueEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/BuildIssueEventImpl.java index 125e6f4f9a48..9b1bd5f7f22e 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/BuildIssueEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/BuildIssueEventImpl.java @@ -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() { diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadEventImpl.java index 4165e32b6cde..904115d00da2 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadEventImpl.java @@ -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; } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadedEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadedEventImpl.java index 519261df6f1d..20c11e45835f 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadedEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/FileDownloadedEventImpl.java @@ -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; } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/FileMessageEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/FileMessageEventImpl.java index 63d152b0a36d..78e337770d62 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/FileMessageEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/FileMessageEventImpl.java @@ -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; } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/FinishBuildEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/FinishBuildEventImpl.java index 64d3047f9e0b..b6a028562df1 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/FinishBuildEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/FinishBuildEventImpl.java @@ -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); } } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/FinishEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/FinishEventImpl.java index 92210551caa1..3ebba3590e6b 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/FinishEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/FinishEventImpl.java @@ -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; } } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/MessageEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/MessageEventImpl.java index 3b608a6a31cc..dfddecc1c37e 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/MessageEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/MessageEventImpl.java @@ -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() { diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/OutputBuildEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/OutputBuildEventImpl.java index d60061f84d42..0e75a7af399f 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/OutputBuildEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/OutputBuildEventImpl.java @@ -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); } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/PresentableBuildEventImpl.kt b/platform/lang-impl/src/com/intellij/build/events/impl/PresentableBuildEventImpl.kt new file mode 100644 index 000000000000..df4f659e9d5a --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/events/impl/PresentableBuildEventImpl.kt @@ -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 + } +} diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/ProgressBuildEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/ProgressBuildEventImpl.java index 50a2f14c5cc9..fdcb4f1037f2 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/ProgressBuildEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/ProgressBuildEventImpl.java @@ -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; } } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/StartBuildEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/StartBuildEventImpl.java index 7e0291aacc0a..19bacc312447 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/StartBuildEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/StartBuildEventImpl.java @@ -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; } } diff --git a/platform/lang-impl/src/com/intellij/build/events/impl/StartEventImpl.java b/platform/lang-impl/src/com/intellij/build/events/impl/StartEventImpl.java index 6c815d4d5d96..cb5e4488053b 100644 --- a/platform/lang-impl/src/com/intellij/build/events/impl/StartEventImpl.java +++ b/platform/lang-impl/src/com/intellij/build/events/impl/StartEventImpl.java @@ -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); } } diff --git a/platform/lang-impl/src/com/intellij/build/progress/AbstractBuildProgress.java b/platform/lang-impl/src/com/intellij/build/progress/AbstractBuildProgress.java new file mode 100644 index 000000000000..96b5d75b383d --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/progress/AbstractBuildProgress.java @@ -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 { + + 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 event(@NotNull BuildEvent event) { + myListener.onEvent(getBuildId(), event); + return this; + } + + @Override + public final @NotNull BuildProgress start(@NotNull BuildProgressDescriptor descriptor) { + return start(getStartMessage(), descriptor); + } + + @Override + public @NotNull BuildProgress finish(@NotNull EventResult result) { + return finish(getFinishMessage(), result); + } + + @Override + public @NotNull BuildProgress finish(@NotNull String message, @NotNull EventResult result) { + return finish(System.currentTimeMillis(), message, result); + } + + @Override + public final @NotNull BuildProgress finish() { + return finish(false); + } + + @Override + public final @NotNull BuildProgress finish(boolean isUpToDate) { + return finish(System.currentTimeMillis(), isUpToDate, getFinishMessage()); + } + + @Override + public final @NotNull BuildProgress finish(long timeStamp) { + return finish(timeStamp, false, getFinishMessage()); + } + + @Override + public final @NotNull BuildProgress finish(long timeStamp, boolean isUpToDate, @NotNull String message) { + return finish(timeStamp, message, new SuccessResultImpl(isUpToDate)); + } + + @Override + public final @NotNull BuildProgress fail() { + return fail(System.currentTimeMillis(), getFailMessage()); + } + + @Override + public final @NotNull BuildProgress fail(long timeStamp, @NotNull String message) { + return finish(timeStamp, message, new FailureResultImpl()); + } + + @Override + public final @NotNull BuildProgress cancel() { + return cancel(System.currentTimeMillis(), getCancelMessage()); + } + + @Override + public final @NotNull BuildProgress cancel(long timeStamp, @NotNull String message) { + return finish(timeStamp, message, new SkippedResultImpl()); + } + + @Override + public final @NotNull BuildProgress 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 progress(@NotNull String title) { + return event( + myBuildEvents.progress() + .withStartId(getStartId()) + .withParentId(getParentId()) + .withMessage(title) + .build() + ); + } + + @Override + public final @NotNull BuildProgress 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 presentable( + @NotNull String title, + @NotNull BuildEventPresentationData presentationData + ) { + return event( + myBuildEvents.presentable() + .withParentId(getStartId()) + .withMessage(title) + .withPresentationData(presentationData) + .build() + ); + } + + @Override + public final @NotNull BuildProgress output(@NotNull String text, @NotNull ProcessOutputType processOutputType) { + return event( + myBuildEvents.output() + .withParentId(getStartId()) + .withMessage(text) + .withOutputType(processOutputType) + .build() + ); + } + + @Override + public final @NotNull BuildProgress 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 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 buildIssue( + @NotNull BuildIssue issue, + @NotNull MessageEvent.Kind kind + ) { + return event( + myBuildEvents.buildIssue() + .withParentId(getStartId()) + .withIssue(issue) + .withKind(kind) + .build() + ); + } +} diff --git a/platform/lang-impl/src/com/intellij/build/progress/BuildProgress.java b/platform/lang-impl/src/com/intellij/build/progress/BuildProgress.java index 02aeffeb553e..fc93ba978bc6 100644 --- a/platform/lang-impl/src/com/intellij/build/progress/BuildProgress.java +++ b/platform/lang-impl/src/com/intellij/build/progress/BuildProgress.java @@ -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 { + @NotNull Object getId(); @NotNull BuildProgress start(@NotNull T descriptor); - @NotNull BuildProgress progress(@NlsContexts.ProgressTitle @NotNull String title); + @NotNull BuildProgress start(@NotNull @Message String message, @NotNull T descriptor); - @NotNull BuildProgress progress(@NlsContexts.ProgressTitle @NotNull String title, long total, long progress, String unit); + @NotNull BuildProgress finish(@NotNull EventResult result); - @NotNull BuildProgress output(@BuildEventsNls.Message @NotNull String text, boolean stdOut); + @NotNull BuildProgress finish(@NotNull @Message String message, @NotNull EventResult result); - @NotNull BuildProgress message(@BuildEventsNls.Title @NotNull String title, - @BuildEventsNls.Message @NotNull String message, - @NotNull MessageEvent.Kind kind, - @Nullable Navigatable navigatable); - - @NotNull BuildProgress fileMessage(@BuildEventsNls.Title @NotNull String title, - @BuildEventsNls.Message @NotNull String message, - @NotNull MessageEvent.Kind kind, - @NotNull FilePosition filePosition); + @NotNull BuildProgress finish(long timeStamp, @NotNull @Message String title, @NotNull EventResult result); @NotNull BuildProgress finish(); @@ -39,17 +38,50 @@ public interface BuildProgress { @NotNull BuildProgress finish(boolean isUpToDate); - @NotNull BuildProgress finish(long timeStamp, boolean isUpToDate, @BuildEventsNls.Message @NotNull String message); + @NotNull BuildProgress finish(long timeStamp, boolean isUpToDate, @Message @NotNull String message); @NotNull BuildProgress fail(); - @NotNull BuildProgress fail(long timeStamp, @BuildEventsNls.Message @NotNull String message); + @NotNull BuildProgress fail(long timeStamp, @Message @NotNull String message); @NotNull BuildProgress cancel(); - @NotNull BuildProgress cancel(long timeStamp, @BuildEventsNls.Message @NotNull String message); + @NotNull BuildProgress cancel(long timeStamp, @Message @NotNull String message); - @NotNull BuildProgress startChildProgress(@BuildEventsNls.Title @NotNull String title); + @NotNull BuildProgress startChildProgress(@Title @NotNull String title); - @NotNull BuildProgress buildIssue(@NotNull BuildIssue issue, @NotNull MessageEvent.Kind kind); + @NotNull BuildProgress progress(@ProgressTitle @NotNull String title); + + @NotNull BuildProgress progress(@ProgressTitle @NotNull String title, long total, long progress, String unit); + + @NotNull BuildProgress presentable(@Message @NotNull String title, @NotNull BuildEventPresentationData presentationData); + + @NotNull BuildProgress output(@Message @NotNull String text, @NotNull ProcessOutputType processOutputType); + + /** + * @deprecated Use {@link output} event with {@link ProcessOutputType} instead. + */ + @Deprecated + default @NotNull BuildProgress output(@Message @NotNull String text, boolean stdOut) { + return output(text, stdOut ? ProcessOutputType.STDOUT : ProcessOutputType.STDERR); + } + + @NotNull BuildProgress message( + @Title @NotNull String title, + @Message @NotNull String message, + @NotNull MessageEvent.Kind kind, + @Nullable Navigatable navigatable + ); + + @NotNull BuildProgress fileMessage( + @Title @NotNull String title, + @Message @NotNull String message, + @NotNull MessageEvent.Kind kind, + @NotNull FilePosition filePosition + ); + + @NotNull BuildProgress buildIssue( + @NotNull BuildIssue issue, + @NotNull MessageEvent.Kind kind + ); } diff --git a/platform/lang-impl/src/com/intellij/build/progress/BuildProgressDescriptorImpl.kt b/platform/lang-impl/src/com/intellij/build/progress/BuildProgressDescriptorImpl.kt new file mode 100644 index 000000000000..06e5587be697 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/progress/BuildProgressDescriptorImpl.kt @@ -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 +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/build/progress/BuildProgressImpl.java b/platform/lang-impl/src/com/intellij/build/progress/BuildProgressImpl.java deleted file mode 100644 index f500db0a299d..000000000000 --- a/platform/lang-impl/src/com/intellij/build/progress/BuildProgressImpl.java +++ /dev/null @@ -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 { - private final Object myId = new Object(); - private final BuildProgressListener myListener; - private final @Nullable BuildProgress myParentProgress; - private BuildProgressDescriptor myDescriptor; - - BuildProgressImpl(BuildProgressListener listener, @Nullable BuildProgress parentProgress) { - myListener = listener; - myParentProgress = parentProgress; - } - - protected Object getBuildId() { - return myDescriptor.getBuildDescriptor().getId(); - } - - @Override - public @NotNull Object getId() { - return myId; - } - - @Override - public @NotNull BuildProgress 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 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 progress(@NotNull String title) { - return progress(title, -1, -1 , ""); - } - - @Override - public @NotNull BuildProgress 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 output(@NotNull String text, boolean stdOut) { - myListener.onEvent(getBuildId(), new OutputBuildEventImpl(getId(), text, stdOut)); - return this; - } - - @Override - public @NotNull BuildProgress 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 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 finish() { - return finish(false); - } - - @Override - public @NotNull BuildProgress finish(boolean isUpToDate) { - return finish(System.currentTimeMillis(), isUpToDate, myDescriptor.getTitle()); - } - - @Override - public @NotNull BuildProgress finish(long timeStamp) { - return finish(timeStamp, false, myDescriptor.getTitle()); - } - - @Override - public @NotNull BuildProgress 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 fail() { - return fail(System.currentTimeMillis(), myDescriptor.getTitle()); - } - - @Override - public @NotNull BuildProgress 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 cancel() { - return cancel(System.currentTimeMillis(), myDescriptor.getTitle()); - } - - @Override - public @NotNull BuildProgress 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 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."); - } - } -} diff --git a/platform/lang-impl/src/com/intellij/build/progress/BuildRootProgressImpl.java b/platform/lang-impl/src/com/intellij/build/progress/BuildRootProgressImpl.java index dd5d7c01e979..3152e74904e0 100644 --- a/platform/lang-impl/src/com/intellij/build/progress/BuildRootProgressImpl.java +++ b/platform/lang-impl/src/com/intellij/build/progress/BuildRootProgressImpl.java @@ -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 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 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 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 cancel() { - return cancel(System.currentTimeMillis(), BuildBundle.message("build.status.cancelled")); + public @NotNull BuildProgress 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 finish(long timeStamp, @NotNull String message, @NotNull EventResult result) { + return event(myBuildEvents.finishBuild() + .withStartBuildId(getBuildId()) + .withParentId(getParentId()) + .withTime(timeStamp) + .withMessage(message) + .withResult(result) + .build()); } } diff --git a/platform/lang-impl/src/com/intellij/build/progress/ChildBuildProgressImpl.java b/platform/lang-impl/src/com/intellij/build/progress/ChildBuildProgressImpl.java new file mode 100644 index 000000000000..67b52e9159fc --- /dev/null +++ b/platform/lang-impl/src/com/intellij/build/progress/ChildBuildProgressImpl.java @@ -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 myParentProgress; + + ChildBuildProgressImpl( + @NotNull BuildEvents buildEvents, + @NotNull BuildProgressListener listener, + @NotNull BuildProgressDescriptor descriptor, + @NotNull BuildProgress 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 start(@NotNull String message, @NotNull BuildProgressDescriptor descriptor) { + return event(myBuildEvents.start() + .withId(getStartId()) + .withParentId(getParentId()) + .withMessage(message) + .build()); + } + + @Override + public @NotNull BuildProgress 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; + } +} diff --git a/platform/lang-impl/testSources/com/intellij/build/BuildTreeConsoleViewTest.kt b/platform/lang-impl/testSources/com/intellij/build/BuildTreeConsoleViewTest.kt index 92df6388b3c7..b0cd511ec659 100644 --- a/platform/lang-impl/testSources/com/intellij/build/BuildTreeConsoleViewTest.kt +++ b/platform/lang-impl/testSources/com/intellij/build/BuildTreeConsoleViewTest.kt @@ -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 diff --git a/platform/lang-impl/testSources/com/intellij/build/BuildViewTest.kt b/platform/lang-impl/testSources/com/intellij/build/BuildViewTest.kt index dde1327cd162..dcf64bb3bc5b 100644 --- a/platform/lang-impl/testSources/com/intellij/build/BuildViewTest.kt +++ b/platform/lang-impl/testSources/com/intellij/build/BuildViewTest.kt @@ -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() //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.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" } diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index e3d84e0e1a98..e912e1b9ecd2 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -1403,6 +1403,8 @@ testServiceImplementation="com.intellij.build.internal.DummySyncViewManager"/> +