void (@NotNull final String propertyName) { if (myStructureViewComponent.isDisposed()) { return; } JTree tree = myStructureViewComponent.getTree(); Object root = tree.getModel().getRoot(); if (isLoadingChildrenFor(root)) { boolean isEditorVisible = false; for (FileEditor editor : FileEditorManager.getInstance(myProject).getSelectedEditors()) { if (editor == this) { isEditorVisible = true; break; } } if (!isEditorVisible) { myPropertyToSelectWhenVisible = propertyName; return; } mySelectionChangeAlarm.cancelAllRequests(); mySelectionChangeAlarm.addRequest(() -> { mySelectionChangeAlarm.cancelAllRequests(); setStructureViewSelection(propertyName); }, 500); return; } Stack<TreeElement> toCheck = new Stack<>(); toCheck.push(myStructureViewComponent.getTreeModel().getRoot()); while (!toCheck.isEmpty()) { TreeElement element = toCheck.pop(); PsiElement value = element instanceof PropertyStructureViewElement ? ((PropertyStructureViewElement)element).getPsiElement() : null; final IProperty property = PropertiesImplUtil.getProperty(value); if (property != null && propertyName.equals(property.getUnescapedKey())) { myStructureViewComponent.select(property, true); selectionChanged(); return; } else { for (TreeElement treeElement : element.getChildren()) { toCheck.push(treeElement); } } } }