public void collapseIfEmpty() { final XmlTag[] tags = getSubTags(); if (tags.length > 0) { return; } final ASTNode closingName = XmlChildRole.CLOSING_TAG_NAME_FINDER.findChild(this); final ASTNode startTagEnd = XmlChildRole.START_TAG_END_FINDER.findChild(this); if (closingName == null || startTagEnd == null) { return; } final PomModel pomModel = PomManager.getModel(getProject()); final PomTransactionBase transaction = new PomTransactionBase(this, pomModel.getModelAspect(XmlAspect.class)) { @Nullable public PomModelEvent runInner() { final ASTNode closingBracket = closingName.getTreeNext(); removeRange(startTagEnd, closingBracket); final LeafElement emptyTagEnd = Factory.createSingleLeafElement( XmlTokenType.XML_EMPTY_ELEMENT_END, "/>", 0, 2, null, getManager()); replaceChild(closingBracket, emptyTagEnd); return null; } }; try { pomModel.runTransaction(transaction); } catch (IncorrectOperationException e) { LOG.error(e); } }
@NotNull public PsiReference[] getReferences() { ProgressManager.checkCanceled(); final ASTNode startTagName = XmlChildRole.START_TAG_NAME_FINDER.findChild(this); if (startTagName == null) return PsiReference.EMPTY_ARRAY; final ASTNode endTagName = XmlChildRole.CLOSING_TAG_NAME_FINDER.findChild(this); List<PsiReference> refs = new ArrayList<PsiReference>(); String prefix = getNamespacePrefix(); TagNameReference startTagRef = TagNameReference.createTagNameReference(this, startTagName, true); refs.add(startTagRef); if (prefix.length() > 0) { refs.add(createPrefixReference(startTagName, prefix, startTagRef)); } if (endTagName != null) { TagNameReference endTagRef = TagNameReference.createTagNameReference(this, endTagName, false); refs.add(endTagRef); prefix = XmlUtil.findPrefixByQualifiedName(endTagName.getText()); if (StringUtil.isNotEmpty(prefix)) { refs.add(createPrefixReference(endTagName, prefix, endTagRef)); } } // ArrayList.addAll() makes a clone of the collection //noinspection ManualArrayToCollectionCopy for (PsiReference ref : ReferenceProvidersRegistry.getReferencesFromProviders(this, XmlTag.class)) { refs.add(ref); } return ContainerUtil.toArray(refs, new PsiReference[refs.size()]); }