mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 17:03:12 +07:00
Update LanguageLevel.forElement for directories (PY-37933)
Due to dependencies configuration we decided to move its implementation to PyPsiFacade GitOrigin-RevId: 9f8f3cd56a3a01d62f9f558e0b0fe1c41a8e939a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b57c568df4
commit
8b6907e608
@@ -18,7 +18,6 @@ package com.jetbrains.python.psi;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -204,11 +203,7 @@ public enum LanguageLevel {
|
||||
|
||||
@NotNull
|
||||
public static LanguageLevel forElement(@NotNull PsiElement element) {
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile instanceof PyFile) {
|
||||
return ((PyFile)containingFile).getLanguageLevel();
|
||||
}
|
||||
return getDefault();
|
||||
return PyPsiFacade.getInstance(element.getProject()).getLanguageLevel(element);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -78,4 +78,7 @@ public abstract class PyPsiFacade {
|
||||
|
||||
@Nullable
|
||||
public abstract String findShortestImportableName(@NotNull VirtualFile targetFile, @NotNull PsiElement anchor);
|
||||
|
||||
@NotNull
|
||||
public abstract LanguageLevel getLanguageLevel(@NotNull PsiElement element);
|
||||
}
|
||||
|
||||
@@ -19,11 +19,12 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.QualifiedName;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyPsiFacade;
|
||||
import com.jetbrains.python.psi.*;
|
||||
import com.jetbrains.python.psi.resolve.PyQualifiedNameResolveContext;
|
||||
import com.jetbrains.python.psi.resolve.PyResolveImportUtil;
|
||||
import com.jetbrains.python.psi.resolve.QualifiedNameFinder;
|
||||
@@ -36,6 +37,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static com.jetbrains.python.psi.LanguageLevel.getDefault;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
@@ -113,4 +116,20 @@ public class PyPsiFacadeImpl extends PyPsiFacade {
|
||||
public String findShortestImportableName(@NotNull VirtualFile targetFile, @NotNull PsiElement anchor) {
|
||||
return QualifiedNameFinder.findShortestImportableName(anchor, targetFile);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public LanguageLevel getLanguageLevel(@NotNull PsiElement element) {
|
||||
if (element instanceof PsiDirectory) {
|
||||
final PsiDirectory directory = (PsiDirectory)element;
|
||||
return PyUtil.getLanguageLevelForVirtualFile(directory.getProject(), directory.getVirtualFile());
|
||||
}
|
||||
|
||||
final PsiFile containingFile = element.getContainingFile();
|
||||
if (containingFile instanceof PyFile) {
|
||||
return ((PyFile)containingFile).getLanguageLevel();
|
||||
}
|
||||
|
||||
return getDefault();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ import com.intellij.testFramework.ParsingTestCase;
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import com.jetbrains.python.psi.LanguageLevel;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
import com.jetbrains.python.psi.PyPsiFacade;
|
||||
import com.jetbrains.python.psi.impl.PyPsiFacadeImpl;
|
||||
import com.jetbrains.python.psi.impl.PythonASTFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -50,6 +52,7 @@ public class PythonParsingTest extends ParsingTestCase {
|
||||
registerExtension(PythonDialectsTokenSetContributor.EP_NAME, new PythonTokenSetContributor());
|
||||
addExplicitExtension(LanguageASTFactory.INSTANCE, PythonLanguage.getInstance(), new PythonASTFactory());
|
||||
PythonDialectsTokenSetProvider.reset();
|
||||
getProject().registerService(PyPsiFacade.class, PyPsiFacadeImpl.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -534,9 +534,14 @@ public class PyMultiFileResolveTest extends PyMultiFileResolveTestCase {
|
||||
|
||||
// PY-19989
|
||||
public void testAmbiguousImplicitRelativeImport() {
|
||||
prepareTestDirectory();
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg2/__init__.py"), "pkg2/mod.py");
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg/__init__.py"), "pkg/mod.py");
|
||||
runWithLanguageLevel(
|
||||
LanguageLevel.PYTHON27,
|
||||
() -> {
|
||||
prepareTestDirectory();
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg2/__init__.py"), "pkg2/mod.py");
|
||||
assertSameElements(doMultiResolveAndGetFileUrls("pkg/__init__.py"), "pkg/mod.py");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// PY-21088
|
||||
|
||||
Reference in New Issue
Block a user