public static <D> void visitChildren( @NotNull KtElement element, @NotNull KtVisitor<Void, D> visitor, D data) { PsiElement child = element.getFirstChild(); while (child != null) { if (child instanceof KtElement) { ((KtElement) child).accept(visitor, data); } child = child.getNextSibling(); } }
@Nullable public static String getPackageName(@NotNull KtElement element) { KtFile file = element.getContainingKtFile(); KtPackageDirective header = PsiTreeUtil.findChildOfType(file, KtPackageDirective.class); return header != null ? header.getQualifiedName() : null; }
@NotNull public static Set<KtElement> findRootExpressions( @NotNull Collection<KtElement> unreachableElements) { Set<KtElement> rootElements = new HashSet<KtElement>(); final Set<KtElement> shadowedElements = new HashSet<KtElement>(); KtVisitorVoid shadowAllChildren = new KtVisitorVoid() { @Override public void visitKtElement(@NotNull KtElement element) { if (shadowedElements.add(element)) { element.acceptChildren(this); } } }; for (KtElement element : unreachableElements) { if (shadowedElements.contains(element)) continue; element.acceptChildren(shadowAllChildren); rootElements.removeAll(shadowedElements); rootElements.add(element); } return rootElements; }
@Override public StackValue visitKtElement(@NotNull KtElement element, StackValue receiver) { return element.accept(codegen, receiver); }