use of com.intellij.openapi.projectRoots.Sdk in project intellij-community by JetBrains.
the class AddImportHelper method getImportPriority.
@NotNull
public static ImportPriority getImportPriority(@NotNull PsiElement importLocation, @NotNull PsiFileSystemItem toImport) {
final VirtualFile vFile = toImport.getVirtualFile();
if (vFile == null) {
return UNRESOLVED_SYMBOL_PRIORITY;
}
final ProjectRootManager projectRootManager = ProjectRootManager.getInstance(toImport.getProject());
final ProjectFileIndex fileIndex = projectRootManager.getFileIndex();
if (fileIndex.isInContent(vFile) && !fileIndex.isInLibraryClasses(vFile)) {
return ImportPriority.PROJECT;
}
final Module module = ModuleUtilCore.findModuleForPsiElement(importLocation);
final Sdk pythonSdk = module != null ? PythonSdkType.findPythonSdk(module) : projectRootManager.getProjectSdk();
return PythonSdkType.isStdLib(vFile, pythonSdk) ? ImportPriority.BUILTIN : ImportPriority.THIRD_PARTY;
}
use of com.intellij.openapi.projectRoots.Sdk in project intellij-community by JetBrains.
the class PyInterpreterUsagesCollector method getProjectUsages.
@NotNull
@Override
public Set<UsageDescriptor> getProjectUsages(@NotNull Project project) throws CollectUsagesException {
Set<UsageDescriptor> result = new HashSet<>();
for (Module m : ModuleManager.getInstance(project).getModules()) {
Sdk pythonSdk = PythonSdkType.findPythonSdk(m);
if (pythonSdk != null) {
String versionString = pythonSdk.getVersionString();
if (StringUtil.isEmpty(versionString)) {
versionString = "unknown version";
}
if (PythonSdkType.isRemote(pythonSdk)) {
versionString = versionString + " (" + getRemoteSuffix(pythonSdk) + ")";
}
if (PythonSdkType.isVirtualEnv(pythonSdk)) {
versionString += " [virtualenv]";
}
if (PythonSdkType.isCondaVirtualEnv(pythonSdk)) {
versionString += " [condavenv]";
}
result.add(new UsageDescriptor(versionString, 1));
}
}
return result;
}
use of com.intellij.openapi.projectRoots.Sdk in project intellij-community by JetBrains.
the class PythonSdkDetailsStep method getVEnvCallback.
@NotNull
private AbstractCreateVirtualEnvDialog.VirtualEnvCallback getVEnvCallback() {
return new CreateVirtualEnvDialog.VirtualEnvCallback() {
@Override
public void virtualEnvCreated(Sdk sdk, boolean associateWithProject) {
if (associateWithProject) {
SdkAdditionalData additionalData = sdk.getSdkAdditionalData();
if (additionalData == null) {
additionalData = new PythonSdkAdditionalData(PythonSdkFlavor.getFlavor(sdk.getHomePath()));
((ProjectJdkImpl) sdk).setSdkAdditionalData(additionalData);
}
if (myNewProject) {
((PythonSdkAdditionalData) additionalData).associateWithNewProject();
} else {
((PythonSdkAdditionalData) additionalData).associateWithProject(myProject);
}
}
mySdkAddedCallback.consume(sdk);
}
};
}
use of com.intellij.openapi.projectRoots.Sdk in project intellij-community by JetBrains.
the class PythonSdkUpdater method commitSdkPathsIfChanged.
/**
* Commits new SDK paths using an SDK modificator if the paths have been changed.
*
* You may invoke it from any thread. Blocks until the commit is done in the AWT thread.
*/
private static void commitSdkPathsIfChanged(@NotNull Sdk sdk, @Nullable final SdkModificator sdkModificator, @NotNull final List<VirtualFile> sdkPaths, boolean forceCommit) {
final String key = PythonSdkType.getSdkKey(sdk);
final SdkModificator modificatorToGetRoots = sdkModificator != null ? sdkModificator : sdk.getSdkModificator();
final List<VirtualFile> currentSdkPaths = Arrays.asList(modificatorToGetRoots.getRoots(OrderRootType.CLASSES));
if (forceCommit || !Sets.newHashSet(sdkPaths).equals(Sets.newHashSet(currentSdkPaths))) {
TransactionGuard.getInstance().assertWriteSafeContext(ModalityState.defaultModalityState());
ApplicationManager.getApplication().invokeAndWait(() -> {
final Sdk sdkInsideInvoke = PythonSdkType.findSdkByKey(key);
final SdkModificator modificatorToCommit = sdkModificator != null ? sdkModificator : sdkInsideInvoke != null ? sdkInsideInvoke.getSdkModificator() : modificatorToGetRoots;
modificatorToCommit.removeAllRoots();
for (VirtualFile sdkPath : sdkPaths) {
modificatorToCommit.addRoot(PythonSdkType.getSdkRootVirtualFile(sdkPath), OrderRootType.CLASSES);
}
modificatorToCommit.commitChanges();
});
}
}
use of com.intellij.openapi.projectRoots.Sdk in project intellij-community by JetBrains.
the class PythonSdkUpdater method runActivity.
/**
* Refreshes the SDKs of the modules for the open project after some delay.
*/
@Override
public void runActivity(@NotNull final Project project) {
final Application application = ApplicationManager.getApplication();
if (application.isUnitTestMode()) {
return;
}
EdtExecutorService.getScheduledExecutorInstance().schedule(() -> ProgressManager.getInstance().run(new Task.Backgroundable(project, "Updating Python Paths", false) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
final Project project = getProject();
if (project.isDisposed()) {
return;
}
for (final Sdk sdk : getPythonSdks(project)) {
update(sdk, null, project, null);
}
}
}), INITIAL_ACTIVITY_DELAY, TimeUnit.MILLISECONDS);
}
Aggregations