private ASTNode expandTag() throws IncorrectOperationException {
   ASTNode endTagStart = XmlChildRole.CLOSING_TAG_START_FINDER.findChild(this);
   if (endTagStart == null) {
     final XmlTagImpl tagFromText =
         (XmlTagImpl)
             XmlElementFactory.getInstance(getProject())
                 .createTagFromText("<" + getName() + "></" + getName() + ">");
     final ASTNode startTagStart = XmlChildRole.START_TAG_END_FINDER.findChild(tagFromText);
     endTagStart = XmlChildRole.CLOSING_TAG_START_FINDER.findChild(tagFromText);
     final LeafElement emptyTagEnd =
         (LeafElement) XmlChildRole.EMPTY_TAG_END_FINDER.findChild(this);
     if (emptyTagEnd != null) removeChild(emptyTagEnd);
     addChildren(startTagStart, null, null);
   }
   return endTagStart;
 }
    public PomModelEvent runInner() {
      final String value = ((XmlAttribute) myChild).getValue();
      final String name = ((XmlAttribute) myChild).getName();
      if (myAnchor == null) {
        ASTNode startTagEnd = XmlChildRole.START_TAG_END_FINDER.findChild(XmlTagImpl.this);
        if (startTagEnd == null)
          startTagEnd = XmlChildRole.EMPTY_TAG_END_FINDER.findChild(XmlTagImpl.this);

        if (startTagEnd == null) {
          ASTNode anchor = getLastChildNode();

          while (anchor instanceof PsiWhiteSpace) {
            anchor = anchor.getTreePrev();
          }

          if (anchor instanceof PsiErrorElement) {
            final LeafElement token =
                Factory.createSingleLeafElement(
                    XmlTokenType.XML_EMPTY_ELEMENT_END,
                    "/>",
                    0,
                    2,
                    SharedImplUtil.findCharTableByTree(anchor),
                    getManager());
            replaceChild(anchor, token);
            startTagEnd = token;
          }
        }

        if (startTagEnd == null) {
          ASTNode anchor = XmlChildRole.START_TAG_NAME_FINDER.findChild(XmlTagImpl.this);
          myFirstInserted = XmlTagImpl.super.addInternal(myChild, myChild, anchor, Boolean.FALSE);
        } else {
          myFirstInserted =
              XmlTagImpl.super.addInternal(myChild, myChild, startTagEnd, Boolean.TRUE);
        }
      } else {
        myFirstInserted =
            XmlTagImpl.super.addInternal(myChild, myChild, myAnchor, Boolean.valueOf(myBefore));
      }
      return XmlAttributeSetImpl.createXmlAttributeSet(myModel, XmlTagImpl.this, name, value);
    }