public NewArrayTreeImpl newArrayInitializer( InternalSyntaxToken openBraceToken, Optional<InternalSyntaxToken> optionalComma, Optional<List<Tuple<ExpressionTree, Optional<InternalSyntaxToken>>>> rests, InternalSyntaxToken closeBraceToken) { ImmutableList.Builder<ExpressionTree> initializers = ImmutableList.builder(); ImmutableList.Builder<SyntaxToken> separators = ImmutableList.builder(); if (optionalComma.isPresent()) { separators.add(optionalComma.get()); } if (rests.isPresent()) { for (Tuple<ExpressionTree, Optional<InternalSyntaxToken>> rest : rests.get()) { initializers.add(rest.first()); if (rest.second().isPresent()) { separators.add(rest.second().get()); } } } return new NewArrayTreeImpl(ImmutableList.<ArrayDimensionTree>of(), new InitializerListTreeImpl(initializers.build(), separators.build())).completeWithCurlyBraces(openBraceToken, closeBraceToken); }
private void add(Object o) { if (o instanceof AstNode) { addChild((AstNode) o); } else if (o instanceof Optional) { Optional opt = (Optional) o; if (opt.isPresent()) { Object o2 = opt.get(); if (o2 instanceof AstNode) { addChild((AstNode) o2); } else if (o2 instanceof List) { for (Object o3 : (List) o2) { Preconditions.checkArgument(o3 instanceof AstNode, "Unsupported type: " + o3.getClass().getSimpleName()); addChild((AstNode) o3); } } else { throw new IllegalArgumentException("Unsupported type: " + o2.getClass().getSimpleName()); } } } else { throw new IllegalStateException("Unsupported argument type: " + o.getClass().getSimpleName()); } }
public LambdaParameterListTreeImpl newInferedParameters( InternalSyntaxToken openParenToken, Optional<Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>>> identifiersOpt, InternalSyntaxToken closeParenToken) { ImmutableList.Builder<VariableTreeImpl> params = ImmutableList.builder(); if (identifiersOpt.isPresent()) { Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>> identifiers = identifiersOpt.get(); VariableTreeImpl variable = identifiers.first(); params.add(variable); VariableTreeImpl previousVariable = variable; if (identifiers.second().isPresent()) { for (Tuple<InternalSyntaxToken, VariableTreeImpl> identifier : identifiers.second().get()) { variable = identifier.second(); params.add(variable); InternalSyntaxToken comma = identifier.first(); previousVariable.setEndToken(comma); previousVariable = variable; } } } return new LambdaParameterListTreeImpl(openParenToken, params.build(), closeParenToken); }
public LambdaParameterListTreeImpl newInferedParameters( InternalSyntaxToken openParenToken, Optional<Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>>> identifiersOpt, InternalSyntaxToken closeParenToken) { ImmutableList.Builder<VariableTreeImpl> params = ImmutableList.builder(); if (identifiersOpt.isPresent()) { Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>> identifiers = identifiersOpt.get(); VariableTreeImpl variable = identifiers.first(); params.add(variable); VariableTreeImpl previousVariable = variable; if (identifiers.second().isPresent()) { for (Tuple<InternalSyntaxToken, VariableTreeImpl> identifier : identifiers.second().get()) { variable = identifier.second(); params.add(variable); InternalSyntaxToken comma = identifier.first(); previousVariable.setEndToken(comma); previousVariable = variable; } } } return new LambdaParameterListTreeImpl(openParenToken, params.build(), closeParenToken); }
public ClassTreeImpl completeInterfaceDeclaration( AstNode interfaceTokenAstNode, AstNode identifierAstNode, Optional<TypeParameterListTreeImpl> typeParameters, Optional<Tuple<AstNode, QualifiedIdentifierListTreeImpl>> extendsClause, ClassTreeImpl partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(InternalSyntaxToken.create(identifierAstNode)); List<AstNode> children = Lists.newArrayList(); children.add(interfaceTokenAstNode); children.add(identifier); partial.completeIdentifier(identifier); if (typeParameters.isPresent()) { children.add(typeParameters.get()); partial.completeTypeParameters(typeParameters.get()); } if (extendsClause.isPresent()) { children.add(extendsClause.get().first()); children.add(extendsClause.get().second()); partial.completeInterfaces(extendsClause.get().second()); } partial.prependChildren(children); return partial; }
public ClassTreeImpl completeClassDeclaration( InternalSyntaxToken classSyntaxToken, InternalSyntaxToken identifierToken, Optional<TypeParameterListTreeImpl> typeParameters, Optional<Tuple<InternalSyntaxToken, TypeTree>> extendsClause, Optional<Tuple<InternalSyntaxToken, QualifiedIdentifierListTreeImpl>> implementsClause, ClassTreeImpl partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); partial.completeDeclarationKeyword(classSyntaxToken); partial.completeIdentifier(identifier); if (typeParameters.isPresent()) { partial.completeTypeParameters(typeParameters.get()); } if (extendsClause.isPresent()) { partial.completeSuperclass(extendsClause.get().first(), extendsClause.get().second()); } if (implementsClause.isPresent()) { InternalSyntaxToken implementsKeyword = implementsClause.get().first(); QualifiedIdentifierListTreeImpl interfaces = implementsClause.get().second(); partial.completeInterfaces(implementsKeyword, interfaces); } return partial; }
public ClassTreeImpl completeClassDeclaration( InternalSyntaxToken classSyntaxToken, InternalSyntaxToken identifierToken, Optional<TypeParameterListTreeImpl> typeParameters, Optional<Tuple<InternalSyntaxToken, TypeTree>> extendsClause, Optional<Tuple<InternalSyntaxToken, QualifiedIdentifierListTreeImpl>> implementsClause, ClassTreeImpl partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); partial.completeDeclarationKeyword(classSyntaxToken); partial.completeIdentifier(identifier); if (typeParameters.isPresent()) { partial.completeTypeParameters(typeParameters.get()); } if (extendsClause.isPresent()) { partial.completeSuperclass(extendsClause.get().first(), extendsClause.get().second()); } if (implementsClause.isPresent()) { InternalSyntaxToken implementsKeyword = implementsClause.get().first(); QualifiedIdentifierListTreeImpl interfaces = implementsClause.get().second(); partial.completeInterfaces(implementsKeyword, interfaces); } return partial; }
public NewArrayTreeImpl newArrayInitializer( InternalSyntaxToken openBraceToken, Optional<InternalSyntaxToken> optionalComma, Optional<List<Tuple<ExpressionTree, Optional<InternalSyntaxToken>>>> rests, InternalSyntaxToken closeBraceToken) { ImmutableList.Builder<ExpressionTree> initializers = ImmutableList.builder(); ImmutableList.Builder<SyntaxToken> separators = ImmutableList.builder(); if (optionalComma.isPresent()) { separators.add(optionalComma.get()); } if (rests.isPresent()) { for (Tuple<ExpressionTree, Optional<InternalSyntaxToken>> rest : rests.get()) { initializers.add(rest.first()); if (rest.second().isPresent()) { separators.add(rest.second().get()); } } } return new NewArrayTreeImpl(ImmutableList.<ArrayDimensionTree>of(), new InitializerListTreeImpl(initializers.build(), separators.build())).completeWithCurlyBraces(openBraceToken, closeBraceToken); }
public <T extends Tree> T newQualifiedIdentifier(ExpressionTree firstIdentifier, Optional<List<Tuple<InternalSyntaxToken, ExpressionTree>>> rests) { ExpressionTree result = firstIdentifier; if (rests.isPresent()) { for (Tuple<InternalSyntaxToken, ExpressionTree> rest : rests.get()) { InternalSyntaxToken dotToken = rest.first(); if (rest.second().is(Kind.IDENTIFIER)) { result = new MemberSelectExpressionTreeImpl(result, dotToken, (IdentifierTreeImpl) rest.second()); } else if (rest.second().is(Kind.PARAMETERIZED_TYPE)) { ParameterizedTypeTreeImpl parameterizedType = (ParameterizedTypeTreeImpl) rest.second(); IdentifierTreeImpl identifier = (IdentifierTreeImpl) parameterizedType.type(); result = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new ParameterizedTypeTreeImpl((TypeTree) result, (TypeArgumentListTreeImpl) parameterizedType.typeArguments()); } else { throw new IllegalArgumentException(); } } moveAnnotations((TypeTree) result, (TypeTree) firstIdentifier); } return (T) result; }
public <T extends Tree> T newQualifiedIdentifier(ExpressionTree firstIdentifier, Optional<List<Tuple<AstNode, ExpressionTree>>> rests) { ExpressionTree result = firstIdentifier; if (rests.isPresent()) { for (Tuple<AstNode, ExpressionTree> rest : rests.get()) { if (rest.second().is(Kind.IDENTIFIER)) { result = new MemberSelectExpressionTreeImpl(result, (IdentifierTreeImpl) rest.second(), (AstNode) result, rest.first(), (AstNode) rest.second()); } else if (rest.second().is(Kind.PARAMETERIZED_TYPE)) { ParameterizedTypeTreeImpl parameterizedType = (ParameterizedTypeTreeImpl) rest.second(); IdentifierTreeImpl identifier = (IdentifierTreeImpl) parameterizedType.type(); result = new MemberSelectExpressionTreeImpl(result, identifier, (AstNode) result, rest.first(), identifier); result = new ParameterizedTypeTreeImpl((TypeTree) result, (TypeArgumentListTreeImpl) parameterizedType.typeArguments()); } else { throw new IllegalArgumentException(); } } } return (T) result; }
public LambdaParameterListTreeImpl newInferedParameters( InternalSyntaxToken openParenToken, Optional<Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>>> identifiersOpt, InternalSyntaxToken closeParenToken) { ImmutableList.Builder<VariableTreeImpl> params = ImmutableList.builder(); if (identifiersOpt.isPresent()) { Tuple<VariableTreeImpl, Optional<List<Tuple<InternalSyntaxToken, VariableTreeImpl>>>> identifiers = identifiersOpt.get(); VariableTreeImpl variable = identifiers.first(); params.add(variable); VariableTreeImpl previousVariable = variable; if (identifiers.second().isPresent()) { for (Tuple<InternalSyntaxToken, VariableTreeImpl> identifier : identifiers.second().get()) { variable = identifier.second(); params.add(variable); InternalSyntaxToken comma = identifier.first(); previousVariable.setEndToken(comma); previousVariable = variable; } } } return new LambdaParameterListTreeImpl(openParenToken, params.build(), closeParenToken); }
public <T extends Tree> T newQualifiedIdentifier(ExpressionTree firstIdentifier, Optional<List<Tuple<InternalSyntaxToken, ExpressionTree>>> rests) { ExpressionTree result = firstIdentifier; if (rests.isPresent()) { for (Tuple<InternalSyntaxToken, ExpressionTree> rest : rests.get()) { InternalSyntaxToken dotToken = rest.first(); if (rest.second().is(Kind.IDENTIFIER)) { result = new MemberSelectExpressionTreeImpl(result, dotToken, (IdentifierTreeImpl) rest.second()); } else if (rest.second().is(Kind.PARAMETERIZED_TYPE)) { ParameterizedTypeTreeImpl parameterizedType = (ParameterizedTypeTreeImpl) rest.second(); IdentifierTreeImpl identifier = (IdentifierTreeImpl) parameterizedType.type(); result = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new ParameterizedTypeTreeImpl((TypeTree) result, (TypeArgumentListTreeImpl) parameterizedType.typeArguments()); } else { throw new IllegalArgumentException(); } } moveAnnotations(result, firstIdentifier); } return (T) result; }
public ClassTreeImpl completeClassDeclaration( InternalSyntaxToken classSyntaxToken, InternalSyntaxToken identifierToken, Optional<TypeParameterListTreeImpl> typeParameters, Optional<Tuple<InternalSyntaxToken, TypeTree>> extendsClause, Optional<Tuple<InternalSyntaxToken, QualifiedIdentifierListTreeImpl>> implementsClause, ClassTreeImpl partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); partial.completeDeclarationKeyword(classSyntaxToken); partial.completeIdentifier(identifier); if (typeParameters.isPresent()) { partial.completeTypeParameters(typeParameters.get()); } if (extendsClause.isPresent()) { partial.completeSuperclass(extendsClause.get().first(), extendsClause.get().second()); } if (implementsClause.isPresent()) { InternalSyntaxToken implementsKeyword = implementsClause.get().first(); QualifiedIdentifierListTreeImpl interfaces = implementsClause.get().second(); partial.completeInterfaces(implementsKeyword, interfaces); } return partial; }
public NewArrayTreeImpl newArrayCreatorWithDimension(InternalSyntaxToken openBracketToken, ExpressionTree expression, InternalSyntaxToken closeBracketToken, Optional<List<ArrayAccessExpressionTreeImpl>> arrayAccesses, Optional<List<Tuple<Optional<List<AnnotationTreeImpl>>, Tuple<InternalSyntaxToken, InternalSyntaxToken>>>> dims) { ImmutableList.Builder<ArrayDimensionTree> dimensions = ImmutableList.builder(); dimensions.add(new ArrayDimensionTreeImpl(openBracketToken, expression, closeBracketToken)); if (arrayAccesses.isPresent()) { for (ArrayAccessExpressionTreeImpl arrayAccess : arrayAccesses.get()) { dimensions.add(arrayAccess.dimension()); } } if (dims.isPresent()) { for (Tuple<Optional<List<AnnotationTreeImpl>>, Tuple<InternalSyntaxToken, InternalSyntaxToken>> dim : dims.get()) { Tuple<InternalSyntaxToken, InternalSyntaxToken> brackets = dim.second(); List<AnnotationTreeImpl> annotations = dim.first().or(ImmutableList.<AnnotationTreeImpl>of()); dimensions.add(new ArrayDimensionTreeImpl(annotations, brackets.first(), null, brackets.second())); } } return new NewArrayTreeImpl(dimensions.build(), InitializerListTreeImpl.emptyList()); }
public NewArrayTreeImpl newArrayInitializer( InternalSyntaxToken openBraceToken, Optional<InternalSyntaxToken> optionalComma, Optional<List<Tuple<ExpressionTree, Optional<InternalSyntaxToken>>>> rests, InternalSyntaxToken closeBraceToken) { ImmutableList.Builder<ExpressionTree> initializers = ImmutableList.builder(); ImmutableList.Builder<SyntaxToken> separators = ImmutableList.builder(); if (optionalComma.isPresent()) { separators.add(optionalComma.get()); } if (rests.isPresent()) { for (Tuple<ExpressionTree, Optional<InternalSyntaxToken>> rest : rests.get()) { initializers.add(rest.first()); if (rest.second().isPresent()) { separators.add(rest.second().get()); } } } return new NewArrayTreeImpl(ImmutableList.<ArrayDimensionTree>of(), new InitializerListTreeImpl(initializers.build(), separators.build())).completeWithCurlyBraces(openBraceToken, closeBraceToken); }
public VariableTreeImpl completeVariableDeclarator(AstNode identifierAstNode, Optional<List<Tuple<AstNode, AstNode>>> dimensions, Optional<VariableTreeImpl> partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(InternalSyntaxToken.create(identifierAstNode)); List<AstNode> children = Lists.newArrayList(); if (dimensions.isPresent()) { for (Tuple<AstNode, AstNode> dimension : dimensions.get()) { children.add(dimension.first()); children.add(dimension.second()); } } if (partial.isPresent()) { children.add(0, identifier); partial.get().prependChildren(children); return partial.get().completeIdentifierAndDims(identifier, dimensions.isPresent() ? dimensions.get().size() : 0); } else { return new VariableTreeImpl( identifier, dimensions.isPresent() ? dimensions.get().size() : 0, children); } }
public NewArrayTreeImpl newArrayCreatorWithDimension(InternalSyntaxToken openBracketToken, ExpressionTree expression, InternalSyntaxToken closeBracketToken, Optional<List<ArrayAccessExpressionTreeImpl>> arrayAccesses, Optional<List<Tuple<Optional<List<AnnotationTreeImpl>>, Tuple<InternalSyntaxToken, InternalSyntaxToken>>>> dims) { ImmutableList.Builder<ArrayDimensionTree> dimensions = ImmutableList.builder(); dimensions.add(new ArrayDimensionTreeImpl(openBracketToken, expression, closeBracketToken)); if (arrayAccesses.isPresent()) { for (ArrayAccessExpressionTreeImpl arrayAccess : arrayAccesses.get()) { dimensions.add(arrayAccess.dimension()); } } if (dims.isPresent()) { for (Tuple<Optional<List<AnnotationTreeImpl>>, Tuple<InternalSyntaxToken, InternalSyntaxToken>> dim : dims.get()) { Tuple<InternalSyntaxToken, InternalSyntaxToken> brackets = dim.second(); List<AnnotationTreeImpl> annotations = dim.first().or(ImmutableList.<AnnotationTreeImpl>of()); dimensions.add(new ArrayDimensionTreeImpl(annotations, brackets.first(), null, brackets.second())); } } return new NewArrayTreeImpl(dimensions.build(), InitializerListTreeImpl.emptyList()); }
public <T extends Tree> T newQualifiedIdentifier(ExpressionTree firstIdentifier, Optional<List<Tuple<InternalSyntaxToken, ExpressionTree>>> rests) { ExpressionTree result = firstIdentifier; if (rests.isPresent()) { for (Tuple<InternalSyntaxToken, ExpressionTree> rest : rests.get()) { InternalSyntaxToken dotToken = rest.first(); if (rest.second().is(Kind.IDENTIFIER)) { result = new MemberSelectExpressionTreeImpl(result, dotToken, (IdentifierTreeImpl) rest.second()); } else if (rest.second().is(Kind.PARAMETERIZED_TYPE)) { ParameterizedTypeTreeImpl parameterizedType = (ParameterizedTypeTreeImpl) rest.second(); IdentifierTreeImpl identifier = (IdentifierTreeImpl) parameterizedType.type(); result = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new ParameterizedTypeTreeImpl((TypeTree) result, (TypeArgumentListTreeImpl) parameterizedType.typeArguments()); } else { throw new IllegalArgumentException(); } } moveAnnotations((TypeTree) result, (TypeTree) firstIdentifier); } return (T) result; }
public ClassTreeImpl completeInterfaceDeclaration( InternalSyntaxToken interfaceToken, InternalSyntaxToken identifierToken, Optional<TypeParameterListTreeImpl> typeParameters, Optional<Tuple<InternalSyntaxToken, QualifiedIdentifierListTreeImpl>> extendsClause, ClassTreeImpl partial) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); partial.completeDeclarationKeyword(interfaceToken); partial.completeIdentifier(identifier); if (typeParameters.isPresent()) { partial.completeTypeParameters(typeParameters.get()); } if (extendsClause.isPresent()) { InternalSyntaxToken extendsKeyword = extendsClause.get().first(); QualifiedIdentifierListTreeImpl interfaces = extendsClause.get().second(); partial.completeInterfaces(extendsKeyword, interfaces); } return partial; }