PY-27004: Use multiResolve to check if Python refs match

This commit is contained in:
fitermay
2017-11-14 18:07:39 -05:00
committed by Andrey Vlasovskikh
parent a9248797ae
commit 2cee9b66a0
4 changed files with 30 additions and 9 deletions

View File

@@ -545,17 +545,22 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
}
}
final PsiElement resolveResult = resolve();
if (resolveResult == element) {
return true;
}
PsiElement[] resolveResults =
StreamEx.of(multiResolve(false)).filter(result -> !(result instanceof ImplicitResolveResult)).map(result -> result.getElement())
.nonNull().toArray(PsiElement[]::new);
if (!haveQualifiers(element) && ourScopeOwner != null && theirScopeOwner != null) {
if (resolvesToSameGlobal(element, elementName, ourScopeOwner, theirScopeOwner, resolveResult)) return true;
}
for (PsiElement resolveResult : resolveResults) {
if (resolveResult == element) {
return true;
}
if (resolvesToWrapper(element, resolveResult)) {
return true;
if (!haveQualifiers(element) && ourScopeOwner != null && theirScopeOwner != null) {
if (resolvesToSameGlobal(element, elementName, ourScopeOwner, theirScopeOwner, resolveResult)) return true;
}
if (resolvesToWrapper(element, resolveResult)) {
return true;
}
}
}
if (element instanceof PyExpression) {

View File

@@ -0,0 +1,3 @@
from ConstImportedFromAnotherFileDefiner import SOME_CONST
print ( SOME_CONST)

View File

@@ -0,0 +1,6 @@
SOME_CONST = False
if some_cond:
SOME_CONST = True
print (<caret>SOME_CONST)

View File

@@ -190,6 +190,13 @@ public class PyFindUsagesTest extends PyTestCase {
assertEmpty(myFixture.testFindUsages("findUsages/FunctionUsagesWithSameNameDecorator.py"));
}
// PY-27004
public void testConstImportedFromAnotherFile() {
assertEquals(5,
myFixture.testFindUsages("findUsages/ConstImportedFromAnotherFileDefiner.py", "findUsages/ConstImportedFromAnotherFile.py")
.size());
}
private Collection<UsageInfo> findMultiFileUsages(String filename) {
final String testName = getTestName(false);
myFixture.copyDirectoryToProject("findUsages/" + testName, "");