mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't evaluate reference if it resolves to more than one elements (PY-19856)
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package com.jetbrains.python.psi.impl;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.ResolveResult;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.jetbrains.python.PyNames;
|
||||
@@ -240,7 +241,11 @@ public class PyEvaluator {
|
||||
if (myNamespace != null) {
|
||||
return myNamespace.get(expression.getReferencedName());
|
||||
}
|
||||
PsiElement result = expression.getReference(PyResolveContext.noImplicits()).resolve();
|
||||
final ResolveResult[] results = expression.getReference(PyResolveContext.noImplicits()).multiResolve(false);
|
||||
if (results.length != 1) {
|
||||
return null;
|
||||
}
|
||||
PsiElement result = results[0].getElement();
|
||||
if (result instanceof PyTargetExpression) {
|
||||
result = ((PyTargetExpression)result).findAssignedValue();
|
||||
}
|
||||
|
||||
@@ -255,6 +255,15 @@ public class PyEvaluatorTest extends PyTestCase {
|
||||
assertTrue(byExpression("not False", Boolean.class));
|
||||
}
|
||||
|
||||
public void testMultiResolve() {
|
||||
final PyExpression expression = parseText("if condition:\n" +
|
||||
" a = 1\n" +
|
||||
"else:\n" +
|
||||
" a = 3\n" +
|
||||
"expr = a < 2");
|
||||
assertNull(new PyEvaluator().evaluate(expression));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private <T> T byExpression(@NotNull String expression, @NotNull Class<T> cls) {
|
||||
final Object value = new PyEvaluator().evaluate(parseExpression(expression));
|
||||
|
||||
Reference in New Issue
Block a user