package com.intellij.lang.javascript.flex.build; import com.intellij.flex.model.bc.OutputType; import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfiguration; import com.intellij.openapi.compiler.CompilerMessageCategory; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.Collections; import java.util.List; public class BuiltInCompilationTask extends FlexCompilationTask { private final BuiltInFlexCompilerHandler myBuiltInFlexCompilerHandler; private BuiltInFlexCompilerHandler.Listener myListener; public BuiltInCompilationTask(final @NotNull Module module, final @NotNull FlexBuildConfiguration bc, final @NotNull Collection<FlexBuildConfiguration> dependencies) { super(module, bc, dependencies); myBuiltInFlexCompilerHandler = FlexCompilerHandler.getInstance(module.getProject()).getBuiltInFlexCompilerHandler(); } protected void doStart(final FlexCompilationManager compilationManager) { final String plainCommand = StringUtil.join(buildCommand(), s -> s.indexOf(' ') >= 0 && !(s.startsWith("\"") && s.endsWith("\"")) ? '\"' + s + '\"' : s, " "); compilationManager.addMessage(this, CompilerMessageCategory.INFORMATION, plainCommand, null, -1, -1); myListener = createListener(compilationManager); myBuiltInFlexCompilerHandler.sendCompilationCommand(plainCommand, myListener); } private List<String> buildCommand() { final boolean app = myBC.getOutputType() != OutputType.Library; final List<String> compilerCommand = Collections.singletonList(app ? "mxmlc" : "compc"); return FlexCompilationUtils.buildCommand(compilerCommand, getConfigFiles(), myModule, myBC); } private BuiltInFlexCompilerHandler.Listener createListener(final FlexCompilationManager compilationManager) { return new BuiltInFlexCompilerHandler.Listener() { public void textAvailable(final String text) { final boolean ok = FlexCompilationUtils.handleCompilerOutput(compilationManager, BuiltInCompilationTask.this, text); if (!ok) { myCompilationFailed = true; } } public void compilationFinished() { myFinished = true; } }; } protected void doCancel() { if (myListener != null) { myBuiltInFlexCompilerHandler.removeListener(myListener); } } }