use of org.moe.idea.ui.DeviceChooserDialog in project moe-ide-integration by multi-os-engine.
the class MOECompileTask method execute.
@Override
public boolean execute(CompileContext context) {
RunConfiguration c = context.getCompileScope().getUserData(CompileStepBeforeRun.RUN_CONFIGURATION);
if (!(c instanceof MOERunConfiguration)) {
return true;
}
final MOERunConfiguration runConfig = (MOERunConfiguration) c;
isOpenDialog = runConfig.getOpenDeploymentTargetDialog();
canceled = false;
runConfig.setCanceled(canceled);
final MOEToolWindow toolWindow = MOEToolWindow.getInstance(runConfig.getProject());
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
toolWindow.clear();
if (isOpenDialog) {
DeviceChooserDialog dialog = new DeviceChooserDialog(runConfig.module(), runConfig);
dialog.show();
if (dialog.getExitCode() != DialogWrapper.OK_EXIT_CODE) {
canceled = true;
runConfig.setCanceled(canceled);
}
isOpenDialog = false;
}
}
});
try {
while (isOpenDialog) {
Thread.sleep(100);
}
boolean isMaven = ModuleUtils.isMOEMavenModule(runConfig.module());
// Start progress
ProgressIndicator progress = context.getProgressIndicator();
context.getProgressIndicator().pushState();
progress.setText("Building MOE application");
if (canceled) {
toolWindow.balloon(MessageType.INFO, "BUILD CANCELED");
return true;
}
if (!isMaven) {
final CompileThread compileThread = new CompileThread(runConfig, context);
compileThread.start();
context.addMessage(CompilerMessageCategory.INFORMATION, "Building " + runConfig.moduleName(), null, -1, -1);
// Wait for completion
while (compileThread.isAlive() && !progress.isCanceled()) {
compileThread.join(1000);
}
if (compileThread.isAlive() && progress.isCanceled()) {
compileThread.interrupt();
compileThread.join(1000);
}
// Re-throw error
if (compileThread.throwable != null) {
throw compileThread.throwable;
}
// Show on failure
if (compileThread.returnCode != 0) {
if (!compileThread.canceled) {
toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed", null, -1, -1, toolWindow.getNavigatable());
} else {
toolWindow.balloon(MessageType.INFO, "BUILD CANCELED");
}
return false;
}
} else {
MOEMavenBuildTask mavenTask = new MOEMavenBuildTask(runConfig, "Building " + runConfig.moduleName(), true);
boolean result = mavenTask.runTask();
if (!result) {
toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed", null, -1, -1, toolWindow.getNavigatable());
return false;
}
}
} catch (Throwable t) {
toolWindow.balloon(MessageType.ERROR, "BUILD FAILED");
LOG.error("Failed to compile module", t);
context.addMessage(CompilerMessageCategory.ERROR, "Multi-OS Engine module build failed, an internal error occurred", null, -1, -1);
return false;
} finally {
context.getProgressIndicator().popState();
}
return true;
}
Aggregations