mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-18970 Check that imports in "project" group don't belong to any library root
Consider such imports as imports from the standard library or third party libraries instead.
This commit is contained in:
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -263,7 +264,8 @@ public class AddImportHelper {
|
||||
return UNRESOLVED_SYMBOL_PRIORITY;
|
||||
}
|
||||
final ProjectRootManager projectRootManager = ProjectRootManager.getInstance(toImport.getProject());
|
||||
if (projectRootManager.getFileIndex().isInContent(vFile)) {
|
||||
final ProjectFileIndex fileIndex = projectRootManager.getFileIndex();
|
||||
if (fileIndex.isInContent(vFile) && !fileIndex.isInLibraryClasses(vFile)) {
|
||||
return ImportPriority.PROJECT;
|
||||
}
|
||||
final Module module = ModuleUtilCore.findModuleForPsiElement(importLocation);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import b
|
||||
|
||||
import a
|
||||
|
||||
print(a, b)
|
||||
@@ -0,0 +1,4 @@
|
||||
import a
|
||||
import b
|
||||
|
||||
print(a, b)
|
||||
@@ -17,7 +17,13 @@ package com.jetbrains.python;
|
||||
|
||||
import com.intellij.codeInsight.actions.OptimizeImportsAction;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.projectRoots.SdkModificator;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.python.fixtures.PyTestCase;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -95,6 +101,38 @@ public class PyOptimizeImportsTest extends PyTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
// PY-18970
|
||||
public void testLibraryRootInsideProject() {
|
||||
final String testName = getTestName(true);
|
||||
myFixture.copyDirectoryToProject(testName, "");
|
||||
final VirtualFile libDir = myFixture.findFileInTempDir("lib");
|
||||
assertNotNull(libDir);
|
||||
|
||||
final Sdk sdk = PythonSdkType.findPythonSdk(myFixture.getModule());
|
||||
assertNotNull(sdk);
|
||||
WriteAction.run(() -> {
|
||||
final SdkModificator modificator = sdk.getSdkModificator();
|
||||
assertNotNull(modificator);
|
||||
modificator.addRoot(libDir, OrderRootType.CLASSES);
|
||||
modificator.commitChanges();
|
||||
});
|
||||
|
||||
try {
|
||||
myFixture.configureByFile("main.py");
|
||||
OptimizeImportsAction.actionPerformedImpl(DataManager.getInstance().getDataContext(myFixture.getEditor().getContentComponent()));
|
||||
myFixture.checkResultByFile(testName + "/main.after.py");
|
||||
}
|
||||
finally {
|
||||
//noinspection ThrowFromFinallyBlock
|
||||
WriteAction.run(() -> {
|
||||
final SdkModificator modificator = sdk.getSdkModificator();
|
||||
assertNotNull(modificator);
|
||||
modificator.removeRoot(libDir, OrderRootType.CLASSES);
|
||||
modificator.commitChanges();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
myFixture.configureByFile(getTestName(true) + ".py");
|
||||
OptimizeImportsAction.actionPerformedImpl(DataManager.getInstance().getDataContext(myFixture.getEditor().getContentComponent()));
|
||||
|
||||
Reference in New Issue
Block a user