public BindingKeyParser newParser() { return new BindingKeyParser(this); }
private void parseAnnotation() { /* * The call parser.parse() might have a side-effect on the current token type * See bug 264443 */ int token = this.scanner.token; BindingKeyParser parser = newParser(); parser.parse(); consumeParser(parser); consumeAnnotation(); this.isMalformed = parser.isMalformed; this.scanner.token = token; }
private void parseThrownExceptions() { /* * The call parser.parse() might have a side-effect on the current token type * See bug 264443 */ int token = this.scanner.token; while (this.scanner.isAtThrownStart() && !this.isMalformed) { this.scanner.skipThrownStart(); BindingKeyParser parser = newParser(); parser.isParsingThrownExceptions = true; parser.parse(); consumeParser(parser); consumeException(); this.isMalformed = parser.isMalformed; } this.scanner.token = token; }
private void parseField() { char[] fieldName = this.scanner.getTokenSource(); parseReturnType(); consumeField(fieldName); }
public void parse(boolean pauseAfterFullyQualifiedName) { if (!this.parsingPaused) { if (parseModule()) return; parseFullyQualifiedName(); parseSecondaryType(); if (pauseAfterFullyQualifiedName) { this.parsingPaused = true; if (!hasTypeName()) { consumeKey(); return; consumeTopLevelType(); parseInnerType(); parseGenericType(); parseInnerType(); } else if (this.scanner.isAtTypeArgumentStart()) parseParameterizedType(null/*top level type or member type with raw enclosing type*/, false/*no raw*/); else if (this.scanner.isAtRawTypeEnd()) parseRawType(); } else { consumeNonGenericType();
private void parseFullyQualifiedName() { if (this.scanner.isAtCaptureStart()) { parseCapture(); this.hasTypeName = false; return; case Scanner.PACKAGE: this.keyStart = 0; consumePackage(this.scanner.getTokenSource()); this.hasTypeName = false; return; case Scanner.TYPE: this.keyStart = this.scanner.start-1; consumeFullyQualifiedName(this.scanner.getTokenSource()); break; case Scanner.BASE_TYPE: this.keyStart = this.scanner.start-1; consumeBaseType(this.scanner.getTokenSource()); this.hasTypeName = false; break; case Scanner.ARRAY: this.keyStart = this.scanner.start; consumeArrayDimension(this.scanner.getTokenSource()); switch (this.scanner.nextToken()) { case Scanner.TYPE: consumeFullyQualifiedName(this.scanner.getTokenSource()); break; case Scanner.BASE_TYPE: consumeBaseType(this.scanner.getTokenSource()); this.hasTypeName = false;
private void parseCapture() { if (this.scanner.nextToken() != Scanner.CAPTURE) return; parseCaptureWildcard(); if (this.scanner.nextToken() != Scanner.TYPE) { malformedKey(); return; } char[] positionChars = this.scanner.getTokenSource(); int position = Integer.parseInt(new String(positionChars)); consumeCapture(position); this.scanner.skipTypeEnd(); }
private void parseInnerType() { if (!this.scanner.isAtMemberTypeStart() || this.scanner.nextToken() != Scanner.TYPE) return; char[] typeName = this.scanner.getTokenSource(); // Might not actually be an inner type but came here as a consequence of '$' being present in type name if (typeName.length == 0) return; if (Character.isDigit(typeName[0])) { // anonymous or local type int nextToken = Scanner.TYPE; while (this.scanner.isAtMemberTypeStart() && !this.isMalformed) nextToken = this.scanner.nextToken(); typeName = nextToken == Scanner.END ? this.scanner.source : CharOperation.subarray(this.scanner.source, this.keyStart, this.scanner.index+1); consumeLocalType(typeName); } else { consumeMemberType(typeName); parseInnerType(); } }
parseFullyQualifiedName(); parseSecondaryType(); if (pauseAfterFullyQualifiedName) { this.parsingPaused = true; if (!hasTypeName()) { consumeKey(); return; consumeTopLevelType(); parseInnerType(); parseGenericType(); parseInnerType(); } else if (this.scanner.isAtTypeArgumentStart()) parseParameterizedType(null/*top level type or member type with raw enclosing type*/, false/*no raw*/); else if (this.scanner.isAtRawTypeEnd()) parseRawType(); } else { consumeNonGenericType(); consumeType(); this.scanner.skipTypeEnd(); switch (this.scanner.nextToken()) {
private void parseFullyQualifiedName() { if (this.scanner.isAtCaptureStart()) { parseCapture(); this.hasTypeName = false; return; parseCapture18(); this.hasTypeName = false; return; case Scanner.PACKAGE: this.keyStart = 0; consumePackage(this.scanner.getTokenSource()); this.hasTypeName = false; return; case Scanner.TYPE: this.keyStart = this.scanner.start-1; consumeFullyQualifiedName(this.scanner.getTokenSource()); break; case Scanner.BASE_TYPE: this.keyStart = this.scanner.start-1; consumeBaseType(this.scanner.getTokenSource()); this.hasTypeName = false; break; case Scanner.ARRAY: this.keyStart = this.scanner.start; consumeArrayDimension(this.scanner.getTokenSource()); switch (this.scanner.nextToken()) { case Scanner.TYPE: consumeFullyQualifiedName(this.scanner.getTokenSource());
private void parseCapture() { if (this.scanner.nextToken() != Scanner.CAPTURE) return; parseCaptureWildcard(); if (this.scanner.nextToken() != Scanner.TYPE) { malformedKey(); return; } char[] positionChars = this.scanner.getTokenSource(); int position = Integer.parseInt(new String(positionChars)); consumeCapture(position); this.scanner.skipTypeEnd(); }
private void parseInnerType() { if (!this.scanner.isAtMemberTypeStart() || this.scanner.nextToken() != Scanner.TYPE) return; char[] typeName = this.scanner.getTokenSource(); // Might not actually be an inner type but came here as a consequence of '$' being present in type name if (typeName.length == 0) return; if (Character.isDigit(typeName[0])) { // anonymous or local type int nextToken = Scanner.TYPE; while (this.scanner.isAtMemberTypeStart() && !this.isMalformed) nextToken = this.scanner.nextToken(); typeName = nextToken == Scanner.END ? this.scanner.source : CharOperation.subarray(this.scanner.source, this.keyStart, this.scanner.index+1); consumeLocalType(typeName); } else { consumeMemberType(typeName); parseInnerType(); } }
private void parseField() { char[] fieldName = this.scanner.getTokenSource(); parseReturnType(); consumeField(fieldName); }
parseFullyQualifiedName(); parseSecondaryType(); if (pauseAfterFullyQualifiedName) { this.parsingPaused = true; if (!hasTypeName()) { consumeKey(); return; consumeTopLevelType(); parseInnerType(); parseGenericType(); parseInnerType(); } else if (this.scanner.isAtTypeArgumentStart()) parseParameterizedType(null/*top level type or member type with raw enclosing type*/, false/*no raw*/); else if (this.scanner.isAtRawTypeEnd()) parseRawType(); } else { consumeNonGenericType(); consumeType(); this.scanner.skipTypeEnd(); switch (this.scanner.nextToken()) {
private void parseFullyQualifiedName() { if (this.scanner.isAtCaptureStart()) { parseCapture(); this.hasTypeName = false; return; parseCapture18(); this.hasTypeName = false; return; case Scanner.PACKAGE: this.keyStart = 0; consumePackage(this.scanner.getTokenSource()); this.hasTypeName = false; return; case Scanner.TYPE: this.keyStart = this.scanner.start-1; consumeFullyQualifiedName(this.scanner.getTokenSource()); break; case Scanner.BASE_TYPE: this.keyStart = this.scanner.start-1; consumeBaseType(this.scanner.getTokenSource()); this.hasTypeName = false; break; case Scanner.ARRAY: this.keyStart = this.scanner.start; consumeArrayDimension(this.scanner.getTokenSource()); switch (this.scanner.nextToken()) { case Scanner.TYPE: consumeFullyQualifiedName(this.scanner.getTokenSource());
private void parseAnnotation() { /* * The call parser.parse() might have a side-effect on the current token type * See bug 264443 */ int token = this.scanner.token; BindingKeyParser parser = newParser(); parser.parse(); consumeParser(parser); consumeAnnotation(); this.isMalformed = parser.isMalformed; this.scanner.token = token; }
private void parseThrownExceptions() { /* * The call parser.parse() might have a side-effect on the current token type * See bug 264443 */ int token = this.scanner.token; while (this.scanner.isAtThrownStart() && !this.isMalformed) { this.scanner.skipThrownStart(); BindingKeyParser parser = newParser(); parser.isParsingThrownExceptions = true; parser.parse(); consumeParser(parser); consumeException(); this.isMalformed = parser.isMalformed; } this.scanner.token = token; }
private void parseCapture() { if (this.scanner.nextToken() != Scanner.CAPTURE) return; parseCaptureWildcard(); if (this.scanner.nextToken() != Scanner.TYPE) { malformedKey(); return; } char[] positionChars = this.scanner.getTokenSource(); int position = Integer.parseInt(new String(positionChars)); consumeCapture(position); this.scanner.skipTypeEnd(); }
private void parseInnerType() { if (!this.scanner.isAtMemberTypeStart() || this.scanner.nextToken() != Scanner.TYPE) return; char[] typeName = this.scanner.getTokenSource(); // Might not actually be an inner type but came here as a consequence of '$' being present in type name if (typeName.length == 0) return; if (Character.isDigit(typeName[0])) { // anonymous or local type int nextToken = Scanner.TYPE; while (this.scanner.isAtMemberTypeStart() && !this.isMalformed) nextToken = this.scanner.nextToken(); typeName = nextToken == Scanner.END ? this.scanner.source : CharOperation.subarray(this.scanner.source, this.keyStart, this.scanner.index+1); consumeLocalType(typeName); } else { consumeMemberType(typeName); parseInnerType(); } }
private void parseField() { char[] fieldName = this.scanner.getTokenSource(); parseReturnType(); consumeField(fieldName); }