use of com.google.idea.blaze.java.fastbuild.FastBuildException.BlazeBuildError in project intellij by bazelbuild.
the class FastBuildServiceImpl method buildDeployJar.
private FastBuildState.BuildOutput buildDeployJar(BlazeContext context, Label label, FastBuildParameters buildParameters, BuildResultHelper resultHelper) {
Label deployJarLabel = createDeployJarLabel(label);
context.output(new StatusOutput("Building base deploy jar for fast builds: " + deployJarLabel.targetName()));
BlazeInfo blazeInfo = getBlazeInfo(context, buildParameters);
FastBuildAspectStrategy aspectStrategy = FastBuildAspectStrategy.getInstance(Blaze.getBuildSystemName(project));
Stopwatch timer = Stopwatch.createStarted();
BlazeCommand.Builder command = BlazeCommand.builder(buildParameters.blazeBinary(), BlazeCommandName.BUILD).addTargets(label).addTargets(deployJarLabel).addBlazeFlags(buildParameters.buildFlags()).addBlazeFlags(resultHelper.getBuildFlags());
aspectStrategy.addAspectAndOutputGroups(command, /* additionalOutputGroups...= */
"default");
int exitCode = ExternalTask.builder(WorkspaceRoot.fromProject(project)).addBlazeCommand(command.build()).context(context).stderr(LineProcessingOutputStream.of(BlazeConsoleLineProcessorProvider.getAllStderrLineProcessors(context))).build().run();
BuildResult result = BuildResult.fromExitCode(exitCode);
context.output(FastBuildLogOutput.keyValue("deploy_jar_build_result", result.status.toString()));
context.output(FastBuildLogOutput.milliseconds("deploy_jar_build_time_ms", timer));
if (result.status != Status.SUCCESS) {
throw new FastBuildTunnelException(new BlazeBuildError("Blaze failure building deploy jar"));
}
Predicate<String> filePredicate = file -> file.endsWith(deployJarLabel.targetName().toString()) || aspectStrategy.getAspectOutputFilePredicate().test(file);
try {
ImmutableList<File> deployJarArtifacts = BlazeArtifact.getLocalFiles(resultHelper.getBuildArtifactsForTarget(deployJarLabel, filePredicate));
checkState(deployJarArtifacts.size() == 1);
File deployJar = deployJarArtifacts.get(0);
ImmutableList<File> ideInfoFiles = BlazeArtifact.getLocalFiles(resultHelper.getArtifactsForOutputGroup(aspectStrategy.getAspectOutputGroup(), filePredicate));
// if targets are built with multiple configurations, just take the first one
// TODO(brendandouglas): choose a consistent configuration instead
ImmutableMap<Label, FastBuildBlazeData> blazeData = ideInfoFiles.stream().map(aspectStrategy::readFastBuildBlazeData).collect(toImmutableMap(FastBuildBlazeData::label, i -> i, (i, j) -> i));
return BuildOutput.create(deployJar, blazeData, blazeInfo);
} catch (GetArtifactsException e) {
throw new RuntimeException("Blaze failure building deploy jar: " + e.getMessage());
}
}
use of com.google.idea.blaze.java.fastbuild.FastBuildException.BlazeBuildError in project intellij by bazelbuild.
the class FastBuildConfigurationRunner method executeBeforeRunTask.
@Override
public boolean executeBeforeRunTask(ExecutionEnvironment env) {
if (!canRun(env.getRunProfile())) {
return true;
}
Project project = env.getProject();
BlazeCommandRunConfiguration configuration = BlazeCommandRunConfigurationRunner.getBlazeConfig(env.getRunProfile());
BlazeCommandRunConfigurationCommonState handlerState = (BlazeCommandRunConfigurationCommonState) configuration.getHandler().getState();
checkState(configuration.getSingleTarget() != null);
Label label = (Label) configuration.getSingleTarget();
String binaryPath = handlerState.getBlazeBinaryState().getBlazeBinary() != null ? handlerState.getBlazeBinaryState().getBlazeBinary() : Blaze.getBuildSystemProvider(project).getBinaryPath(project);
SaveUtil.saveAllFiles();
FastBuildService buildService = FastBuildService.getInstance(project);
Future<FastBuildInfo> buildFuture = null;
FocusBehavior consolePopupBehavior = BlazeUserSettings.getInstance().getShowBlazeConsoleOnRun();
FocusBehavior problemsViewFocus = BlazeUserSettings.getInstance().getShowProblemsViewOnRun();
BlazeContext context = BlazeContext.create().push(new ToolWindowScope.Builder(project, new Task(project, "Fast Build " + label.targetName(), Task.Type.FAST_BUILD)).setPopupBehavior(consolePopupBehavior).setIssueParsers(BlazeIssueParser.defaultIssueParsers(project, WorkspaceRoot.fromProject(project), ContextType.RunConfiguration)).build()).push(new ProblemsViewScope(project, problemsViewFocus)).push(new IdeaLogScope()).push(new BlazeConsoleScope.Builder(project).setPopupBehavior(consolePopupBehavior).addConsoleFilters(new IssueOutputFilter(project, WorkspaceRoot.fromProject(project), ContextType.RunConfiguration, /* linkToBlazeConsole= */
true)).build()).push(new FastBuildLogDataScope());
try {
buildFuture = buildService.createBuild(context, label, binaryPath, handlerState.getBlazeFlagsState().getFlagsForExternalProcesses());
FastBuildInfo fastBuildInfo = buildFuture.get();
env.getCopyableUserData(BUILD_INFO_KEY).set(fastBuildInfo);
env.getCopyableUserData(BLAZE_CONTEXT).set(context);
return true;
} catch (InterruptedException e) {
buildFuture.cancel(/* mayInterruptIfRunning= */
true);
Thread.currentThread().interrupt();
} catch (CancellationException e) {
ExecutionUtil.handleExecutionError(env.getProject(), env.getExecutor().getToolWindowId(), env.getRunProfile(), new RunCanceledByUserException());
} catch (FastBuildException e) {
if (!(e instanceof BlazeBuildError)) {
// no need to log blaze build errors; they're expected
logger.warn(e);
}
ExecutionUtil.handleExecutionError(env, new ExecutionException(e));
} catch (java.util.concurrent.ExecutionException e) {
logger.warn(e);
if (e.getCause() instanceof FastBuildIncrementalCompileException) {
handleJavacError(env, project, label, buildService, (FastBuildIncrementalCompileException) e.getCause());
} else {
ExecutionUtil.handleExecutionError(env, new ExecutionException(e.getCause()));
}
}
// Fall-through for all exceptions. If no exception was thrown, we return from the try{} block.
context.endScope();
return false;
}
Aggregations