diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSBrowserProgramRunner.java b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSBrowserProgramRunner.java index 775c4f8df48..53a8034f951 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSBrowserProgramRunner.java +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSBrowserProgramRunner.java @@ -28,7 +28,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFileManager; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.plugin.actions.TranslateToJsAction; /** * @author Pavel Talanov @@ -46,10 +45,10 @@ public final class K2JSBrowserProgramRunner extends GenericProgramRunner { try { K2JSConfigurationSettings configurationSettings = getSettings(state); try { - TranslateToJsAction.doPerform(project); + K2JSRunnerUtils.translateAndSave(project, configurationSettings.getGeneratedFilePath()); } catch (Throwable e) { - TranslateToJsAction.notifyFailure(e); + K2JSRunnerUtils.notifyFailure(e); return null; } openBrowser(configurationSettings); @@ -61,7 +60,10 @@ public final class K2JSBrowserProgramRunner extends GenericProgramRunner { } private static void openBrowser(@NotNull K2JSConfigurationSettings configurationSettings) { - String filePath = configurationSettings.getFilePath(); + if (!configurationSettings.isShouldOpenInBrowserAfterTranslation()) { + return; + } + String filePath = configurationSettings.getPageToOpenFilePath(); String url = VirtualFileManager.constructUrl(LocalFileSystem.PROTOCOL, filePath); BrowsersConfiguration.launchBrowser(configurationSettings.getBrowserFamily(), url); } diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSConfigurationSettings.java b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSConfigurationSettings.java index b92fb805c63..397a35e3a1e 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSConfigurationSettings.java +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSConfigurationSettings.java @@ -17,19 +17,33 @@ package org.jetbrains.jet.plugin.k2jsrun; import com.intellij.ide.browsers.BrowsersConfiguration; +import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; /** * @author Pavel Talanov */ -public class K2JSConfigurationSettings { +public final class K2JSConfigurationSettings { @NotNull - private String filePath = ""; + private String pageToOpenFilePath = ""; + + @NotNull + private String generatedFilePath; + + private boolean shouldOpenInBrowserAfterTranslation = false; @NotNull private BrowsersConfiguration.BrowserFamily browserFamily = BrowsersConfiguration.getInstance().getActiveBrowsers().get(0); + public K2JSConfigurationSettings(@NotNull Project project) { + generatedFilePath = project.getBasePath() + "/generated.js"; + } + + public K2JSConfigurationSettings() { + generatedFilePath = ""; + } + @NotNull public BrowsersConfiguration.BrowserFamily getBrowserFamily() { return browserFamily; @@ -40,11 +54,28 @@ public class K2JSConfigurationSettings { } @NotNull - public String getFilePath() { - return filePath; + public String getPageToOpenFilePath() { + return pageToOpenFilePath; } - public void setFilePath(@NotNull String filePath) { - this.filePath = filePath; + public void setPageToOpenFilePath(@NotNull String pageToOpenFilePath) { + this.pageToOpenFilePath = pageToOpenFilePath; + } + + @NotNull + public String getGeneratedFilePath() { + return generatedFilePath; + } + + public void setGeneratedFilePath(@NotNull String generatedFilePath) { + this.generatedFilePath = generatedFilePath; + } + + public boolean isShouldOpenInBrowserAfterTranslation() { + return shouldOpenInBrowserAfterTranslation; + } + + public void setShouldOpenInBrowserAfterTranslation(boolean shouldOpenInBrowserAfterTranslation) { + this.shouldOpenInBrowserAfterTranslation = shouldOpenInBrowserAfterTranslation; } } diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfiguration.java b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfiguration.java index ee220c3634c..9ad75630352 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfiguration.java +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfiguration.java @@ -42,11 +42,11 @@ import java.util.Collection; /** * @author Pavel Talanov */ -public class K2JSRunConfiguration extends ModuleBasedConfiguration +public final class K2JSRunConfiguration extends ModuleBasedConfiguration implements RunConfigurationWithSuppressedDefaultRunAction { @NotNull - private K2JSConfigurationSettings settings = new K2JSConfigurationSettings(); + private K2JSConfigurationSettings settings = new K2JSConfigurationSettings(getProject()); public K2JSRunConfiguration(String name, RunConfigurationModule runConfigurationModule, ConfigurationFactory factory) { super(name, runConfigurationModule, factory); diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.form b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.form index 4cfeec10fa5..574d1f33f9c 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.form +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.form @@ -8,7 +8,7 @@ - + @@ -16,15 +16,15 @@ - + - + - + @@ -32,7 +32,7 @@ - + @@ -41,7 +41,29 @@ - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.java b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.java index 6b0c95721dd..2f8a66cbe43 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.java +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JSRunConfigurationEditor.java @@ -26,10 +26,13 @@ import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.TextFieldWithBrowseButton; -import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName; /** * @author Pavel Talanov @@ -37,8 +40,10 @@ import javax.swing.*; public final class K2JSRunConfigurationEditor extends SettingsEditor { private JPanel mainPanel; - private TextFieldWithBrowseButton chooseFile; + private TextFieldWithBrowseButton htmlChooseFile; private JComboBox browserComboBox; + private JCheckBox openInBrowserCheckBox; + private TextFieldWithBrowseButton generatedChooseFile; @NotNull private final Project project; @@ -47,31 +52,60 @@ public final class K2JSRunConfigurationEditor extends SettingsEditor allVirtualFiles = getAllProjectVirtualFiles(project); List kotlinFiles = getJetFiles(allVirtualFiles, project); - String outputPath = getOutputPath(JetMainDetector.getFileWithMain(kotlinFiles)); + String outputFilePath = constructPathToGeneratedFile(project, outputDirPath); K2JSTranslator.translateWithCallToMainAndSaveToFile(kotlinFiles, - outputPath, + outputFilePath, project); - notifySuccess(outputPath); + notifySuccess(outputDirPath); + } + + private static String constructPathToGeneratedFile(Project project, String outputDirPath) { + return outputDirPath + "/" + project.getName() + ".js"; } @NotNull @@ -120,26 +96,4 @@ public final class TranslateToJsAction extends AnAction { } return kotlinFiles; } - - - @NotNull - private static String getOutputPath(@Nullable PsiFile psiFile) { - if (psiFile == null) { - throw new AssertionError("Main was not detected."); - } - VirtualFile virtualFile = psiFile.getVirtualFile(); - assert virtualFile != null : "Internal error: Psi file should correspond to actual virtual file"; - String originalFilePath = virtualFile.getPath(); - - //TODO: make platform independent - String pathToDir = originalFilePath.substring(0, originalFilePath.lastIndexOf("/") + 1); - String generatedFileName = ((JetFile)psiFile).getNamespaceHeader().getName() + ".js"; - return pathToDir + generatedFileName; - } - - @Override - public void update(AnActionEvent e) { - // Editor editor = e.getData(PlatformDataKeys.EDITOR); - // e.getPresentation().setEnabled(editor != null); - } } diff --git a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JsRunConfigurationType.java b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JsRunConfigurationType.java index c882aa85220..13fd46c3e3c 100644 --- a/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JsRunConfigurationType.java +++ b/idea/src/org/jetbrains/jet/plugin/k2jsrun/K2JsRunConfigurationType.java @@ -29,7 +29,7 @@ public final class K2JSRunConfigurationType extends ConfigurationTypeBase { } public K2JSRunConfigurationType() { - super("K2JSConfigurationType", "K2JS", "Kotlin to Javascript", JetFileType.INSTANCE.getIcon()); + super("K2JSConfigurationType", "K2JS", "Kotlin to Javascript configuration", JetFileType.INSTANCE.getIcon()); addFactory(new K2JSConfigurationFactory()); }