mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add bundled skeletons builder
Pre-built skeletons are bundled with PyCharm and save a lot of time on the first indexing. Though they were built manually and currently not up-to date. Now we build them automatically.
This commit is contained in:
@@ -108,8 +108,8 @@ public class PySkeletonRefresher {
|
||||
}
|
||||
|
||||
public static void refreshSkeletonsOfSdk(@Nullable Project project,
|
||||
Component ownerComponent,
|
||||
String skeletonsPath,
|
||||
@Nullable Component ownerComponent,
|
||||
@Nullable String skeletonsPath,
|
||||
@NotNull Sdk sdk)
|
||||
throws InvalidSdkException {
|
||||
final Map<String, List<String>> errors = new TreeMap<>();
|
||||
@@ -815,32 +815,12 @@ public class PySkeletonRefresher {
|
||||
return null;
|
||||
}
|
||||
LOG.info("Pregenerated skeletons root is " + root);
|
||||
@NonNls final String versionString = mySdk.getVersionString();
|
||||
if (versionString == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (PySdkUtil.isRemote(mySdk)) {
|
||||
return null;
|
||||
}
|
||||
String prebuiltSkeletonsName = getPregeneratedSkeletonsName();
|
||||
if (prebuiltSkeletonsName == null) return null;
|
||||
|
||||
File f = new File(root, prebuiltSkeletonsName);
|
||||
|
||||
String version = versionString.toLowerCase().replace(" ", "-");
|
||||
File f;
|
||||
if (SystemInfo.isMac) {
|
||||
String osVersion = SystemInfo.OS_VERSION;
|
||||
int dot = osVersion.indexOf('.');
|
||||
if (dot >= 0) {
|
||||
int secondDot = osVersion.indexOf('.', dot + 1);
|
||||
if (secondDot >= 0) {
|
||||
osVersion = osVersion.substring(0, secondDot);
|
||||
}
|
||||
}
|
||||
f = new File(root, "skeletons-mac-" + myGeneratorVersion + "-" + osVersion + "-" + version + ".zip");
|
||||
}
|
||||
else {
|
||||
String os = SystemInfo.isWindows ? "win" : "nix";
|
||||
f = new File(root, "skeletons-" + os + "-" + myGeneratorVersion + "-" + version + ".zip");
|
||||
}
|
||||
if (f.exists()) {
|
||||
LOG.info("Found pregenerated skeletons at " + f.getPath());
|
||||
final VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(f);
|
||||
@@ -856,6 +836,41 @@ public class PySkeletonRefresher {
|
||||
}
|
||||
}
|
||||
|
||||
public String getPregeneratedSkeletonsName() {
|
||||
return getPregeneratedSkeletonsName(mySdk, myGeneratorVersion);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String getPregeneratedSkeletonsName(@NotNull Sdk sdk, int generatorVersion) {
|
||||
String prebuiltSkeletonsName;
|
||||
@NonNls final String versionString = sdk.getVersionString();
|
||||
if (versionString == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (PySdkUtil.isRemote(sdk)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String version = versionString.toLowerCase().replace(" ", "-");
|
||||
|
||||
if (SystemInfo.isMac) {
|
||||
String osVersion = SystemInfo.OS_VERSION;
|
||||
int dot = osVersion.indexOf('.');
|
||||
if (dot >= 0) {
|
||||
int secondDot = osVersion.indexOf('.', dot + 1);
|
||||
if (secondDot >= 0) {
|
||||
osVersion = osVersion.substring(0, secondDot);
|
||||
}
|
||||
}
|
||||
prebuiltSkeletonsName = "skeletons-mac-" + generatorVersion + "-" + osVersion + "-" + version + ".zip";
|
||||
}
|
||||
else {
|
||||
String os = SystemInfo.isWindows ? "win" : "nix";
|
||||
prebuiltSkeletonsName = "skeletons-" + os + "-" + generatorVersion + "-" + version + ".zip";
|
||||
} return prebuiltSkeletonsName;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static File findPregeneratedSkeletonsRoot() {
|
||||
final String path = PathManager.getHomePath();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.jetbrains.env;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
+3
-3
@@ -9,8 +9,8 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdkTools.PyTestSdkTools;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.PySdkTools;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -146,7 +146,7 @@ public class PyEnvTaskRunner {
|
||||
if (url == null) {
|
||||
return null;
|
||||
}
|
||||
return PyTestSdkTools.createTempSdk(url, SdkCreationType.EMPTY_SDK, null);
|
||||
return PySdkTools.createTempSdk(url, SdkCreationType.EMPTY_SDK, null);
|
||||
}
|
||||
|
||||
protected boolean shouldRun(String root, PyTestTask task) {
|
||||
|
||||
@@ -25,8 +25,8 @@ import com.jetbrains.python.packaging.PyPackageManager;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdkTools.PyTestSdkTools;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.PySdkTools;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Assert;
|
||||
@@ -234,7 +234,7 @@ public abstract class PyExecutionFixtureTestTask extends PyTestTask {
|
||||
* Creates SDK by its path
|
||||
*
|
||||
* @param sdkHome path to sdk (probably obtained by {@link #runTestOn(String)})
|
||||
* @param sdkCreationType SDK creation strategy (see {@link com.jetbrains.python.sdkTools.SdkCreationType} doc)
|
||||
* @param sdkCreationType SDK creation strategy (see {@link sdkTools.SdkCreationType} doc)
|
||||
* @return sdk
|
||||
*/
|
||||
@NotNull
|
||||
@@ -242,7 +242,7 @@ public abstract class PyExecutionFixtureTestTask extends PyTestTask {
|
||||
throws InvalidSdkException {
|
||||
final VirtualFile sdkHomeFile = LocalFileSystem.getInstance().findFileByPath(sdkHome);
|
||||
Assert.assertNotNull("Interpreter file not found: " + sdkHome, sdkHomeFile);
|
||||
final Sdk sdk = PyTestSdkTools.createTempSdk(sdkHomeFile, sdkCreationType, myFixture.getModule());
|
||||
final Sdk sdk = PySdkTools.createTempSdk(sdkHomeFile, sdkCreationType, myFixture.getModule());
|
||||
// We use gradle script to create environment. This script utilizes Conda.
|
||||
// Conda supports 2 types of package installation: conda native and pip. We use pip.
|
||||
// PyCharm Conda support ignores packages installed via pip ("conda list -e" does it, see PyCondaPackageManagerImpl)
|
||||
|
||||
@@ -24,7 +24,7 @@ import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.xdebugger.XDebuggerTestUtil;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Assert;
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ public abstract class PyTestTask {
|
||||
|
||||
/**
|
||||
* Run test on certain SDK path.
|
||||
* To create SDK from path, use {@link PyExecutionFixtureTestTask#createTempSdk(String, com.jetbrains.python.sdkTools.SdkCreationType)}
|
||||
* To create SDK from path, use {@link PyExecutionFixtureTestTask#createTempSdk(String, sdkTools.SdkCreationType)}
|
||||
*
|
||||
* @param sdkHome sdk path
|
||||
*/
|
||||
|
||||
+1
-1
@@ -21,10 +21,10 @@ import com.intellij.execution.testframework.sm.runner.ui.MockPrinter;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.testing.tox.PyToxConfiguration;
|
||||
import com.jetbrains.python.testing.tox.PyToxConfigurationFactory;
|
||||
import com.jetbrains.python.testing.tox.PyToxTestTools;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -16,7 +16,7 @@ import com.jetbrains.python.packaging.PyRequirement;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
|
||||
import com.jetbrains.python.sdk.flavors.VirtualEnvSdkFlavor;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.jetbrains.python.debugger.pydev.PyDebugCallback;
|
||||
import com.jetbrains.python.debugger.settings.PyDebuggerSettings;
|
||||
import com.jetbrains.python.debugger.settings.PySteppingFilter;
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.jetbrains.env.PyEnvTestCase;
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyUnitTestProcessRunner;
|
||||
import com.jetbrains.python.PythonHelpersLocator;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
@@ -29,18 +29,16 @@ import com.jetbrains.env.PyEnvTestCase;
|
||||
import com.jetbrains.env.PyExecutionFixtureTestTask;
|
||||
import com.jetbrains.env.PyTestTask;
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
import com.jetbrains.python.documentation.PythonDocumentationProvider;
|
||||
import com.jetbrains.python.inspections.unresolvedReference.PyUnresolvedReferencesInspection;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.impl.PyBuiltinCache;
|
||||
import com.jetbrains.python.psi.resolve.PythonSdkPathCache;
|
||||
import com.jetbrains.python.psi.types.PyType;
|
||||
import com.jetbrains.python.psi.types.TypeEvalContext;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
|
||||
import com.jetbrains.python.sdk.skeletons.SkeletonVersionChecker;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.toolbox.Maybe;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ import com.jetbrains.python.console.*;
|
||||
import com.jetbrains.python.console.pydev.ConsoleCommunicationListener;
|
||||
import com.jetbrains.python.debugger.PyDebugValue;
|
||||
import com.jetbrains.python.debugger.PyDebuggerException;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Assert;
|
||||
|
||||
@@ -24,7 +24,7 @@ import com.jetbrains.python.inspections.quickfix.GenerateBinaryStubsFix;
|
||||
import com.jetbrains.python.inspections.unresolvedReference.PyUnresolvedReferencesInspection;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
+1
-1
@@ -29,8 +29,8 @@ import com.jetbrains.env.PyExecutionFixtureTestTask;
|
||||
import com.jetbrains.python.run.PythonConfigurationFactoryBase;
|
||||
import com.jetbrains.python.run.PythonRunConfiguration;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.testing.*;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.util.ThrowableRunnable;
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyScriptTestProcessRunner;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
|
||||
Vendored
+1
-1
@@ -19,7 +19,7 @@ import com.google.common.collect.Sets
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask
|
||||
import com.jetbrains.env.ut.PyScriptTestProcessRunner
|
||||
import com.jetbrains.env.ut.PyUnitTestProcessRunner
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType
|
||||
import java.util.function.Function
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.jetbrains.env.python.testing;
|
||||
import com.jetbrains.env.PyEnvTestCase;
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyDocTestProcessRunner;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.testing.AbstractPythonLegacyTestRunConfiguration;
|
||||
import com.jetbrains.python.testing.doctest.PythonDocTestRunConfiguration;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
|
||||
@@ -7,10 +7,10 @@ import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.python.testing.CreateConfigurationTestTask.PyConfigurationCreationTask;
|
||||
import com.jetbrains.env.ut.PyNoseTestProcessRunner;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.testing.PyNoseTestConfiguration;
|
||||
import com.jetbrains.python.testing.PyNoseTestFactory;
|
||||
import com.jetbrains.python.testing.PyTestFrameworkService;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -15,11 +15,11 @@ import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyTestTestProcessRunner;
|
||||
import com.jetbrains.python.PyNames;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.testing.PyTestConfiguration;
|
||||
import com.jetbrains.python.testing.PyTestFactory;
|
||||
import com.jetbrains.python.testing.PyTestFrameworkService;
|
||||
import com.jetbrains.python.testing.TestTargetType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
|
||||
@@ -17,7 +17,7 @@ package com.jetbrains.env.python.testing;
|
||||
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyScriptTestProcessRunner;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@@ -18,9 +18,7 @@ package com.jetbrains.env.python.testing;
|
||||
import com.jetbrains.env.PyAbstractTestProcessRunner;
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyScriptTestProcessRunner;
|
||||
import com.jetbrains.env.ut.PyUnitTestProcessRunner;
|
||||
import com.jetbrains.python.run.PythonProcessRunner;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ package com.jetbrains.env.python.testing;
|
||||
|
||||
import com.jetbrains.env.PyProcessWithConsoleTestTask;
|
||||
import com.jetbrains.env.ut.PyScriptTestProcessRunner;
|
||||
import com.jetbrains.python.sdkTools.SdkCreationType;
|
||||
import com.jetbrains.python.tools.sdkTools.SdkCreationType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.Assert;
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ import com.jetbrains.python.sdk.PySdkUtil
|
||||
import com.jetbrains.python.sdk.PythonSdkType
|
||||
import com.jetbrains.python.sdk.PythonSdkUpdater
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor
|
||||
import com.jetbrains.python.sdkTools.PyTestSdkTools
|
||||
import com.jetbrains.python.tools.sdkTools.PySdkTools
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
|
||||
@@ -66,7 +66,7 @@ abstract class PyTypeShedTestCase(protected val path: String, protected val sdkP
|
||||
sdkCache[sdkPath] = sdk
|
||||
val skeletonsDir = PySdkUtil.findSkeletonsDir(sdk)
|
||||
if (skeletonsDir == null || skeletonsDir.children?.isEmpty() ?: true) {
|
||||
PyTestSdkTools.generateTempSkeletonsOrPackages(sdk, true, module)
|
||||
PySdkTools.generateTempSkeletonsOrPackages(sdk, true, module)
|
||||
}
|
||||
EdtTestUtil.runInEdtAndWait(ThrowableRunnable {
|
||||
SdkConfigurationUtil.addSdk(sdk)
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2016 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 com.jetbrains.python.sdkTools;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.SdkModificator;
|
||||
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil;
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.testFramework.EdtTestUtil;
|
||||
import com.jetbrains.python.sdk.InvalidSdkException;
|
||||
import com.jetbrains.python.sdk.PythonSdkAdditionalData;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import com.jetbrains.python.sdk.flavors.PythonSdkFlavor;
|
||||
import com.jetbrains.python.sdk.skeletons.PySkeletonRefresher;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Engine to create SDK for tests.
|
||||
* See {@link #createTempSdk(com.intellij.openapi.vfs.VirtualFile, SdkCreationType, com.intellij.openapi.module.Module)}
|
||||
*
|
||||
* @author Ilya.Kazakevich
|
||||
*/
|
||||
public final class PyTestSdkTools {
|
||||
|
||||
private static final Sdk[] NO_SDK = new Sdk[0];
|
||||
|
||||
private PyTestSdkTools() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates SDK by its path and associates it with module (if module provided)
|
||||
*
|
||||
* @param sdkHome path to sdk
|
||||
* @param sdkCreationType SDK creation strategy (see {@link SdkCreationType} doc)
|
||||
* @return sdk
|
||||
*/
|
||||
@NotNull
|
||||
public static Sdk createTempSdk(@NotNull final VirtualFile sdkHome,
|
||||
@NotNull final SdkCreationType sdkCreationType,
|
||||
@Nullable final Module module
|
||||
)
|
||||
throws InvalidSdkException {
|
||||
final Ref<Sdk> ref = Ref.create();
|
||||
EdtTestUtil.runInEdtAndWait(() -> {
|
||||
final Sdk sdk = SdkConfigurationUtil.setupSdk(NO_SDK, sdkHome, PythonSdkType.getInstance(), true, null, null);
|
||||
Assert.assertNotNull("Failed to create SDK on " + sdkHome, sdk);
|
||||
ref.set(sdk);
|
||||
});
|
||||
final Sdk sdk = ref.get();
|
||||
if (sdkCreationType != SdkCreationType.EMPTY_SDK) {
|
||||
generateTempSkeletonsOrPackages(sdk, sdkCreationType == SdkCreationType.SDK_PACKAGES_AND_SKELETONS, module);
|
||||
}
|
||||
EdtTestUtil.runInEdtAndWait(() -> SdkConfigurationUtil.addSdk(sdk));
|
||||
return sdk;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds installed eggs to SDK, generates skeletons (optionally) and associates it with module.
|
||||
*
|
||||
* @param sdk sdk to process
|
||||
* @param addSkeletons add skeletons or only packages
|
||||
* @param module module to associate with (if provided)
|
||||
* @throws InvalidSdkException bas sdk
|
||||
* @throws IOException failed to read eggs
|
||||
*/
|
||||
public static void generateTempSkeletonsOrPackages(@NotNull final Sdk sdk,
|
||||
final boolean addSkeletons,
|
||||
@Nullable final Module module)
|
||||
throws InvalidSdkException {
|
||||
Project project = null;
|
||||
|
||||
if (module != null) {
|
||||
project = module.getProject();
|
||||
final Project finalProject = project;
|
||||
// Associate with module
|
||||
ModuleRootModificationUtil.setModuleSdk(module, sdk);
|
||||
|
||||
EdtTestUtil.runInEdtAndWait(() -> ApplicationManager.getApplication()
|
||||
.runWriteAction(() -> ProjectRootManager.getInstance(finalProject).setProjectSdk(sdk)));
|
||||
}
|
||||
|
||||
|
||||
final SdkModificator modificator = sdk.getSdkModificator();
|
||||
|
||||
modificator.setSdkAdditionalData(new PythonSdkAdditionalData(PythonSdkFlavor.getFlavor(sdk)));
|
||||
|
||||
for (final String path : PythonSdkType.getSysPathsFromScript(sdk.getHomePath())) {
|
||||
addTestSdkRoot(modificator, path);
|
||||
}
|
||||
if (!addSkeletons) {
|
||||
EdtTestUtil.runInEdtAndWait(modificator::commitChanges);
|
||||
return;
|
||||
}
|
||||
|
||||
final String skeletonsPath = PythonSdkType.getSkeletonsPath(PathManager.getSystemPath(), sdk.getHomePath());
|
||||
addTestSdkRoot(modificator, skeletonsPath);
|
||||
|
||||
EdtTestUtil.runInEdtAndWait(modificator::commitChanges);
|
||||
|
||||
PySkeletonRefresher
|
||||
.refreshSkeletonsOfSdk(project, null, skeletonsPath, sdk);
|
||||
}
|
||||
|
||||
public static void addTestSdkRoot(@NotNull SdkModificator sdkModificator, @NotNull String path) {
|
||||
final VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByPath(path);
|
||||
if (file != null) {
|
||||
sdkModificator.addRoot(PythonSdkType.getSdkRootVirtualFile(file), OrderRootType.CLASSES);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
package com.jetbrains.python.sdkTools;
|
||||
|
||||
/**
|
||||
* SDK creation type
|
||||
* @author Ilya.Kazakevich
|
||||
*/
|
||||
public enum SdkCreationType {
|
||||
/**
|
||||
* SDK only (no packages nor skeletons)
|
||||
*/
|
||||
EMPTY_SDK,
|
||||
/**
|
||||
* SDK + installed packages from syspath
|
||||
*/
|
||||
SDK_PACKAGES_ONLY,
|
||||
/**
|
||||
* SDK + installed packages from syspath + skeletons
|
||||
*/
|
||||
SDK_PACKAGES_AND_SKELETONS
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
/**
|
||||
* Engine to create SDK in tests.
|
||||
* See {@link com.jetbrains.python.sdkTools.PyTestSdkTools}
|
||||
* @author Ilya.Kazakevich
|
||||
*/
|
||||
package com.jetbrains.python.sdkTools;
|
||||
@@ -23,5 +23,7 @@
|
||||
<orderEntry type="library" scope="TEST" name="Mocks" level="project" />
|
||||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest" level="project" />
|
||||
<orderEntry type="module" module-name="xml-openapi" />
|
||||
<orderEntry type="module" module-name="lang-tests" scope="TEST" />
|
||||
<orderEntry type="module" module-name="tools" scope="TEST" />
|
||||
</component>
|
||||
</module>
|
||||
Reference in New Issue
Block a user