mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-20553: Store checked elements to prevent loop
* Loop "someElement -> getReference -> resolve -> someElement" is broken
This commit is contained in:
@@ -61,7 +61,8 @@ import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.ui.awt.RelativePoint;
|
||||
import com.intellij.util.*;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.*;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.jetbrains.NotNullPredicate;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import com.jetbrains.python.PyNames;
|
||||
@@ -609,16 +610,18 @@ public class PyUtil {
|
||||
@NotNull
|
||||
public static PsiElement resolveToTheTop(@NotNull final PsiElement elementToResolve) {
|
||||
PsiElement currentElement = elementToResolve;
|
||||
final Set<PsiElement> checkedElements = new HashSet<>(); // To prevent PY-20553
|
||||
while (true) {
|
||||
final PsiReference reference = currentElement.getReference();
|
||||
if (reference == null) {
|
||||
break;
|
||||
}
|
||||
final PsiElement resolve = reference.resolve();
|
||||
if ((resolve == null) || resolve.equals(currentElement) || !inSameFile(resolve, currentElement)) {
|
||||
if ((resolve == null) || checkedElements.contains(resolve) || resolve.equals(currentElement) || !inSameFile(resolve, currentElement)) {
|
||||
break;
|
||||
}
|
||||
currentElement = resolve;
|
||||
checkedElements.add(resolve);
|
||||
}
|
||||
return currentElement;
|
||||
}
|
||||
|
||||
@@ -96,4 +96,19 @@ def contains_even_number(l):
|
||||
print elt
|
||||
else:
|
||||
for elt in range(10):
|
||||
pass
|
||||
pass
|
||||
|
||||
def write_data():
|
||||
lines = ''
|
||||
line = ''
|
||||
while True:
|
||||
next_char = 'a'
|
||||
line += next_char
|
||||
|
||||
if 100 > 999:
|
||||
line = ''
|
||||
last_ok = ''
|
||||
|
||||
if len(lines) <= 2:
|
||||
for line in lines:
|
||||
next_char += 'b'
|
||||
Reference in New Issue
Block a user