package com.intellij.flex.model.run; import com.intellij.flex.FlexCommonUtils; import com.intellij.flex.model.bc.*; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsProject; import java.util.Collections; public class JpsFlashRunnerParameters extends JpsBCBasedRunnerParameters<JpsFlashRunnerParameters> { private boolean myOverrideMainClass = false; private @NotNull String myOverriddenMainClass = ""; private @NotNull String myOverriddenOutputFileName = ""; public JpsFlashRunnerParameters() { } private JpsFlashRunnerParameters(final JpsFlashRunnerParameters original) { myOverrideMainClass = original.myOverrideMainClass; myOverriddenMainClass = original.myOverriddenMainClass; myOverriddenOutputFileName = original.myOverriddenOutputFileName; } @NotNull public JpsFlashRunnerParameters createCopy() { return new JpsFlashRunnerParameters(this); } public void applyChanges(@NotNull final JpsFlashRunnerParameters modified) { super.applyChanges(modified); myOverrideMainClass = modified.myOverrideMainClass; myOverriddenMainClass = modified.myOverriddenMainClass; myOverriddenOutputFileName = modified.myOverriddenOutputFileName; } // ----------------------- public boolean isOverrideMainClass() { return myOverrideMainClass; } public void setOverrideMainClass(final boolean overrideMainClass) { myOverrideMainClass = overrideMainClass; } @NotNull public String getOverriddenMainClass() { return myOverriddenMainClass; } public void setOverriddenMainClass(@NotNull final String overriddenMainClass) { myOverriddenMainClass = overriddenMainClass; } @NotNull public String getOverriddenOutputFileName() { return myOverriddenOutputFileName; } public void setOverriddenOutputFileName(@NotNull final String overriddenOutputFileName) { myOverriddenOutputFileName = overriddenOutputFileName; } @Nullable public JpsFlexBuildConfiguration getBC(final JpsProject project) { final JpsFlexBuildConfiguration origBC = super.getBC(project); if (myOverrideMainClass && origBC != null) { final JpsFlexBuildConfiguration overriddenBC = origBC.getModule().getProperties().createTemporaryCopyForCompilation(origBC); overriddenBC.setOutputType(OutputType.Application); overriddenBC.setMainClass(myOverriddenMainClass); overriddenBC.setOutputFileName(myOverriddenOutputFileName); overriddenBC.setRLMs(Collections.emptyList()); if (origBC.getOutputType() != OutputType.Application) { overriddenBC.setUseHtmlWrapper(false); overriddenBC.setCssFilesToCompile(Collections.emptyList()); overriddenBC.getDependencies().setFrameworkLinkage(LinkageType.Merged); for (JpsFlexDependencyEntry entry : overriddenBC.getDependencies().getEntries()) { if (entry.getLinkageType() == LinkageType.External) { entry.setLinkageType(LinkageType.Merged); } } overriddenBC.getAirDesktopPackagingOptions().setUseGeneratedDescriptor(true); final JpsAndroidPackagingOptions androidOptions = overriddenBC.getAndroidPackagingOptions(); androidOptions.setEnabled(true); androidOptions.setUseGeneratedDescriptor(true); androidOptions.getSigningOptions().setUseTempCertificate(true); // impossible without extra user input: certificate and provisioning profile overriddenBC.getIosPackagingOptions().setEnabled(false); } if (FlexCommonUtils.canHaveResourceFiles(overriddenBC.getNature()) && !FlexCommonUtils.canHaveResourceFiles(origBC.getNature())) { overriddenBC.getCompilerOptions().setResourceFilesMode(JpsFlexCompilerOptions.ResourceFilesMode.None); } overriddenBC.getAndroidPackagingOptions().setPackageFileName(FileUtil.getNameWithoutExtension(myOverriddenOutputFileName)); overriddenBC.getIosPackagingOptions().setPackageFileName(FileUtil.getNameWithoutExtension(myOverriddenOutputFileName)); return overriddenBC; } return origBC; } }