Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Trofimov
2012-12-12 20:12:03 +01:00
4 changed files with 43 additions and 7 deletions
@@ -1,7 +1,6 @@
package com.jetbrains.python.inspections.quickfix;
import com.intellij.codeInsight.CodeInsightUtilBase;
import com.intellij.codeInsight.intention.HighPriorityAction;
import com.intellij.codeInsight.template.TemplateBuilder;
import com.intellij.codeInsight.template.TemplateBuilderFactory;
import com.intellij.codeInspection.LocalQuickFix;
@@ -22,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
*
* QuickFix to add parameter to unresolved reference
*/
public class UnresolvedReferenceAddParameterQuickFix implements LocalQuickFix, HighPriorityAction {
public class UnresolvedReferenceAddParameterQuickFix implements LocalQuickFix {
private String myName;
public UnresolvedReferenceAddParameterQuickFix(String name) {
myName = name;
@@ -8,12 +8,14 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.FileIndexFacade;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.*;
import com.jetbrains.python.sdk.PythonSdkType;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -135,6 +137,27 @@ public class PyProjectScopeBuilder extends ProjectScopeBuilderImpl {
return findLibDir(sdk.getRootProvider().getFiles(OrderRootType.CLASSES));
}
public static VirtualFile findVirtualEnvLibDir(Sdk sdk) {
VirtualFile[] classVFiles = sdk.getRootProvider().getFiles(OrderRootType.CLASSES);
String homePath = sdk.getHomePath();
if (homePath != null) {
File root = PythonSdkType.getVirtualEnvRoot(homePath);
if (root != null) {
File libRoot = new File(root, "lib");
File[] versionRoots = libRoot.listFiles();
if (versionRoots != null && versionRoots.length == 1) {
libRoot = versionRoots[0];
}
for (VirtualFile file : classVFiles) {
if (FileUtil.pathsEqual(file.getPath(), libRoot.getPath())) {
return file;
}
}
}
}
return null;
}
@Nullable
private static VirtualFile findLibDir(VirtualFile[] files) {
for (VirtualFile file : files) {
@@ -771,11 +771,11 @@ public class PythonSdkType extends SdkType {
if (pythonSdk != null) {
final VirtualFile libDir = PyProjectScopeBuilder.findLibDir(pythonSdk);
if (libDir != null && VfsUtilCore.isAncestor(libDir, vFile, false)) {
final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES);
if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) {
return false;
}
return true;
return isNotSitePackages(vFile, libDir);
}
final VirtualFile venvLibDir = PyProjectScopeBuilder.findVirtualEnvLibDir(pythonSdk);
if (venvLibDir != null && VfsUtilCore.isAncestor(venvLibDir, vFile, false)) {
return isNotSitePackages(vFile, venvLibDir);
}
final VirtualFile skeletonsDir = findSkeletonsDir(pythonSdk);
if (skeletonsDir != null &&
@@ -786,6 +786,14 @@ public class PythonSdkType extends SdkType {
return false;
}
private static boolean isNotSitePackages(VirtualFile vFile, VirtualFile libDir) {
final VirtualFile sitePackages = libDir.findChild(PyNames.SITE_PACKAGES);
if (sitePackages != null && VfsUtilCore.isAncestor(sitePackages, vFile, false)) {
return false;
}
return true;
}
@Nullable
public static Sdk findPython2Sdk(@Nullable Module module) {
Sdk moduleSDK = findPythonSdk(module);
@@ -17,6 +17,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -24,6 +25,7 @@ import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.PythonHelpersLocator;
import com.jetbrains.python.inspections.PyPep8Inspection;
import com.jetbrains.python.inspections.quickfix.ReformatFix;
@@ -79,6 +81,10 @@ public class Pep8ExternalAnnotator extends ExternalAnnotator<Pep8ExternalAnnotat
@Nullable
@Override
public State collectionInformation(@NotNull PsiFile file) {
VirtualFile vFile = file.getVirtualFile();
if (vFile == null || vFile.getFileType() != PythonFileType.INSTANCE) {
return null;
}
Sdk sdk = PythonSdkType.findPythonSdk(ModuleUtilCore.findModuleForPsiElement(file));
if (PythonSdkType.isRemote(sdk)) {