mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-04 17:20:55 +07:00
Reverted resolving foreign results in front of Python results (PY-23265, PY-23857, PY-23487)
It was a regression caused by changing the order of imports that affected most Python plugin users due to Jython specific resolve logic applied to CPython interpreters.
This commit is contained in:
@@ -15,12 +15,19 @@
|
|||||||
*/
|
*/
|
||||||
package com.jetbrains.jython;
|
package com.jetbrains.jython;
|
||||||
|
|
||||||
|
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
|
import com.intellij.testFramework.PsiTestUtil;
|
||||||
import com.intellij.testFramework.ResolveTestCase;
|
import com.intellij.testFramework.ResolveTestCase;
|
||||||
import com.intellij.testFramework.TestDataPath;
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import com.jetbrains.python.PythonHelpersLocator;
|
import com.jetbrains.python.PythonHelpersLocator;
|
||||||
|
import com.jetbrains.python.psi.PyFile;
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author yole
|
* @author yole
|
||||||
*/
|
*/
|
||||||
@@ -85,6 +92,23 @@ public class PyToJavaResolveTest extends ResolveTestCase {
|
|||||||
Assert.assertEquals("println", ((PsiMethod) target).getName());
|
Assert.assertEquals("println", ((PsiMethod) target).getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PY-23265, PY-23857
|
||||||
|
public void testPurePythonSymbolsFirst() throws Exception {
|
||||||
|
final LocalFileSystem fs = LocalFileSystem.getInstance();
|
||||||
|
final VirtualFile tmpDir = fs.findFileByIoFile(createTempDirectory());
|
||||||
|
copyDirContentsTo(fs.findFileByPath(getTestDataPath() + getTestName(true)), tmpDir);
|
||||||
|
PsiTestUtil.addSourceRoot(getModule(), tmpDir.findChild("src"));
|
||||||
|
|
||||||
|
final PsiReference ref = configureByFile(getTestName(true) + "/src/main.py", tmpDir);
|
||||||
|
final PsiPolyVariantReference multiRef = (PsiPolyVariantReference)ref;
|
||||||
|
final ResolveResult[] results = multiRef.multiResolve(false);
|
||||||
|
final List<PsiElement> targets = ContainerUtil.map(results, ResolveResult::getElement);
|
||||||
|
|
||||||
|
assertSize(2, targets);
|
||||||
|
assertInstanceOf(targets.get(0), PyFile.class);
|
||||||
|
assertInstanceOf(targets.get(1), PsiPackage.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTestDataPath() {
|
protected String getTestDataPath() {
|
||||||
return PythonHelpersLocator.getPythonCommunityPath() + "/testData/resolve/pyToJava/";
|
return PythonHelpersLocator.getPythonCommunityPath() + "/testData/resolve/pyToJava/";
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ fun resolveQualifiedName(name: QualifiedName, context: PyQualifiedNameResolveCon
|
|||||||
val pythonResults = listOf(relativeResults,
|
val pythonResults = listOf(relativeResults,
|
||||||
resultsFromRoots(name, context),
|
resultsFromRoots(name, context),
|
||||||
relativeResultsFromSkeletons(name, context)).flatten().distinct()
|
relativeResultsFromSkeletons(name, context)).flatten().distinct()
|
||||||
val allResults = foreignResults + pythonResults
|
val allResults = pythonResults + foreignResults
|
||||||
val results = if (name.componentCount > 0) foreignResults + findFirstResults(pythonResults) else allResults
|
val results = if (name.componentCount > 0) findFirstResults(pythonResults) + foreignResults else allResults
|
||||||
|
|
||||||
if (mayCache) {
|
if (mayCache) {
|
||||||
cache?.put(key, results)
|
cache?.put(key, results)
|
||||||
@@ -250,9 +250,10 @@ private fun resultsFromRoots(name: QualifiedName, context: PyQualifiedNameResolv
|
|||||||
|
|
||||||
val visitor = RootVisitor { root, module, sdk, isModuleSource ->
|
val visitor = RootVisitor { root, module, sdk, isModuleSource ->
|
||||||
val results = if (isModuleSource) moduleResults else sdkResults
|
val results = if (isModuleSource) moduleResults else sdkResults
|
||||||
|
val effectiveSdk = sdk ?: context.effectiveSdk
|
||||||
if (!root.isValid ||
|
if (!root.isValid ||
|
||||||
root == PyUserSkeletonsUtil.getUserSkeletonsDirectory() ||
|
root == PyUserSkeletonsUtil.getUserSkeletonsDirectory() ||
|
||||||
sdk != null && PyTypeShed.isInside(root) && !PyTypeShed.maySearchForStubInRoot(name, root, sdk)) {
|
effectiveSdk != null && PyTypeShed.isInside(root) && !PyTypeShed.maySearchForStubInRoot(name, root, effectiveSdk)) {
|
||||||
return@RootVisitor true
|
return@RootVisitor true
|
||||||
}
|
}
|
||||||
results.addAll(resolveInRoot(name, root, context))
|
results.addAll(resolveInRoot(name, root, context))
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import pk<ref>g
|
||||||
|
|
||||||
|
print(pkg)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
Reference in New Issue
Block a user