@Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            if (!inJavaElem) {
                return;
            }
            if ("java".equals(qName)) { //$NON-NLS-1$
                inJavaElem = false;
                return;
            }
            // find the elem to close
            Elem toClose = latestUnclosedElem();
            if ("string".equals(toClose.target)) {
                StringBuilder sb = new StringBuilder();
                for (int index = readObjs.size() - 1; index >= 0; index--) {
                    Elem elem = (Elem) readObjs.get(index);
                    if (toClose == elem) {
                        break;
                    }
                    if ("char".equals(elem.target)) {
                        sb.insert(0, elem.methodName);
                    }
                }
                toClose.methodName = toClose.methodName != null ? toClose.methodName
                        + sb.toString()
                        : sb.toString();
            }
            // make sure it is executed
            execute(toClose);
            // set to closed
            toClose.isClosed = true;
            // pop it and its children
            while (readObjs.pop() != toClose) {
                //
            }

            if (toClose.isExpression) {
                // push back expression
                readObjs.push(toClose);
            }
        }