PY-17933: Rename refactoring: cannot find reference to attribute defined in another file

Code only checked functions. Attributes were ignored.

GitOrigin-RevId: a1792463fa31c55aed469e2e0c60218aceab16cf
This commit is contained in:
Ilya.Kazakevich
2019-11-21 21:19:50 +03:00
committed by intellij-monorepo-bot
parent cb415e77f2
commit 9409409a90
3 changed files with 14 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ import com.intellij.psi.search.ProjectScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.QualifiedName;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ObjectUtils;
import com.intellij.util.PlatformIcons;
import com.intellij.util.ProcessingContext;
import com.jetbrains.python.PyNames;
@@ -441,13 +442,13 @@ public class PyQualifiedReference extends PyReferenceImpl {
if (resolveContext.getTypeEvalContext().getOrigin() == null) {
final PsiFile containingFile = myElement.getContainingFile();
if (containingFile instanceof StubBasedPsiElement) {
assert ((StubBasedPsiElement)containingFile).getStub() == null : "Stub origin for type eval context in isReferenceTo()";
assert ((StubBasedPsiElement<?>)containingFile).getStub() == null : "Stub origin for type eval context in isReferenceTo()";
}
final TypeEvalContext context = TypeEvalContext.codeAnalysis(containingFile.getProject(), containingFile);
resolveContext = resolveContext.withTypeEvalContext(context);
}
if (element instanceof PyFunction && Comparing.equal(referencedName, ((PyFunction)element).getName()) &&
!PyUtil.isInitOrNewMethod(element)) {
PyElement pyElement = ObjectUtils.tryCast(element, PyElement.class);
if (pyElement != null && Comparing.equal(referencedName, pyElement.getName()) && !PyUtil.isInitOrNewMethod(element)) {
final PyExpression qualifier = myElement.getQualifier();
if (qualifier != null) {
final PyType qualifierType = resolveContext.getTypeEvalContext().getType(qualifier);

View File

@@ -0,0 +1,6 @@
class Foo:
def __init__(self):
self.unique_some_identi<caret>fier = 12
def foo(q):
s = q.unique_some_identifier

View File

@@ -33,6 +33,10 @@ public class PyFindUsagesTest extends PyTestCase {
final Collection<UsageInfo> usages = myFixture.testFindUsages("findUsages/ImplicitlyResolvedUsages.py");
assertEquals(1, usages.size());
}
public void testImplicitlyResolvedFieldUsages() {
final Collection<UsageInfo> usages = myFixture.testFindUsages("findUsages/ImplicitlyResolvedFieldUsages.py");
assertEquals(2, usages.size());
}
public void testQualifiedVsUnqualifiedUsages() { // PY-939
final Collection<UsageInfo> usages = myFixture.testFindUsages("findUsages/QualifiedVsUnqualifiedUsages.py");