/* (non-Javadoc) * @see org.eclipse.jdt.internal.compiler.parser.AbstractCommentParser#pushParamName(java.lang.Object) */ protected boolean pushParamName(boolean isTypeParam) { int idIndex = isTypeParam ? 1 : 0; final SimpleName name = new SimpleName(this.ast); name.internalSetIdentifier(new String(this.identifierStack[idIndex])); int nameStart = (int) (this.identifierPositionStack[idIndex] >>> 32); int nameEnd = (int) (this.identifierPositionStack[idIndex] & 0x00000000FFFFFFFFL); name.setSourceRange(nameStart, nameEnd - nameStart + 1); TagElement paramTag = this.ast.newTagElement(); paramTag.setTagName(TagElement.TAG_PARAM); if (isTypeParam) { // specific storage for @param <E> (see bug 79809) // '<' was stored in identifiers stack TextElement text = this.ast.newTextElement(); text.setText(new String(this.identifierStack[0])); int txtStart = (int) (this.identifierPositionStack[0] >>> 32); int txtEnd = (int) (this.identifierPositionStack[0] & 0x00000000FFFFFFFFL); text.setSourceRange(txtStart, txtEnd - txtStart + 1); paramTag.fragments().add(text); // add simple name paramTag.fragments().add(name); // '>' was stored in identifiers stack text = this.ast.newTextElement(); text.setText(new String(this.identifierStack[2])); txtStart = (int) (this.identifierPositionStack[2] >>> 32); txtEnd = (int) (this.identifierPositionStack[2] & 0x00000000FFFFFFFFL); text.setSourceRange(txtStart, txtEnd - txtStart + 1); paramTag.fragments().add(text); // set param tag source range paramTag.setSourceRange(this.tagSourceStart, txtEnd - this.tagSourceStart + 1); } else { paramTag.setSourceRange(this.tagSourceStart, nameEnd - this.tagSourceStart + 1); paramTag.fragments().add(name); } pushOnAstStack(paramTag, true); return true; }
/* (non-Javadoc) * @see org.eclipse.jdt.internal.compiler.parser.AbstractCommentParser#pushText(int, int) */ protected void pushText(int start, int end) { // Create text element TextElement text = this.ast.newTextElement(); text.setText(new String(this.source, start, end - start)); text.setSourceRange(start, end - start); // Search previous tag on which to add the text element TagElement previousTag = null; int previousStart = start; if (this.astPtr == -1) { previousTag = this.ast.newTagElement(); previousTag.setSourceRange(start, end - start); pushOnAstStack(previousTag, true); } else { previousTag = (TagElement) this.astStack[this.astPtr]; previousStart = previousTag.getStartPosition(); } // If we're in a inline tag, then retrieve previous tag in its fragments List fragments = previousTag.fragments(); if (this.inlineTagStarted) { int size = fragments.size(); if (size == 0) { // no existing fragment => just add the element TagElement inlineTag = this.ast.newTagElement(); fragments.add(inlineTag); previousTag = inlineTag; } else { // If last fragment is a tag, then use it as previous tag ASTNode lastFragment = (ASTNode) fragments.get(size - 1); if (lastFragment.getNodeType() == ASTNode.TAG_ELEMENT) { previousTag = (TagElement) lastFragment; previousStart = previousTag.getStartPosition(); } } } // Add the text previousTag.fragments().add(text); previousTag.setSourceRange(previousStart, end - previousStart); this.textStart = -1; }