@NotNull public static Set<JetElement> findRootExpressions( @NotNull Collection<JetElement> unreachableElements) { Set<JetElement> rootElements = new HashSet<JetElement>(); final Set<JetElement> shadowedElements = new HashSet<JetElement>(); JetVisitorVoid shadowAllChildren = new JetVisitorVoid() { @Override public void visitJetElement(@NotNull JetElement element) { if (shadowedElements.add(element)) { element.acceptChildren(this); } } }; for (JetElement element : unreachableElements) { if (shadowedElements.contains(element)) continue; element.acceptChildren(shadowAllChildren); rootElements.removeAll(shadowedElements); rootElements.add(element); } return rootElements; }