diff --git a/java/execution/openapi/src/com/intellij/execution/CantRunException.java b/platform/lang-api/src/com/intellij/execution/CantRunException.java
similarity index 100%
rename from java/execution/openapi/src/com/intellij/execution/CantRunException.java
rename to platform/lang-api/src/com/intellij/execution/CantRunException.java
diff --git a/platform/lang-api/src/com/intellij/execution/configurations/SimpleJavaParameters.java b/platform/lang-api/src/com/intellij/execution/configurations/SimpleJavaParameters.java
index 7e3b2962644b..0946e86544bd 100644
--- a/platform/lang-api/src/com/intellij/execution/configurations/SimpleJavaParameters.java
+++ b/platform/lang-api/src/com/intellij/execution/configurations/SimpleJavaParameters.java
@@ -16,6 +16,13 @@
package com.intellij.execution.configurations;
+import com.intellij.execution.ExecutionException;
+import com.intellij.execution.process.OSProcessHandler;
+import com.intellij.execution.process.ProcessTerminatedListener;
+import com.intellij.ide.DataManager;
+import com.intellij.openapi.actionSystem.PlatformDataKeys;
+import com.intellij.openapi.projectRoots.JavaSdkType;
+import com.intellij.openapi.projectRoots.JdkUtil;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.util.PathsList;
@@ -71,4 +78,20 @@ public class SimpleJavaParameters extends SimpleProgramParameters {
public void setCharset(final Charset charset) {
myCharset = charset;
}
+
+ public OSProcessHandler createOSProcessHandler() throws ExecutionException {
+ final Sdk sdk = getJdk();
+ assert sdk != null : "SDK should be defined";
+ final GeneralCommandLine commandLine = JdkUtil.setupJVMCommandLine(((JavaSdkType)sdk.getSdkType()).getVMExecutablePath(sdk), this,
+ JdkUtil.useDynamicClasspath(
+ PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext())));
+ final OSProcessHandler processHandler = new OSProcessHandler(commandLine.createProcess(), commandLine.getCommandLineString()) {
+ @Override
+ public Charset getCharset() {
+ return commandLine.getCharset();
+ }
+ };
+ ProcessTerminatedListener.attach(processHandler);
+ return processHandler;
+ }
}
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/RunSettingsEditor.form b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/RunSettingsEditor.form
index 376a80ddf339..8df8114f5fbc 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/RunSettingsEditor.form
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/RunSettingsEditor.form
@@ -229,7 +229,7 @@
-
+
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltCommandLineState.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltCommandLineState.java
index 44cc15511824..6d2be4a0e386 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltCommandLineState.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltCommandLineState.java
@@ -49,7 +49,7 @@ import java.util.List;
import static org.intellij.lang.xpath.xslt.run.XsltRunConfiguration.isEmpty;
-class XsltCommandLineState extends JavaCommandLineState {
+class XsltCommandLineState extends CommandLineState {
private static final Logger LOG = Logger.getInstance(XsltCommandLineState.class.getName());
public static final Key STATE = Key.create("STATE");
@@ -62,12 +62,12 @@ class XsltCommandLineState extends JavaCommandLineState {
public XsltCommandLineState(XsltRunConfiguration xsltRunConfiguration, ExecutionEnvironment env) {
super(env);
myXsltRunConfiguration = xsltRunConfiguration;
- final RunnerSettings settings = env.getRunnerSettings();
- myIsDebugger = settings != null && settings.getData() instanceof DebuggingRunnerData;
+ final ConfigurationPerRunnerSettings settings = env.getConfigurationSettings();
+ myIsDebugger = settings != null && "Debug".equals(settings.getRunnerId());
}
protected OSProcessHandler startProcess() throws ExecutionException {
- final OSProcessHandler osProcessHandler = super.startProcess();
+ final OSProcessHandler osProcessHandler = createJavaParameters().createOSProcessHandler();
osProcessHandler.putUserData(STATE, this);
osProcessHandler.addProcessListener(new MyProcessAdapter());
@@ -79,13 +79,13 @@ class XsltCommandLineState extends JavaCommandLineState {
return osProcessHandler;
}
- protected JavaParameters createJavaParameters() throws ExecutionException {
+ protected SimpleJavaParameters createJavaParameters() throws ExecutionException {
final Sdk jdk = myXsltRunConfiguration.getEffectiveJDK();
if (jdk == null) {
throw CantRunException.noJdkConfigured();
}
- final JavaParameters parameters = new JavaParameters();
+ final SimpleJavaParameters parameters = new SimpleJavaParameters();
parameters.setJdk(jdk);
if (myXsltRunConfiguration.getJdkChoice() == XsltRunConfiguration.JdkChoice.FROM_MODULE) {
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java
index c2d55aa28ee9..cf418924b5cd 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfiguration.java
@@ -33,8 +33,8 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.projectRoots.ProjectJdkTable;
-import com.intellij.openapi.projectRoots.Sdk;
+import com.intellij.openapi.project.ProjectBundle;
+import com.intellij.openapi.projectRoots.*;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
@@ -47,6 +47,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlDocument;
import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
+import com.intellij.util.SystemProperties;
import org.intellij.lang.xpath.xslt.XsltSupport;
import org.intellij.lang.xpath.xslt.associations.FileAssociationsManager;
import org.jdom.Element;
@@ -439,8 +440,27 @@ public final class XsltRunConfiguration extends RunConfigurationBase implements
myJdkChoice = jdkChoice;
}
+ private static Sdk ourDefaultSdk;
+
+ private static synchronized Sdk getDefaultSdk() {
+ if (ourDefaultSdk == null) {
+ final String jdkHome = SystemProperties.getJavaHome();
+ final String versionName = ProjectBundle.message("sdk.java.name.template", SystemProperties.getJavaVersion());
+ Sdk sdk = ProjectJdkTable.getInstance().createSdk(versionName, new SimpleJavaSdkType());
+ SdkModificator modificator = sdk.getSdkModificator();
+ modificator.setHomePath(jdkHome);
+ modificator.commitChanges();
+ ourDefaultSdk = sdk;
+ }
+
+ return ourDefaultSdk;
+ }
+
@Nullable
public Sdk getEffectiveJDK() {
+ if (!XsltRunSettingsEditor.ALLOW_CHOOSING_SDK) {
+ return getDefaultSdk();
+ }
if (myJdkChoice == JdkChoice.JDK) {
return myJdk != null ? ProjectJdkTable.getInstance().findJdk(myJdk) : null;
}
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunSettingsEditor.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunSettingsEditor.java
index 9abbdcc5a97c..cedccc39fee9 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunSettingsEditor.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunSettingsEditor.java
@@ -64,6 +64,7 @@ import java.util.*;
import java.util.List;
class XsltRunSettingsEditor extends SettingsEditor {
+ static final boolean ALLOW_CHOOSING_SDK = !(StdFileTypes.JAVA instanceof PlainTextFileType);
private final Project myProject;
private Editor myEditor;
@@ -124,6 +125,7 @@ class XsltRunSettingsEditor extends SettingsEditor {
private ComboBox myModule;
private ComboBox myJDK;
private ComboBox myFileType;
+ private JPanel myClasspathAndJDKPanel;
private final AnyXMLDescriptor myXmlDescriptor;
private final FileChooserDescriptor myXsltDescriptor;
@@ -228,6 +230,7 @@ class XsltRunSettingsEditor extends SettingsEditor {
myShowInConsole.addItemListener(outputStateListener);
myShowInStdout.addItemListener(outputStateListener);
mySaveToFile.addItemListener(outputStateListener);
+ myClasspathAndJDKPanel.setVisible(ALLOW_CHOOSING_SDK);
updateOutputState();
myFileType.setRenderer(new FileTypeRenderer() {
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunner.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunner.java
new file mode 100644
index 000000000000..2017cf5ca350
--- /dev/null
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunner.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2000-2010 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.intellij.lang.xpath.xslt.run;
+
+import com.intellij.execution.configurations.RunProfile;
+import com.intellij.execution.executors.DefaultRunExecutor;
+import com.intellij.execution.runners.DefaultProgramRunner;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * User: Maxim.Mossienko
+ * Date: 26.06.2010
+ * Time: 19:59:57
+ */
+public class XsltRunner extends DefaultProgramRunner {
+ @NotNull
+ public String getRunnerId() {
+ return "XsltProgramRunner";
+ }
+
+ public boolean canRun(@NotNull final String executorId, @NotNull final RunProfile profile) {
+ return DefaultRunExecutor.EXECUTOR_ID.equals(executorId) &&
+ profile instanceof XsltRunConfiguration &&
+ !XsltRunSettingsEditor.ALLOW_CHOOSING_SDK; // default java runner will run us when we have Java & can choose sdk
+ }
+}
diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunnerExtension.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunnerExtension.java
index 5d85f19fd53e..fac3bdda80d5 100644
--- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunnerExtension.java
+++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunnerExtension.java
@@ -19,7 +19,7 @@ package org.intellij.lang.xpath.xslt.run;
import com.intellij.diagnostic.logging.AdditionalTabComponent;
import com.intellij.execution.CantRunException;
import com.intellij.execution.configurations.AdditionalTabComponentManager;
-import com.intellij.execution.configurations.JavaParameters;
+import com.intellij.execution.configurations.SimpleJavaParameters;
import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.process.ProcessListener;
import com.intellij.openapi.extensions.ExtensionPointName;
@@ -47,7 +47,7 @@ public abstract class XsltRunnerExtension {
*/
public abstract boolean createTabs(Project project, AdditionalTabComponentManager manager, AdditionalTabComponent outputConsole, ProcessHandler process);
- public abstract void patchParameters(JavaParameters parameters, XsltRunConfiguration xsltCommandLineState, UserDataHolder extensionData) throws CantRunException;
+ public abstract void patchParameters(SimpleJavaParameters parameters, XsltRunConfiguration xsltCommandLineState, UserDataHolder extensionData) throws CantRunException;
protected abstract boolean supports(XsltRunConfiguration config, boolean debugger);
diff --git a/plugins/xpath/xpath-view/src/META-INF/plugin.xml b/plugins/xpath/xpath-view/src/META-INF/plugin.xml
index 1ea90b0b9cb0..f8d0cf860e6a 100644
--- a/plugins/xpath/xpath-view/src/META-INF/plugin.xml
+++ b/plugins/xpath/xpath-view/src/META-INF/plugin.xml
@@ -50,6 +50,7 @@
+