package com.intellij.jps.flex.build;
import com.intellij.execution.process.BaseOSProcessHandler;
import com.intellij.execution.process.ProcessEvent;
import com.intellij.execution.process.ProcessListener;
import com.intellij.flex.FlexCommonUtils;
import com.intellij.openapi.util.Key;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.incremental.CompileContext;
import java.nio.charset.Charset;
public class FlexCompilerProcessHandler extends BaseOSProcessHandler {
private final FlexCompilerProcessHandler.MyProcessListener myListener;
public FlexCompilerProcessHandler(final CompileContext context,
final Process process,
final boolean asc20,
final String compilerName,
@NotNull String commandLine) {
super(process, commandLine, Charset.forName(FlexCommonUtils.SDK_TOOLS_ENCODING));
myListener = new MyProcessListener(context, asc20, compilerName);
addProcessListener(myListener);
}
public boolean isCompilationFailed() {
return myListener.isCompilationFailed();
}
public boolean isCancelled() {
return myListener.isCompilationCancelled();
}
private class MyProcessListener extends CompilerMessageHandlerBase implements ProcessListener {
public MyProcessListener(final CompileContext context, final boolean asc20, final String compilerName) {
super(context, asc20, compilerName);
}
public void startNotified(final ProcessEvent event) {
}
public void onTextAvailable(final ProcessEvent event, final Key outputType) {
handleText(event.getText());
}
public void processWillTerminate(final ProcessEvent event, final boolean willBeDestroyed) {
}
public void processTerminated(final ProcessEvent event) {
registerCompilationFinished();
}
protected void onCancelled() {
destroyProcess();
}
}
}