private static int consumeWhitespace(char[] typeName, int pos, int length) { while (pos < length) { char currentChar = typeName[pos]; if (currentChar != ' ' && !ScannerHelper.isWhitespace(currentChar)) { break; } pos++; } return pos; } /**
public static boolean isJavaIdentifierPart(long complianceLevel, char high, char low) { return isJavaIdentifierPart(complianceLevel, toCodePoint(high, low)); } public static boolean isJavaIdentifierStart(char c) {
protected char peekChar() { int idx = this.index; char c = this.source[idx++]; if (c == '\\' && this.source[idx] == 'u') { int c1, c2, c3, c4; idx++; while (this.source[idx] == 'u') idx++; if (!(((c1 = ScannerHelper.getNumericValue(this.source[idx++])) > 15 || c1 < 0) || ((c2 = ScannerHelper.getNumericValue(this.source[idx++])) > 15 || c2 < 0) || ((c3 = ScannerHelper.getNumericValue(this.source[idx++])) > 15 || c3 < 0) || ((c4 = ScannerHelper.getNumericValue(this.source[idx++])) > 15 || c4 < 0))) { c = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4); } } return c; }
public static boolean isJavaIdentifierStart(long complianceLevel, char high, char low) { return isJavaIdentifierStart(complianceLevel, toCodePoint(high, low)); } public static boolean isJavaIdentifierStart(long complianceLevel, int codePoint) {
public static boolean isJavaIdentifierStart(char high, char low) { int codePoint = toCodePoint(high, low); switch((codePoint & 0x1F0000) >> 16) { case 0 : return Character.isJavaIdentifierStart((char) codePoint); case 1 : return isBitSet(Tables[START_INDEX][0], codePoint & 0xFFFF); case 2 : return isBitSet(Tables[START_INDEX][1], codePoint & 0xFFFF); } return false; }
if (CharOperation.prefixEquals(prefix, name)) { int currLen = prefix.length; boolean lastCharIsLetter = ScannerHelper.isLetter(prefix[currLen - 1]); if(!lastCharIsLetter || (lastCharIsLetter && name.length > currLen && ScannerHelper.isUpperCase(name[currLen]))) { if (bestLength < currLen && name.length != currLen) { withoutPrefixName = CharOperation.subarray(name, currLen, name.length); if (updateFirstCharacter) withoutSuffixName[0] = ScannerHelper.toLowerCase(withoutSuffixName[0]); return withoutSuffixName;
private static boolean validateCamelCasePattern(String stringPattern) { if (stringPattern == null) return true; // verify sting pattern validity int length = stringPattern.length(); boolean validCamelCase = true; boolean lowerCamelCase = false; int uppercase = 0; for (int i=0; i<length && validCamelCase; i++) { char ch = stringPattern.charAt(i); validCamelCase = i==0 ? ScannerHelper.isJavaIdentifierStart(ch) : ScannerHelper.isJavaIdentifierPart(ch); // at least one uppercase character is need in CamelCase pattern // (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=136313) if (ScannerHelper.isUpperCase(ch)) uppercase++; if (i==0) lowerCamelCase = uppercase == 0; } if (validCamelCase) { validCamelCase = lowerCamelCase ? uppercase > 0 : uppercase > 1 ; } return validCamelCase; }
public static boolean isJavaIdentifierStart(long complianceLevel, int codePoint) { if (complianceLevel <= ClassFileConstants.JDK1_6) { if (Tables == null) { initializeTable(); return isBitSet(Tables[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(Tables[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(Tables[START_INDEX][2], codePoint & 0xFFFF); initializeTable17(); return isBitSet(Tables7[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(Tables7[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(Tables7[START_INDEX][2], codePoint & 0xFFFF); initializeTable18(); return isBitSet(Tables8[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(Tables8[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(Tables8[START_INDEX][2], codePoint & 0xFFFF);
private static char[] suggestAccessorName(IJavaProject project, char[] fieldName, int modifiers) { char[] name = InternalNamingConventions.getBaseName(getFieldVariableKind(modifiers), project, fieldName, false); if (name.length > 0 && ScannerHelper.isLowerCase(name[0])) { if (name.length == 1 || !ScannerHelper.isUpperCase(name[1])) { name[0] = ScannerHelper.toUpperCase(name[0]); } } return name; }
int number = ScannerHelper.getHexadecimalValue(this.currentCharacter); if (number >= 0 && number <= 7) { boolean zeroToThreeNot = number > 3; if (ScannerHelper.isDigit(this.currentCharacter = this.source[this.currentPosition++])) { int digit = ScannerHelper.getHexadecimalValue(this.currentCharacter); if (digit >= 0 && digit <= 7) { number = (number * 8) + digit; if (ScannerHelper.isDigit(this.currentCharacter = this.source[this.currentPosition++])) { if (zeroToThreeNot) {// has read \NotZeroToThree OctalDigit Digit --> ignore last character this.currentPosition--; } else { digit = ScannerHelper.getHexadecimalValue(this.currentCharacter); if (digit >= 0 && digit <= 7){ // has read \ZeroToThree OctalDigit OctalDigit number = (number * 8) + digit;
public static boolean isJavaIdentifierStart(long complianceLevel, int codePoint) { if (complianceLevel <= ClassFileConstants.JDK1_6) { if (Tables == null) { initializeTable(); } switch((codePoint & 0x1F0000) >> 16) { case 0 : return isBitSet(Tables[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(Tables[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(Tables[START_INDEX][2], codePoint & 0xFFFF); } } else { // java 7 supports Unicode 6 if (Tables7 == null) { initializeTable17(); } switch((codePoint & 0x1F0000) >> 16) { case 0 : return isBitSet(Tables7[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(Tables7[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(Tables7[START_INDEX][2], codePoint & 0xFFFF); } } return false; } private static int toCodePoint(char high, char low) {
int number = ScannerHelper.getNumericValue(this.currentCharacter); if (number >= 0 && number <= 7) { boolean zeroToThreeNot = number > 3; if (ScannerHelper.isDigit(this.currentCharacter = this.source[this.currentPosition++])) { int digit = ScannerHelper.getNumericValue(this.currentCharacter); if (digit >= 0 && digit <= 7) { number = (number * 8) + digit; if (ScannerHelper.isDigit(this.currentCharacter = this.source[this.currentPosition++])) { if (zeroToThreeNot) {// has read \NotZeroToThree OctalDigit Digit --> ignore last character this.currentPosition--; } else { digit = ScannerHelper.getNumericValue(this.currentCharacter); if (digit >= 0 && digit <= 7){ // has read \ZeroToThree OctalDigit OctalDigit number = (number * 8) + digit;
private void computeValue(char[] token, int tokenLength, int radix, int j) { int digitValue; int computedValue = 0; while (j < tokenLength) { if ((digitValue = ScannerHelper.digit(token[j++],radix)) < 0) { return; /*constant stays null*/ } computedValue = (computedValue * radix) + digitValue ; } this.constant = IntConstant.fromValue(computedValue); } public IntLiteral convertToMinValue() {
public static boolean isJavaIdentifierPart(long complianceLevel, char c) { if (c < MAX_OBVIOUS) { return (ScannerHelper.OBVIOUS_IDENT_CHAR_NATURES[c] & ScannerHelper.C_IDENT_PART) != 0; } return isJavaIdentifierPart(complianceLevel, (int) c); } public static boolean isJavaIdentifierPart(long complianceLevel, int codePoint) {
while (this.source[this.index] == 'u') this.index++; if (!(((c1 = ScannerHelper.getNumericValue(this.source[this.index++])) > 15 || c1 < 0) || ((c2 = ScannerHelper.getNumericValue(this.source[this.index++])) > 15 || c2 < 0) || ((c3 = ScannerHelper.getNumericValue(this.source[this.index++])) > 15 || c3 < 0) || ((c4 = ScannerHelper.getNumericValue(this.source[this.index++])) > 15 || c4 < 0))) { first = (char) (((c1 * 16 + c2) * 16 + c3) * 16 + c4); } else { if (ScannerHelper.isWhitespace(c) || c == '*') { this.abort = true; this.deprecated = true;
public static boolean isJavaIdentifierStart(long complianceLevel, char c) { if (c < MAX_OBVIOUS) { return (ScannerHelper.OBVIOUS_IDENT_CHAR_NATURES[c] & ScannerHelper.C_IDENT_START) != 0; } return ScannerHelper.isJavaIdentifierStart(complianceLevel, (int) c); } public static boolean isJavaIdentifierStart(long complianceLevel, char high, char low) {
/** * The current context of the scanner w.r.t restricted keywords * */ enum ScanContext { EXPECTING_KEYWORD, EXPECTING_IDENTIFIER, AFTER_REQUIRES, INACTIVE } protected ScanContext scanContext = null;
private static boolean isJavaIdentifierStart0(int codePoint, long[][][] tables) { switch((codePoint & 0x1F0000) >> 16) { case 0 : return isBitSet(tables[START_INDEX][0], codePoint & 0xFFFF); case 1 : return isBitSet(tables[START_INDEX][1], codePoint & 0xFFFF); case 2 : return isBitSet(tables[START_INDEX][2], codePoint & 0xFFFF); } return false; } public static boolean isJavaIdentifierStart(long complianceLevel, int codePoint) {
if (CharOperation.prefixEquals(prefix, name)) { int currLen = prefix.length; boolean lastCharIsLetter = ScannerHelper.isLetter(prefix[currLen - 1]); if(!lastCharIsLetter || (lastCharIsLetter && name.length > currLen && ScannerHelper.isUpperCase(name[currLen]))) { if (bestLength < currLen && name.length != currLen) { withoutPrefixName = CharOperation.subarray(name, currLen, name.length); if (updateFirstCharacter) withoutSuffixName[0] = ScannerHelper.toLowerCase(withoutSuffixName[0]); return withoutSuffixName;
private static boolean validateCamelCasePattern(String stringPattern) { if (stringPattern == null) return true; // verify sting pattern validity int length = stringPattern.length(); boolean validCamelCase = true; boolean lowerCamelCase = false; int uppercase = 0; for (int i=0; i<length && validCamelCase; i++) { char ch = stringPattern.charAt(i); validCamelCase = i==0 ? ScannerHelper.isJavaIdentifierStart(ch) : ScannerHelper.isJavaIdentifierPart(ch); // at least one uppercase character is need in CamelCase pattern // (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=136313) if (ScannerHelper.isUpperCase(ch)) uppercase++; if (i==0) lowerCamelCase = uppercase == 0; } if (validCamelCase) { validCamelCase = lowerCamelCase ? uppercase > 0 : uppercase > 1 ; } return validCamelCase; }