use of com.google.idea.blaze.base.scope.output.StatusOutput in project intellij by bazelbuild.
the class BlazeBeforeRunCommandHelper method runBlazeBuild.
/**
* Kicks off the blaze build task, returning a corresponding {@link ListenableFuture}.
*/
public static ListenableFuture<BuildResult> runBlazeBuild(BlazeCommandRunConfiguration configuration, BuildResultHelper buildResultHelper, List<String> requiredExtraBlazeFlags, List<String> overridableExtraBlazeFlags, String progressMessage) {
Project project = configuration.getProject();
BlazeCommandRunConfigurationCommonState handlerState = (BlazeCommandRunConfigurationCommonState) configuration.getHandler().getState();
WorkspaceRoot workspaceRoot = WorkspaceRoot.fromProject(project);
ProjectViewSet projectViewSet = ProjectViewManager.getInstance(project).getProjectViewSet();
String binaryPath = handlerState.getBlazeBinaryState().getBlazeBinary() != null ? handlerState.getBlazeBinaryState().getBlazeBinary() : Blaze.getBuildSystemProvider(project).getBinaryPath();
BlazeConsolePopupBehavior consolePopupBehavior = BlazeUserSettings.getInstance().getSuppressConsoleForRunAction() ? BlazeConsolePopupBehavior.NEVER : BlazeConsolePopupBehavior.ALWAYS;
return ProgressiveTaskWithProgressIndicator.builder(project).submitTaskWithResult(new ScopedTask<BuildResult>() {
@Override
protected BuildResult execute(BlazeContext context) {
context.push(new IssuesScope(project, true)).push(new BlazeConsoleScope.Builder(project).setPopupBehavior(consolePopupBehavior).addConsoleFilters(new IssueOutputFilter(project, workspaceRoot, BlazeInvocationContext.NonSync, true)).build());
context.output(new StatusOutput(progressMessage));
BlazeCommand.Builder command = BlazeCommand.builder(binaryPath, BlazeCommandName.BUILD).addTargets(configuration.getTarget()).addBlazeFlags(overridableExtraBlazeFlags).addBlazeFlags(BlazeFlags.blazeFlags(project, projectViewSet, BlazeCommandName.BUILD, BlazeInvocationContext.NonSync)).addBlazeFlags(handlerState.getBlazeFlagsState().getExpandedFlags()).addBlazeFlags(requiredExtraBlazeFlags).addBlazeFlags(buildResultHelper.getBuildFlags());
int exitCode = ExternalTask.builder(workspaceRoot).addBlazeCommand(command.build()).context(context).stderr(LineProcessingOutputStream.of(BlazeConsoleLineProcessorProvider.getAllStderrLineProcessors(context))).build().run();
return BuildResult.fromExitCode(exitCode);
}
});
}
use of com.google.idea.blaze.base.scope.output.StatusOutput in project intellij by bazelbuild.
the class FileCaches method onSync.
/**
* Call on sync. Updates the file cache and deletes any old files.
*/
public static void onSync(Project project, BlazeContext context, ProjectViewSet projectViewSet, BlazeProjectData blazeProjectData, BlazeSyncParams.SyncMode syncMode) {
for (FileCache fileCache : FileCache.EP_NAME.getExtensions()) {
Scope.push(context, childContext -> {
childContext.push(new TimingScope(fileCache.getName(), EventType.Other));
childContext.output(new StatusOutput("Updating " + fileCache.getName() + "..."));
fileCache.onSync(project, context, projectViewSet, blazeProjectData, syncMode);
});
}
LocalFileSystem.getInstance().refresh(true);
}
use of com.google.idea.blaze.base.scope.output.StatusOutput in project intellij by bazelbuild.
the class NewBlazePackageAction method actionPerformedInBlazeProject.
@Override
protected void actionPerformedInBlazeProject(Project project, AnActionEvent event) {
final IdeView view = event.getData(LangDataKeys.IDE_VIEW);
Scope.root(context -> {
if (view == null || project == null) {
return;
}
PsiDirectory directory = getOrChooseDirectory(project, view);
if (directory == null) {
return;
}
NewBlazePackageDialog newBlazePackageDialog = new NewBlazePackageDialog(project, directory);
boolean isOk = newBlazePackageDialog.showAndGet();
if (!isOk) {
return;
}
final Label newRule = newBlazePackageDialog.getNewRule();
final Kind newRuleKind = newBlazePackageDialog.getNewRuleKind();
// If we returned OK, we should have a non null result
logger.assertTrue(newRule != null);
logger.assertTrue(newRuleKind != null);
context.output(new StatusOutput(String.format("Setting up a new %s package", Blaze.buildSystemName(project))));
Optional<VirtualFile> virtualFile = createPackageOnDisk(project, context, newRule, newRuleKind);
if (!virtualFile.isPresent()) {
return;
}
PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile.get());
view.selectElement(psiFile);
});
}
use of com.google.idea.blaze.base.scope.output.StatusOutput in project intellij by bazelbuild.
the class BlazeSyncTask method updateProject.
private boolean updateProject(BlazeContext parentContext, ProjectViewSet projectViewSet, BlazeVersionData blazeVersionData, DirectoryStructure directoryStructure, @Nullable BlazeProjectData oldBlazeProjectData, BlazeProjectData newBlazeProjectData) {
return Scope.push(parentContext, context -> {
context.push(new TimingScope("UpdateProjectStructure", EventType.Other));
context.output(new StatusOutput("Committing project structure..."));
try {
Transactions.submitWriteActionTransactionAndWait(() -> ProjectRootManagerEx.getInstanceEx(this.project).mergeRootsChangesDuring(() -> updateProjectStructure(context, importSettings, projectViewSet, blazeVersionData, directoryStructure, newBlazeProjectData, oldBlazeProjectData)));
} catch (ProcessCanceledException e) {
context.setCancelled();
throw e;
} catch (Throwable e) {
IssueOutput.error("Internal error. Error: " + e).submit(context);
logger.error(e);
return false;
}
BlazeProjectDataManagerImpl.getImpl(project).saveProject(importSettings, newBlazeProjectData);
return true;
});
}
use of com.google.idea.blaze.base.scope.output.StatusOutput in project intellij by bazelbuild.
the class BlazeSyncTask method run.
@Override
public void run(final ProgressIndicator indicator) {
Scope.root((BlazeContext context) -> {
context.push(new ExperimentScope());
if (showPerformanceWarnings) {
context.push(new PerformanceWarningScope());
}
context.push(new ProgressIndicatorScope(indicator));
if (!syncParams.backgroundSync) {
context.push(new BlazeConsoleScope.Builder(project, indicator).setPopupBehavior(BlazeUserSettings.getInstance().getShowBlazeConsoleOnSync()).addConsoleFilters(new IssueOutputFilter(project, workspaceRoot, BlazeInvocationContext.Sync, true)).build()).push(new IssuesScope(project, true)).push(new IdeaLogScope()).push(new NotificationScope(project, "Sync", "Sync project", "Sync successful", "Sync failed"));
}
context.output(new StatusOutput(String.format("Syncing project: %s...", syncParams)));
syncProject(context);
});
}
Aggregations