boolean (MoveInfo info, XmlTag moved, XmlTag target, boolean down) { if (target.getParent() == moved) { // we are going to jump into our own children // this can mean that target computed incorrectly XmlTag next = down ? PsiTreeUtil.getNextSiblingOfType(moved, XmlTag.class) : PsiTreeUtil.getPrevSiblingOfType(moved, XmlTag.class); if (next == null) return info.prohibitMove(); info.toMove = new LineRange(moved); info.toMove2 = new LineRange(next); return true; } else if (moved.getParent() == target) { return false; } LineRange targetRange = new LineRange(target); targetRange = XmlChildRole.CLOSING_TAG_START_FINDER.findChild(target.getNode()) == null ? new LineRange(targetRange.startLine, targetRange.endLine - 1) : targetRange; if (targetRange.contains(info.toMove2)) { // we are going to jump into sibling tag XmlElementDescriptor descriptor = moved.getDescriptor(); if (descriptor == null) return false; XmlNSDescriptor nsDescriptor = descriptor.getNSDescriptor(); if (nsDescriptor == null) return false; XmlFile descriptorFile = nsDescriptor.getDescriptorFile(); if (descriptorFile == null || XmlNsDescriptorUtil.isAutoGeneratedSchema(descriptorFile)) return false; if (!TagNameVariantCollector.couldContain(target, moved)) { info.toMove = new LineRange(moved); info.toMove2 = targetRange; return true; } } return false; }