package com.intellij.flex.model.run; import com.intellij.flex.FlexCommonUtils; import com.intellij.flex.model.bc.JpsFlexBuildConfiguration; import com.intellij.flex.model.bc.JpsFlexDependencyEntry; import com.intellij.flex.model.bc.LinkageType; import com.intellij.flex.model.bc.OutputType; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.xmlb.annotations.Attribute; import com.intellij.util.xmlb.annotations.Transient; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsProject; import org.jetbrains.jps.model.java.JpsJavaExtensionService; import org.jetbrains.jps.util.JpsPathUtil; import java.util.Collections; public class JpsFlexUnitRunnerParameters extends JpsBCBasedRunnerParameters<JpsFlexUnitRunnerParameters> { public enum Scope { Method, Class, Package } public enum OutputLogLevel { Fatal("1000"), Error("8"), Warn("6"), Info("4"), Debug("2"), All("0"); private final String myFlexConstant; OutputLogLevel(String flexConstant) { myFlexConstant = flexConstant; } public String getFlexConstant() { return myFlexConstant; } } private @NotNull Scope myScope = Scope.Class; private @NotNull String myPackageName = ""; private @NotNull String myClassName = ""; private @NotNull String myMethodName = ""; private @Nullable OutputLogLevel myOutputLogLevel = null; //private @NotNull LauncherParameters myLauncherParameters = new LauncherParameters(); //private boolean myTrusted = true; //private String myEmulatorAdlOptions = ""; //private @NotNull AppDescriptorForEmulator myAppDescriptorForEmulator = AppDescriptorForEmulator.Android; private int myPort; private int mySocketPolicyPort; public JpsFlexUnitRunnerParameters() { } private JpsFlexUnitRunnerParameters(final JpsFlexUnitRunnerParameters original) { super(original); myScope = original.myScope; myPackageName = original.myPackageName; myClassName = original.myClassName; myMethodName = original.myMethodName; myOutputLogLevel = original.myOutputLogLevel; } @NotNull public JpsFlexUnitRunnerParameters createCopy() { return new JpsFlexUnitRunnerParameters(this); } public void applyChanges(@NotNull final JpsFlexUnitRunnerParameters modified) { super.applyChanges(modified); myScope = modified.myScope; myPackageName = modified.myPackageName; myClassName = modified.myClassName; myMethodName = modified.myMethodName; myOutputLogLevel = modified.myOutputLogLevel; } // ------------------ @NotNull @Attribute("scope") public Scope getScope() { return myScope; } public void setScope(@NotNull Scope scope) { myScope = scope; } @NotNull @Attribute("package_name") public String getPackageName() { return myPackageName; } public void setPackageName(@NotNull String packageName) { myPackageName = packageName; } @NotNull @Attribute("class_name") public String getClassName() { return myClassName; } public void setClassName(@NotNull String className) { myClassName = className; } @NotNull @Attribute("method_name") public String getMethodName() { return myMethodName; } public void setMethodName(@NotNull String methodName) { myMethodName = methodName; } @Nullable @Attribute("output_log_level") public OutputLogLevel getOutputLogLevel() { return myOutputLogLevel; } public void setOutputLogLevel(@Nullable OutputLogLevel outputLogLevel) { myOutputLogLevel = outputLogLevel; } @Transient public int getPort() { return myPort; } public void setPort(int port) { myPort = port; } @Transient public int getSocketPolicyPort() { return mySocketPolicyPort; } public void setSocketPolicyPort(int port) { mySocketPolicyPort = port; } @Nullable public JpsFlexBuildConfiguration getBC(final JpsProject project) { final JpsFlexBuildConfiguration bc = super.getBC(project); if (bc == null) return null; final JpsFlexBuildConfiguration overriddenBC = bc.getModule().getProperties().createTemporaryCopyForCompilation(bc); overriddenBC.setOutputType(OutputType.Application); overriddenBC.setMainClass(FlexCommonUtils.FLEX_UNIT_LAUNCHER); overriddenBC.setOutputFileName("_flexunit.swf"); final String testOutputUrl = StringUtil.notNullize(JpsJavaExtensionService.getInstance().getOutputUrl(bc.getModule(), true)); overriddenBC.setOutputFolder(JpsPathUtil.urlToPath(testOutputUrl)); overriddenBC.setUseHtmlWrapper(false); overriddenBC.setRLMs(Collections.emptyList()); overriddenBC.setCssFilesToCompile(Collections.emptyList()); overriddenBC.setSkipCompile(false); overriddenBC.getDependencies().setFrameworkLinkage(LinkageType.Merged); for (JpsFlexDependencyEntry entry : overriddenBC.getDependencies().getEntries()) { if (entry.getLinkageType() == LinkageType.External) { entry.setLinkageType(LinkageType.Merged); } } return overriddenBC; } }