diff --git a/python/src/com/jetbrains/python/psi/PsiQuery.java b/python/src/com/jetbrains/python/psi/PsiQuery.java index 48085dc67aa8..88ff82bb351e 100644 --- a/python/src/com/jetbrains/python/psi/PsiQuery.java +++ b/python/src/com/jetbrains/python/psi/PsiQuery.java @@ -57,6 +57,17 @@ public final class PsiQuery { myElements = Collections.unmodifiableList(elementsToStart); } + /** + * Adds elements to query + */ + @NotNull + public PsiQuery addElements(@NotNull final PsiQuery newElements) { + final List newList = new ArrayList<>(myElements); + newList.addAll(newElements.myElements); + return new PsiQuery<>(newList); + } + + @NotNull public static PsiQuery create(@NotNull final T elementToStart) { return new PsiQuery<>(elementToStart); @@ -69,7 +80,6 @@ public final class PsiQuery { return new PsiQuery<>(new ArrayList<>(result)); } - @NotNull public PsiQuery filter(@NotNull final PsiFilter filter) { return new PsiQuery<>(filter.filter(myElements)); @@ -91,7 +101,8 @@ public final class PsiQuery { } @NotNull - public PsiQuery map(@NotNull final PsiFilter preFilter, @NotNull final Function map) { + public PsiQuery map(@NotNull final PsiFilter preFilter, + @NotNull final Function map) { return filter(preFilter).map(map); } @@ -131,14 +142,10 @@ public final class PsiQuery { final Set result = new LinkedHashSet<>(); // Set to get rid of duplicates but preserve order asStream() .map(o -> elementsProducer.apply(o) - .stream().filter(o2 -> !o2.equals(o)) // Filter out same element + .stream().filter(o2 -> !o2.equals(o)) // Filter out same element in case of siblings .collect(Collectors.toList())) .forEach(result::addAll); - - if (filter.myPreserveCurrent) { - result.addAll(filter.filter(myElements)); - } - return new PsiQuery<>(new ArrayList<>(result)); + return new PsiQuery<>(new ArrayList<>(filter.filter(result))); } @@ -174,31 +181,22 @@ public final class PsiQuery { private final Class myClass; @NotNull private final Predicate myPredicate; + /** * Include current element in result set, or not (false by default) */ - private final boolean myPreserveCurrent; - - public PsiFilter(@NotNull final Class aClass, @NotNull final Predicate predicate, final boolean preserveCurrent) { - myClass = aClass; - myPredicate = predicate; - myPreserveCurrent = preserveCurrent; - } public PsiFilter(@NotNull final Class aClass, @NotNull final Predicate predicate) { - this(aClass, predicate, false); - } - - public PsiFilter(@NotNull final Class aClass, final boolean preserveCurrent) { - this(aClass, o -> true, preserveCurrent); + myClass = aClass; + myPredicate = predicate; } public PsiFilter(@NotNull final Class aClass) { - this(aClass, false); + this(aClass, o -> true); } @NotNull - List filter(@NotNull final List list) { + List filter(@NotNull final Collection list) { // IDEA-165420 //noinspection Guava return FluentIterable.from(list).filter(myClass).toList().stream().filter(myPredicate).collect(Collectors.toList());