Ejemplo n.º 1
0
 /* (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;
 }
Ejemplo n.º 2
0
  /* (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;
  }