boolean (@NotNull PsiType type, @NotNull MatchContext context, @NotNull PsiElement matchedNode, @Nullable Set<? super PsiType> visited) { final List<String> permutations = getTextPermutations(type); for (String permutation : permutations) { if (myDelegate == null ? doMatch(permutation) : myDelegate.doMatch(permutation, context, matchedNode)) { return true; } } if (myWithinHierarchy) { if (visited == null) { visited = new HashSet<>(); visited.add(type); } for (PsiType superType : type.getSuperTypes()) { if (visited.add(superType) && doMatchWithTheType(superType, context, matchedNode, visited)) { return true; } } } return false; }