From 555870ef1b45eeda3324943f8af56a52ffb7bf5a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 22 Mar 2011 19:12:08 +0100 Subject: [PATCH] SDK roots must be only classes, not sources (PY-2891) --- python/src/com/jetbrains/python/sdk/PythonSdkType.java | 5 +++-- python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkType.java b/python/src/com/jetbrains/python/sdk/PythonSdkType.java index ad872a7d1e1a..97791955cc81 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkType.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkType.java @@ -494,7 +494,6 @@ public class PythonSdkType extends SdkType { if (SystemInfo.isLinux) { final VirtualFile file = LocalFileSystem.getInstance().findFileByPath("/usr/lib/python-django"); if (file != null){ - sdkModificator.addRoot(file, OrderRootType.SOURCES); sdkModificator.addRoot(file, OrderRootType.CLASSES); } } @@ -510,7 +509,9 @@ public class PythonSdkType extends SdkType { child = JarFileSystem.getInstance().getJarRootForLocalFile(child); } if (child != null) { - sdkModificator.addRoot(child, OrderRootType.SOURCES); + // NOTE: Files marked as library sources are not considered part of project source. Since the directory of the project the + // user is working on is included in PYTHONPATH with many configurations (e.g. virtualenv), we must not mark SDK paths as + // library sources, only as classes. sdkModificator.addRoot(child, OrderRootType.CLASSES); } } diff --git a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java index 4399ee9594c0..be15363f75d4 100644 --- a/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java +++ b/python/src/com/jetbrains/python/sdk/PythonSdkUpdater.java @@ -104,6 +104,7 @@ public class PythonSdkUpdater implements ProjectComponent { private static void updateSdkPath(Sdk sdk, List sysPath) { final List oldRoots = Arrays.asList(sdk.getRootProvider().getFiles(OrderRootType.CLASSES)); + final VirtualFile[] sourceRoots = sdk.getRootProvider().getFiles(OrderRootType.SOURCES); PythonSdkAdditionalData additionalData = sdk.getSdkAdditionalData() instanceof PythonSdkAdditionalData ? (PythonSdkAdditionalData) sdk.getSdkAdditionalData() : null; @@ -116,11 +117,12 @@ public class PythonSdkUpdater implements ProjectComponent { newRoots.add(root); } } - if (!newRoots.isEmpty()) { + if (!newRoots.isEmpty() || sourceRoots.length > 0) { final SdkModificator modificator = sdk.getSdkModificator(); for (String root : newRoots) { PythonSdkType.addSdkRoot(modificator, root); } + modificator.removeRoots(OrderRootType.SOURCES); ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() {