fix: task names are trimmed from build output before build is executed (closes #1045)

This commit is contained in:
Akash Yadav
2023-06-18 23:53:33 +05:30
parent 22d1ac8b08
commit faf2c3b916
8 changed files with 64 additions and 29 deletions
@@ -80,9 +80,6 @@ abstract class BaseBuildAction : EditorActivityAction() {
}
activity.saveAll()
activity.runOnUiThread {
activity.appendBuildOutput("Executing tasks: " + TextUtils.join(", ", tasks))
}
buildService.executeTasks(tasks = tasks).whenComplete { result, err ->
if (result == null || err != null) {
@@ -17,10 +17,12 @@
package com.itsaky.androidide.handlers
import com.itsaky.androidide.R
import com.itsaky.androidide.activities.editor.EditorHandlerActivity
import com.itsaky.androidide.preferences.internal.isFirstBuild
import com.itsaky.androidide.resources.R.string
import com.itsaky.androidide.services.builder.GradleBuildService
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo
import com.itsaky.androidide.tooling.events.ProgressEvent
import com.itsaky.androidide.tooling.events.configuration.ProjectConfigurationStartEvent
import com.itsaky.androidide.tooling.events.task.TaskStartEvent
@@ -38,7 +40,7 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
this.activityReference = WeakReference(activity)
}
override fun prepareBuild() {
override fun prepareBuild(buildInfo: BuildInfo) {
val isFirstBuild = isFirstBuild
activity()
.setStatus(
@@ -51,6 +53,11 @@ class EditorBuildEventListener : GradleBuildService.EventListener {
activity().viewModel.isBuildInProgress = true
activity().binding.bottomSheet.clearBuildOutput()
if (buildInfo.tasks.isNotEmpty()) {
activity().binding.bottomSheet.appendBuildOut(
activity().getString(R.string.title_run_tasks) + " : " + buildInfo.tasks)
}
}
override fun onBuildSuccessful(tasks: MutableList<String>) {
@@ -59,6 +59,7 @@ import com.itsaky.androidide.tooling.api.IToolingApiServer;
import com.itsaky.androidide.tooling.api.messages.InitializeProjectMessage;
import com.itsaky.androidide.tooling.api.messages.TaskExecutionMessage;
import com.itsaky.androidide.tooling.api.messages.result.BuildCancellationRequestResult;
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo;
import com.itsaky.androidide.tooling.api.messages.result.BuildResult;
import com.itsaky.androidide.tooling.api.messages.result.GradleWrapperCheckResult;
import com.itsaky.androidide.tooling.api.messages.result.InitializeResult;
@@ -250,10 +251,10 @@ public class GradleBuildService extends Service implements BuildService, IToolin
}
@Override
public void prepareBuild() {
public void prepareBuild(@NotNull BuildInfo buildInfo) {
updateNotification(getString(R.string.build_status_in_progress), true);
if (eventListener != null) {
eventListener.prepareBuild();
eventListener.prepareBuild(buildInfo);
}
}
@@ -509,8 +510,8 @@ public class GradleBuildService extends Service implements BuildService, IToolin
@SuppressWarnings("ConstantConditions")
@Override
public void prepareBuild() {
ThreadUtils.runOnUiThread(listener::prepareBuild);
public void prepareBuild(@NonNull BuildInfo buildInfo) {
ThreadUtils.runOnUiThread(() -> listener.prepareBuild(buildInfo));
}
@SuppressWarnings("ConstantConditions")
@@ -555,9 +556,10 @@ public class GradleBuildService extends Service implements BuildService, IToolin
/**
* Called just before a build is started.
*
* @see IToolingApiClient#prepareBuild()
* @param buildInfo The information about the build to be executed.
* @see IToolingApiClient#prepareBuild(BuildInfo)
*/
void prepareBuild();
void prepareBuild(@NonNull BuildInfo buildInfo);
/**
* Called when a build is successful.
@@ -24,6 +24,7 @@ import com.itsaky.androidide.tooling.api.messages.InitializeProjectMessage
import com.itsaky.androidide.tooling.api.messages.TaskExecutionMessage
import com.itsaky.androidide.tooling.api.messages.result.BuildCancellationRequestResult
import com.itsaky.androidide.tooling.api.messages.result.BuildCancellationRequestResult.Reason.CANCELLATION_ERROR
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo
import com.itsaky.androidide.tooling.api.messages.result.BuildResult
import com.itsaky.androidide.tooling.api.messages.result.InitializeResult
import com.itsaky.androidide.tooling.api.messages.result.TaskExecutionResult
@@ -69,7 +70,6 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
private var buildCancellationToken: CancellationTokenSource? = null
private val log = ILogger.newInstance(javaClass.simpleName)
@Suppress("UnstableApiUsage")
override fun initialize(params: InitializeProjectMessage): CompletableFuture<InitializeResult> {
forwardingProject.projectPath = params.directory
return CompletableFutures.computeAsync {
@@ -100,7 +100,7 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
)
}
notifyBeforeBuild()
notifyBeforeBuild(BuildInfo(emptyList()))
val connection = this.connector!!.connect()
stopWatch.lapFromLast("Project connection established")
@@ -172,7 +172,7 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
this.buildCancellationToken = GradleConnector.newCancellationTokenSource()
builder.withCancellationToken(this.buildCancellationToken!!.token())
notifyBeforeBuild()
notifyBeforeBuild(BuildInfo(message.tasks))
try {
builder.run()
@@ -190,17 +190,18 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
connector: GradleConnector,
gradleDistribution: String?
) {
if (gradleDistribution != null && gradleDistribution.isNotBlank()) {
val file = File(gradleDistribution)
if (file.exists() && file.isDirectory) {
log.info("Using Gradle installation:", file.canonicalPath)
connector.useInstallation(file)
} else {
log.error("Specified Gradle installation does not exist:", gradleDistribution)
}
} else {
if (gradleDistribution.isNullOrBlank()) {
log.info("Using Gradle wrapper for build...")
return
}
val file = File(gradleDistribution)
if (!file.exists() || !file.isDirectory) {
log.error("Specified Gradle installation does not exist:", gradleDistribution)
return
}
log.info("Using Gradle installation:", file.canonicalPath)
connector.useInstallation(file)
}
private fun notifyBuildFailure(tasks: List<String>) {
@@ -215,9 +216,9 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
}
}
private fun notifyBeforeBuild() {
private fun notifyBeforeBuild(buildInfo: BuildInfo) {
if (client != null) {
client!!.prepareBuild()
client!!.prepareBuild(buildInfo)
}
}
@@ -242,7 +243,6 @@ internal class ToolingApiServerImpl(private val forwardingProject: InternalForwa
}
}
@Suppress("UnstableApiUsage")
override fun shutdown(): CompletableFuture<Void> {
return CompletableFuture.runAsync {
connector?.disconnect()
@@ -21,6 +21,7 @@ import com.itsaky.androidide.models.LogLine
import com.itsaky.androidide.tooling.api.IProject
import com.itsaky.androidide.tooling.api.IToolingApiClient
import com.itsaky.androidide.tooling.api.IToolingApiServer
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo
import com.itsaky.androidide.tooling.api.messages.result.BuildResult
import com.itsaky.androidide.tooling.api.messages.result.GradleWrapperCheckResult
import com.itsaky.androidide.tooling.api.util.ToolingApiLauncher
@@ -128,7 +129,7 @@ class ToolingApiTestLauncher {
log.debug(line.trim())
}
override fun prepareBuild() {
override fun prepareBuild(buildInfo: BuildInfo) {
log.debug("---------- PREPARE BUILD ----------")
log.debug("AGP Version : ${this.agpVersion}")
log.debug("Gradle Version : ${this.gradleVersion}")
@@ -18,6 +18,7 @@
package com.itsaky.androidide.tooling.api
import com.itsaky.androidide.models.LogLine
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo
import com.itsaky.androidide.tooling.api.messages.result.BuildResult
import com.itsaky.androidide.tooling.api.messages.result.GradleWrapperCheckResult
import com.itsaky.androidide.tooling.events.ProgressEvent
@@ -38,8 +39,8 @@ class ForwardingToolingApiClient(var client: IToolingApiClient?) : IToolingApiCl
client?.logOutput(line)
}
override fun prepareBuild() {
client?.prepareBuild()
override fun prepareBuild(buildInfo: BuildInfo) {
client?.prepareBuild(buildInfo)
}
override fun onBuildSuccessful(result: BuildResult) {
@@ -18,6 +18,7 @@
package com.itsaky.androidide.tooling.api
import com.itsaky.androidide.models.LogLine
import com.itsaky.androidide.tooling.api.messages.result.BuildInfo
import com.itsaky.androidide.tooling.api.messages.result.BuildResult
import com.itsaky.androidide.tooling.api.messages.result.GradleWrapperCheckResult
import com.itsaky.androidide.tooling.events.ProgressEvent
@@ -49,7 +50,7 @@ interface IToolingApiClient {
@JsonNotification fun logOutput(line: String)
/** Called just before a build is started. */
@JsonNotification fun prepareBuild()
@JsonNotification fun prepareBuild(buildInfo: BuildInfo)
/**
* Called when a build is successful.
@@ -0,0 +1,26 @@
/*
* This file is part of AndroidIDE.
*
* AndroidIDE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* AndroidIDE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with AndroidIDE. If not, see <https://www.gnu.org/licenses/>.
*/
package com.itsaky.androidide.tooling.api.messages.result
/**
* Information about a build sent to the client before the build is executed.
*
* @property tasks The tasks that will be executed.
* @author Akash Yadav
*/
data class BuildInfo(val tasks: List<String>)