Example usage for org.eclipse.jdt.internal.compiler.parser ScannerHelper C_JLS_SPACE

List of usage examples for org.eclipse.jdt.internal.compiler.parser ScannerHelper C_JLS_SPACE

Introduction

In this page you can find the example usage for org.eclipse.jdt.internal.compiler.parser ScannerHelper C_JLS_SPACE.

Prototype

int C_JLS_SPACE

To view the source code for org.eclipse.jdt.internal.compiler.parser ScannerHelper C_JLS_SPACE.

Click Source Link

Usage

From source file:org.eclipse.jdt.internal.compiler.parser.Parser.java

License:Open Source License

/**
 * Look for a specific tag comment leading a given source range (comment located after any statement in astStack)
 * @param rangeEnd int//from  w  ww. ja v  a 2 s .co  m
 * @return boolean
 */
public boolean hasLeadingTagComment(char[] commentPrefixTag, int rangeEnd) {
    int iComment = this.scanner.commentPtr;
    if (iComment < 0)
        return false; // no comment available
    int iStatement = this.astLengthPtr;
    if (iStatement < 0 || this.astLengthStack[iStatement] <= 1)
        return false; // no statement available
    // Fallthrough comment must be located after the previous statement
    ASTNode lastNode = this.astStack[this.astPtr];
    int rangeStart = lastNode.sourceEnd;
    previousComment: for (; iComment >= 0; iComment--) {
        int commentStart = this.scanner.commentStarts[iComment];
        if (commentStart < 0)
            commentStart = -commentStart; // line comments have negative start positions
        // ignore comments before start
        if (commentStart < rangeStart)
            return false; // no more comments in range
        // ignore comments after end
        if (commentStart > rangeEnd)
            continue previousComment;
        // found last comment in range - only check the last comment in range
        char[] source = this.scanner.source;
        int charPos = commentStart + 2; // skip // or /*
        // tag can be leaded by optional spaces
        for (; charPos < rangeEnd; charPos++) {
            char c = source[charPos];
            if (c >= ScannerHelper.MAX_OBVIOUS
                    || (ScannerHelper.OBVIOUS_IDENT_CHAR_NATURES[c] & ScannerHelper.C_JLS_SPACE) == 0) {
                break;
            }
        }
        for (int iTag = 0, length = commentPrefixTag.length; iTag < length; iTag++, charPos++) {
            if (charPos >= rangeEnd)
                return false; // comment is too small to host tag
            if (source[charPos] != commentPrefixTag[iTag])
                return false;
        }
        return true;
    }
    return false;
}