mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
filterAncestors() should filter out duplicates, to avoid surprises like EA-901736 IAE: SafeDeleteHandler.invoke
GitOrigin-RevId: 04a48418bc8e69b48396a788425662d3b48afd47
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e53b52f198
commit
f7d3ba1f53
@@ -1214,27 +1214,20 @@ public class PsiTreeUtil {
|
||||
return !SyntaxTraverser.psiTraverser(element).traverse().filter(PsiErrorElement.class).isEmpty();
|
||||
}
|
||||
|
||||
public static PsiElement @NotNull [] filterAncestors(PsiElement @NotNull [] elements) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
for (PsiElement element : elements) {
|
||||
LOG.debug("element = " + element);
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<PsiElement> filteredElements = new ArrayList<>();
|
||||
public static @NotNull PsiElement @NotNull [] filterAncestors(@NotNull PsiElement @NotNull [] elements) {
|
||||
List<PsiElement> filteredElements = new ArrayList<>();
|
||||
ContainerUtil.addAll(filteredElements, elements);
|
||||
|
||||
int previousSize;
|
||||
do {
|
||||
previousSize = filteredElements.size();
|
||||
outer:
|
||||
for (PsiElement element : filteredElements) {
|
||||
for (PsiElement element2 : filteredElements) {
|
||||
if (element == element2) continue;
|
||||
for (int i = 0; i < filteredElements.size(); i++) {
|
||||
PsiElement element = filteredElements.get(i);
|
||||
for (int j = 0; j < filteredElements.size(); j++) {
|
||||
PsiElement element2 = filteredElements.get(j);
|
||||
if (i == j) continue;
|
||||
if (isAncestor(element, element2, false)) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("removing " + element2);
|
||||
}
|
||||
filteredElements.remove(element2);
|
||||
break outer;
|
||||
}
|
||||
@@ -1242,13 +1235,6 @@ public class PsiTreeUtil {
|
||||
}
|
||||
}
|
||||
while (filteredElements.size() != previousSize);
|
||||
|
||||
if (LOG.isDebugEnabled()) {
|
||||
for (PsiElement element : filteredElements) {
|
||||
LOG.debug("filtered element = " + element);
|
||||
}
|
||||
}
|
||||
|
||||
return PsiUtilCore.toPsiElementArray(filteredElements);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user