private GenericTypeListTree maybeParseGenericTypes() { if (!peek(TokenType.OPEN_ANGLE)) { return null; } SourcePosition start = getTreeStartLocation(); eat(TokenType.OPEN_ANGLE); scanner.incTypeParameterLevel(); LinkedHashMap<IdentifierToken, ParseTree> types = new LinkedHashMap<>(); do { IdentifierToken name = eatId(); ParseTree bound = null; if (peek(TokenType.EXTENDS)) { eat(TokenType.EXTENDS); bound = parseType(); } types.put(name, bound); if (peek(TokenType.COMMA)) { eat(TokenType.COMMA); } } while (peekId()); eat(TokenType.CLOSE_ANGLE); scanner.decTypeParameterLevel(); return new GenericTypeListTree(getTreeLocation(start), types); }
private GenericTypeListTree maybeParseGenericTypes() { if (!peek(TokenType.OPEN_ANGLE)) { return null; } SourcePosition start = getTreeStartLocation(); eat(TokenType.OPEN_ANGLE); scanner.incTypeParameterLevel(); LinkedHashMap<IdentifierToken, ParseTree> types = new LinkedHashMap<IdentifierToken, ParseTree>(); do { IdentifierToken name = eatId(); ParseTree bound = null; if (peek(TokenType.EXTENDS)) { eat(TokenType.EXTENDS); bound = parseType(); } types.put(name, bound); if (peek(TokenType.COMMA)) { eat(TokenType.COMMA); } } while (peekId()); eat(TokenType.CLOSE_ANGLE); scanner.decTypeParameterLevel(); return new GenericTypeListTree(getTreeLocation(start), types); }