From b38409f29e11277e538fce3fc062ca46392dfdf1 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Wed, 26 Sep 2012 18:01:14 +0400 Subject: [PATCH] Python remote interpreters refactored. Common code moved to remote-sdk-api and remote-sdk-impl modules. --- .../AbstractPythonRunConfigurationParams.java | 6 +++--- .../python/run/PyPluginCommonOptionsForm.java | 6 +++--- python/python-ide.iml | 1 + python/python-tests.iml | 1 + python/python.iml | 1 + .../python/console/PydevConsoleRunner.java | 16 +++++++------- .../python/debugger/PyDebugProcess.java | 11 +++++----- .../packaging/PyPackageManagerImpl.java | 20 +++++++++--------- .../run/AbstractPythonRunConfiguration.java | 12 +++++------ .../python/run/PythonCommandLineState.java | 10 ++++----- .../python/sdk/CreateVirtualEnvDialog.java | 5 +++-- .../python/sdk/PyRemoteSdkFlavor.java | 2 +- .../com/jetbrains/python/sdk/PySdkUtil.java | 4 ++-- .../python/sdk/PythonSdkAdditionalData.java | 21 +++++++++---------- .../jetbrains/python/sdk/PythonSdkType.java | 7 ++++--- 15 files changed, 63 insertions(+), 60 deletions(-) diff --git a/python/openapi/src/com/jetbrains/python/run/AbstractPythonRunConfigurationParams.java b/python/openapi/src/com/jetbrains/python/run/AbstractPythonRunConfigurationParams.java index fad1f47b3980..7a0f0bd6d9af 100644 --- a/python/openapi/src/com/jetbrains/python/run/AbstractPythonRunConfigurationParams.java +++ b/python/openapi/src/com/jetbrains/python/run/AbstractPythonRunConfigurationParams.java @@ -1,7 +1,7 @@ package com.jetbrains.python.run; import com.intellij.openapi.module.Module; -import com.jetbrains.python.debugger.remote.PyPathMappingSettings; +import com.intellij.util.PathMappingSettings; import org.jetbrains.annotations.Nullable; import java.util.Map; @@ -41,7 +41,7 @@ public interface AbstractPythonRunConfigurationParams { void setEnvs(final Map envs); @Nullable - PyPathMappingSettings getMappingSettings(); + PathMappingSettings getMappingSettings(); - void setMappingSettings(@Nullable PyPathMappingSettings mappingSettings); + void setMappingSettings(@Nullable PathMappingSettings mappingSettings); } diff --git a/python/pluginSrc/com/jetbrains/python/run/PyPluginCommonOptionsForm.java b/python/pluginSrc/com/jetbrains/python/run/PyPluginCommonOptionsForm.java index d36f7ae00385..6639607101a8 100644 --- a/python/pluginSrc/com/jetbrains/python/run/PyPluginCommonOptionsForm.java +++ b/python/pluginSrc/com/jetbrains/python/run/PyPluginCommonOptionsForm.java @@ -10,7 +10,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.ui.CollectionComboBoxModel; import com.intellij.ui.RawCommandLineEditor; import com.intellij.ui.components.JBLabel; -import com.jetbrains.python.debugger.remote.PyPathMappingSettings; +import com.intellij.util.PathMappingSettings; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.Nullable; @@ -158,12 +158,12 @@ public class PyPluginCommonOptionsForm implements AbstractPyCommonOptionsForm { } @Override - public PyPathMappingSettings getMappingSettings() { + public PathMappingSettings getMappingSettings() { return null; //TODO: implement for plugin } @Override - public void setMappingSettings(@Nullable PyPathMappingSettings mappingSettings) { + public void setMappingSettings(@Nullable PathMappingSettings mappingSettings) { } @Override diff --git a/python/python-ide.iml b/python/python-ide.iml index 08470fc95b07..dae2f6f5d82c 100644 --- a/python/python-ide.iml +++ b/python/python-ide.iml @@ -22,6 +22,7 @@ + diff --git a/python/python-tests.iml b/python/python-tests.iml index a50bd7957267..6e5e05ec6d6c 100644 --- a/python/python-tests.iml +++ b/python/python-tests.iml @@ -23,6 +23,7 @@ + diff --git a/python/python.iml b/python/python.iml index e1a273bae6d0..6ab1c023abe7 100644 --- a/python/python.iml +++ b/python/python.iml @@ -37,6 +37,7 @@ + diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java index f9c4580db6e1..83eef1044d5c 100644 --- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java +++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java @@ -42,15 +42,15 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.IJSwingUtilities; import com.intellij.util.net.NetUtils; import com.jetbrains.django.run.Runner; +import com.jetbrains.plugins.remotesdk.RemoteInterpreterException; +import com.jetbrains.plugins.remotesdk.RemoteSdkData; +import com.jetbrains.plugins.remotesdk.RemoteSshProcess; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.console.completion.PydevConsoleElement; import com.jetbrains.python.console.parsing.PythonConsoleData; import com.jetbrains.python.console.pydev.ConsoleCommunication; import com.jetbrains.python.debugger.PySourcePosition; -import com.jetbrains.python.remote.PyRemoteInterpreterException; -import com.jetbrains.python.remote.PyRemoteSshProcess; import com.jetbrains.python.remote.PythonRemoteInterpreterManager; -import com.jetbrains.python.remote.PythonRemoteSdkAdditionalData; import com.jetbrains.python.run.PythonCommandLineState; import com.jetbrains.python.run.PythonTracebackFilter; import com.jetbrains.python.sdk.PySdkUtil; @@ -215,7 +215,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory envs) - throws PyRemoteInterpreterException, ExecutionException { - PythonRemoteSdkAdditionalData data = (PythonRemoteSdkAdditionalData)mySdk.getSdkAdditionalData(); + throws RemoteInterpreterException, ExecutionException { + RemoteSdkData data = (RemoteSdkData)mySdk.getSdkAdditionalData(); GeneralCommandLine commandLine = new GeneralCommandLine(command); commandLine.setEnvParams(envs); - commandLine.getParametersList().set(1, PythonRemoteInterpreterManager.toSystemDependent(new File(data.getPyCharmHelpersPath(), + commandLine.getParametersList().set(1, PythonRemoteInterpreterManager.toSystemDependent(new File(data.getHelpersPath(), PYDEV_PYDEVCONSOLE_PY) .getPath(), PySourcePosition.isWindowsPath( @@ -253,7 +253,7 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory remoteSocket = remoteProcessHandler.obtainRemoteSocket(); remoteProcessHandler.addRemoteForwarding(remoteSocket.getSecond(), localPort); diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index e5103b9f86c4..d065036e928e 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -34,15 +34,15 @@ import com.intellij.util.Function; import com.intellij.util.SystemProperties; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.net.HttpConfigurable; +import com.jetbrains.plugins.remotesdk.RemoteFile; +import com.jetbrains.plugins.remotesdk.RemoteInterpreterException; +import com.jetbrains.plugins.remotesdk.RemoteSdkData; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyListLiteralExpression; import com.jetbrains.python.psi.PyStringLiteralExpression; -import com.jetbrains.python.remote.PyRemoteInterpreterException; -import com.jetbrains.python.remote.PythonRemoteInterpreterManager; -import com.jetbrains.python.remote.PythonRemoteSdkAdditionalData; -import com.jetbrains.python.remote.RemoteFile; +import com.jetbrains.python.remote.*; import com.jetbrains.python.sdk.PySdkUtil; import com.jetbrains.python.sdk.PythonSdkType; import org.jetbrains.annotations.NotNull; @@ -609,9 +609,9 @@ public class PyPackageManagerImpl extends PyPackageManager { private String getHelperPath(String helper) { String helperPath; final SdkAdditionalData sdkData = mySdk.getSdkAdditionalData(); - if (sdkData instanceof PythonRemoteSdkAdditionalData) { - final PythonRemoteSdkAdditionalData remoteSdkData = (PythonRemoteSdkAdditionalData)sdkData; - helperPath = new RemoteFile(remoteSdkData.getPyCharmHelpersPath(), + if (sdkData instanceof RemoteSdkData) { + final RemoteSdkData remoteSdkData = (RemoteSdkData)sdkData; + helperPath = new RemoteFile(remoteSdkData.getHelpersPath(), helper).getPath(); } else { @@ -626,8 +626,8 @@ public class PyPackageManagerImpl extends PyPackageManager { @Nullable String parentDir) throws PyExternalProcessException { final SdkAdditionalData sdkData = mySdk.getSdkAdditionalData(); - if (sdkData instanceof PythonRemoteSdkAdditionalData) { - final PythonRemoteSdkAdditionalData remoteSdkData = (PythonRemoteSdkAdditionalData)sdkData; + if (sdkData instanceof RemoteSdkData) { + final RemoteSdkData remoteSdkData = (RemoteSdkData)sdkData; final PythonRemoteInterpreterManager manager = PythonRemoteInterpreterManager.getInstance(); if (manager != null) { final List cmdline = new ArrayList(); @@ -649,7 +649,7 @@ public class PyPackageManagerImpl extends PyPackageManager { while (true); return processOutput; } - catch (PyRemoteInterpreterException e) { + catch (RemoteInterpreterException e) { throw new PyExternalProcessException(ERROR_INVALID_SDK, helperPath, args, "Error running SDK: " + e.getMessage(), e); } } diff --git a/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java b/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java index fc9685d17368..7d0ec5728757 100644 --- a/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java +++ b/python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java @@ -21,7 +21,7 @@ import com.intellij.util.PlatformUtils; import com.intellij.util.xmlb.XmlSerializer; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PythonModuleTypeBase; -import com.jetbrains.python.debugger.remote.PyPathMappingSettings; +import com.intellij.util.PathMappingSettings; import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; import org.jdom.Element; @@ -40,7 +40,7 @@ public abstract class AbstractPythonRunConfiguration baseSdks = new ArrayList(); for (Sdk s : allSdks) { - if (!PythonSdkType.isInvalid(s) && !PythonSdkType.isVirtualEnv(s) && !PythonRemoteSdkAdditionalData.isRemoteSdk(s.getHomePath())) { + if (!PythonSdkType.isInvalid(s) && !PythonSdkType.isVirtualEnv(s) && !RemoteSdkDataHolder + .isRemoteSdk(s.getHomePath())) { baseSdks.add(s); } else if (s.equals(sdk)){ diff --git a/python/src/com/jetbrains/python/sdk/PyRemoteSdkFlavor.java b/python/src/com/jetbrains/python/sdk/PyRemoteSdkFlavor.java index a6f30c625fc3..a244a735de5f 100644 --- a/python/src/com/jetbrains/python/sdk/PyRemoteSdkFlavor.java +++ b/python/src/com/jetbrains/python/sdk/PyRemoteSdkFlavor.java @@ -2,7 +2,7 @@ package com.jetbrains.python.sdk; import com.google.common.collect.Lists; import com.intellij.openapi.util.text.StringUtil; -import com.jetbrains.python.remote.RemoteFile; +import com.jetbrains.plugins.remotesdk.RemoteFile; import org.jetbrains.annotations.Nullable; import java.util.Collection; diff --git a/python/src/com/jetbrains/python/sdk/PySdkUtil.java b/python/src/com/jetbrains/python/sdk/PySdkUtil.java index fcc417018294..6170adaf176f 100644 --- a/python/src/com/jetbrains/python/sdk/PySdkUtil.java +++ b/python/src/com/jetbrains/python/sdk/PySdkUtil.java @@ -8,7 +8,7 @@ import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.HashMap; -import com.jetbrains.python.remote.PythonRemoteSdkAdditionalData; +import com.jetbrains.plugins.remotesdk.RemoteSdkData; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -196,6 +196,6 @@ public class PySdkUtil { } public static boolean isRemote(@Nullable Sdk sdk) { - return sdk != null && sdk.getSdkAdditionalData() instanceof PythonRemoteSdkAdditionalData; + return sdk != null && sdk.getSdkAdditionalData() instanceof RemoteSdkData; } } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkAdditionalData.java b/python/src/com/jetbrains/python/sdk/PythonSdkAdditionalData.java index 12aa6f2d2f73..4474fcc17a4d 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkAdditionalData.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkAdditionalData.java @@ -123,13 +123,14 @@ public class PythonSdkAdditionalData implements SdkAdditionalData { } protected static void load(@Nullable Element element, @NotNull PythonSdkAdditionalData data) { - data.setAddedPaths(loadStringList(element, PATHS_ADDED_BY_USER_ROOT, PATH_ADDED_BY_USER)); - data.setExcludedPaths(loadStringList(element, PATHS_REMOVED_BY_USER_ROOT, PATH_REMOVED_BY_USER)); - data.setAssociatedProjectPath(element.getAttributeValue(ASSOCIATED_PROJECT_PATH)); + data.setAddedPaths(collectPaths(loadStringsList(element, PATHS_ADDED_BY_USER_ROOT, PATH_ADDED_BY_USER))); + data.setExcludedPaths(collectPaths(loadStringsList(element, PATHS_REMOVED_BY_USER_ROOT, PATH_REMOVED_BY_USER))); + if (element != null) { + data.setAssociatedProjectPath(element.getAttributeValue(ASSOCIATED_PROJECT_PATH)); + } } - protected static Set loadStringList(@Nullable Element element, @NotNull String rootName, @NotNull String attrName) { - final List paths = loadPaths(element, rootName, attrName); + protected static Set collectPaths(@NotNull List paths) { final Set files = Sets.newHashSet(); for (String path : paths) { VirtualFile vf = VirtualFileUtil.findFile(path); @@ -140,14 +141,12 @@ public class PythonSdkAdditionalData implements SdkAdditionalData { return files; } - protected static List loadPaths(Element element, String rootName, String attrName) { + protected static List loadStringsList(Element element, String rootName, String attrName) { final List paths = new LinkedList(); if (element != null) { - final List list = element.getChildren(rootName); - if (list != null) { - for (Object o : list) { - paths.add(((Element)o).getAttribute(attrName).getValue()); - } + @NotNull final List list = element.getChildren(rootName); + for (Object o : list) { + paths.add(((Element)o).getAttribute(attrName).getValue()); } } return paths; diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java index baf484285aff..bd25bc5a1fd2 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java @@ -36,6 +36,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.*; import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; +import com.jetbrains.plugins.remotesdk.RemoteSdkDataHolder; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; import com.jetbrains.python.PythonFileType; @@ -44,7 +45,7 @@ import com.jetbrains.python.facet.PythonFacetSettings; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.search.PyProjectScopeBuilder; -import com.jetbrains.python.remote.PythonRemoteSdkAdditionalData; +import com.jetbrains.python.remote.PyRemoteSdkAdditionalData; import icons.PythonIcons; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -359,8 +360,8 @@ public class PythonSdkType extends SdkType { @Override public SdkAdditionalData loadAdditionalData(final Sdk currentSdk, final Element additional) { - if (PythonRemoteSdkAdditionalData.isRemoteSdk(currentSdk.getHomePath())) { - return PythonRemoteSdkAdditionalData.loadRemote(currentSdk, additional); + if (RemoteSdkDataHolder.isRemoteSdk(currentSdk.getHomePath())) { + return PyRemoteSdkAdditionalData.loadRemote(currentSdk, additional); } else { return PythonSdkAdditionalData.load(currentSdk, additional);