} else if (selector.is(Kind.METHOD_INVOCATION)) { MethodInvocationTreeImpl methodInvocation = (MethodInvocationTreeImpl) selector; IdentifierTreeImpl identifier = (IdentifierTreeImpl) methodInvocation.methodSelect(); (AstNode) result, methodInvocation.getFirstChild(JavaPunctuator.DOT), identifier); children.add((ArgumentListTreeImpl) methodInvocation.arguments()); result = new MethodInvocationTreeImpl(memberSelect, methodInvocation.typeArguments(), methodInvocation.arguments(), children.toArray(new AstNode[0])); } else if (selector.is(Kind.NEW_CLASS)) { NewClassTreeImpl newClass = (NewClassTreeImpl) selector;
public MethodInvocationTreeImpl(ExpressionTree methodSelect, @Nullable TypeArguments typeArguments, List<ExpressionTree> arguments, AstNode... children) { super(Kind.METHOD_INVOCATION); this.methodSelect = Preconditions.checkNotNull(methodSelect); this.typeArguments = typeArguments; this.arguments = Preconditions.checkNotNull(arguments); for (AstNode child : children) { addChild(child); } }
private static TypeSubstitution inferedSubstitution(MethodInvocationTreeImpl mit) { JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) mit.symbol(); JavaType methodReturnedType = (JavaType) mit.symbolType(); TypeSubstitution typeSubstitution = new TypeSubstitution(); if(methodReturnedType.isTagged(JavaType.PARAMETERIZED)) { JavaType resultType = ((MethodJavaType) methodSymbol.type).resultType; if(resultType.isTagged(JavaType.PARAMETERIZED)) { typeSubstitution =((ParametrizedTypeJavaType) resultType).typeSubstitution.combine(((ParametrizedTypeJavaType) methodReturnedType).typeSubstitution); } else if(resultType.isTagged(JavaType.TYPEVAR)) { typeSubstitution.add((TypeVariableJavaType) resultType, methodReturnedType); } } return typeSubstitution; }
MethodInvocationTreeImpl mit = (MethodInvocationTreeImpl) tree; Resolve.Env methodEnv = semanticModel.getEnv(tree); if(mit.isTypeSet() && mit.symbol().isMethodSymbol()) { TypeSubstitution typeSubstitution = inferedSubstitution(mit); List<JavaType> argTypes = getParameterTypes(tree.arguments()); JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) mit.symbol(); List<JavaType> formals = methodSymbol.parameterTypes().stream().map(t -> (JavaType) t).collect(Collectors.toList()); List<JavaType> inferedArgTypes = resolve.resolveTypeSubstitution(formals, typeSubstitution); Type formal = inferedArgTypes.get(Math.min(i, size - 1)); if (formal != arg) { AbstractTypedTree argTree = (AbstractTypedTree) mit.arguments().get(i); argTree.setInferedType(formal); argTree.accept(this); JavaType resultType = ((MethodJavaType) mit.symbol().type()).resultType; if(resultType.symbol.owner == mit.symbol()) { resultType = (JavaType) mit.symbolType(); mit.setSymbol(symbol); if(returnType != null && returnType.isTagged(JavaType.DEFERRED)) { ((DeferredType) returnType).setTree(mit);
public ExpressionTree newIdentifierOrMethodInvocation(Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken identifierToken, Optional<ArgumentListTreeImpl> arguments) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); ExpressionTree result = identifier; if (arguments.isPresent()) { result = new MethodInvocationTreeImpl(identifier, typeArguments.orNull(), arguments.get()); } return result; }
@Override public SyntaxToken firstToken() { if (typeArguments() != null && methodSelect.is(Tree.Kind.MEMBER_SELECT)) { ExpressionTree expression = ((MemberSelectExpressionTree) methodSelect).expression(); SyntaxToken firstToken = expression.firstToken(); if (firstToken != null) { return firstToken; } } return super.firstToken(); }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { Tree methodSelect = tree.methodSelect(); Resolve.Env methodEnv = semanticModel.getEnv(tree); scan(tree.arguments()); scan(tree.typeArguments()); List<JavaType> argTypes = getParameterTypes(tree.arguments()); List<JavaType> typeParamTypes = Lists.newArrayList(); if(tree.typeArguments() != null ) { typeParamTypes = getParameterTypes(tree.typeArguments()); } Resolve.Resolution resolution = resolveMethodSymbol(methodSelect, methodEnv, argTypes, typeParamTypes); JavaSymbol symbol = resolution.symbol(); ((MethodInvocationTreeImpl) tree).setSymbol(symbol); registerType(tree, resolution.type()); }
MethodInvocationTreeImpl mit = (MethodInvocationTreeImpl) tree; Resolve.Env methodEnv = semanticModel.getEnv(tree); if(mit.isTypeSet() && mit.symbol().isMethodSymbol()) { TypeSubstitution typeSubstitution = inferedSubstitution(mit); List<JavaType> argTypes = getParameterTypes(tree.arguments()); JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) mit.symbol(); List<JavaType> formals = methodSymbol.parameterTypes().stream().map(t -> (JavaType) t).collect(Collectors.toList()); List<JavaType> inferedArgTypes = resolve.resolveTypeSubstitution(formals, typeSubstitution); Type formal = inferedArgTypes.get(Math.min(i, size - 1)); if (formal != arg) { AbstractTypedTree argTree = (AbstractTypedTree) mit.arguments().get(i); argTree.setInferedType(formal); argTree.accept(this); JavaType resultType = ((MethodJavaType) mit.symbol().type()).resultType; if(resultType.symbol.owner == mit.symbol()) { resultType = (JavaType) mit.symbolType(); mit.setSymbol(symbol); if(returnType != null && returnType.isTagged(JavaType.DEFERRED)) { ((DeferredType) returnType).setTree(mit);
public ExpressionTree newIdentifierOrMethodInvocation(Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken identifierToken, Optional<ArgumentListTreeImpl> arguments) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); ExpressionTree result = identifier; if (arguments.isPresent()) { result = new MethodInvocationTreeImpl(identifier, typeArguments.orNull(), arguments.get()); } return result; }
@Override public SyntaxToken firstToken() { if (typeArguments() != null && methodSelect.is(Tree.Kind.MEMBER_SELECT)) { ExpressionTree expression = ((MemberSelectExpressionTree) methodSelect).expression(); SyntaxToken firstToken = expression.firstToken(); if (firstToken != null) { return firstToken; } } return super.firstToken(); }
@Override public void visitMethodInvocation(MethodInvocationTree tree) { Tree methodSelect = tree.methodSelect(); Resolve.Env methodEnv = semanticModel.getEnv(tree); scan(tree.arguments()); scan(tree.typeArguments()); List<JavaType> argTypes = getParameterTypes(tree.arguments()); List<JavaType> typeParamTypes = Lists.newArrayList(); if(tree.typeArguments() != null ) { typeParamTypes = getParameterTypes(tree.typeArguments()); } Resolve.Resolution resolution = resolveMethodSymbol(methodSelect, methodEnv, argTypes, typeParamTypes); JavaSymbol symbol = resolution.symbol(); ((MethodInvocationTreeImpl) tree).setSymbol(symbol); registerType(tree, resolution.type()); }
} else { MethodInvocationTreeImpl methodInvocation = (MethodInvocationTreeImpl) selector; IdentifierTreeImpl identifier = (IdentifierTreeImpl) methodInvocation.methodSelect(); MemberSelectExpressionTreeImpl memberSelect = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new MethodInvocationTreeImpl(memberSelect, methodInvocation.typeArguments(), (ArgumentListTreeImpl) methodInvocation.arguments());
public ExpressionTree newIdentifierOrMethodInvocation(Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken identifierToken, Optional<ArgumentListTreeImpl> arguments) { IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); ExpressionTree result = identifier; if (arguments.isPresent()) { result = new MethodInvocationTreeImpl(identifier, typeArguments.orNull(), arguments.get()); } return result; }
private static TypeSubstitution inferedSubstitution(MethodInvocationTreeImpl mit) { JavaSymbol.MethodJavaSymbol methodSymbol = (JavaSymbol.MethodJavaSymbol) mit.symbol(); JavaType methodReturnedType = (JavaType) mit.symbolType(); TypeSubstitution typeSubstitution = new TypeSubstitution(); if(methodReturnedType.isTagged(JavaType.PARAMETERIZED)) { JavaType resultType = ((MethodJavaType) methodSymbol.type).resultType; if(resultType.isTagged(JavaType.PARAMETERIZED)) { typeSubstitution =((ParametrizedTypeJavaType) resultType).typeSubstitution.combine(((ParametrizedTypeJavaType) methodReturnedType).typeSubstitution); } else if(resultType.isTagged(JavaType.TYPEVAR)) { typeSubstitution.add((TypeVariableJavaType) resultType, methodReturnedType); } } return typeSubstitution; }
} else { MethodInvocationTreeImpl methodInvocation = (MethodInvocationTreeImpl) selector; IdentifierTreeImpl identifier = (IdentifierTreeImpl) methodInvocation.methodSelect(); MemberSelectExpressionTreeImpl memberSelect = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new MethodInvocationTreeImpl(memberSelect, methodInvocation.typeArguments(), (ArgumentListTreeImpl) methodInvocation.arguments());
public ExpressionTree newIdentifierOrMethodInvocation(Optional<TypeArgumentListTreeImpl> typeArguments, AstNode identifierAstNode, Optional<ArgumentListTreeImpl> arguments) { InternalSyntaxToken identifierToken = InternalSyntaxToken.create(identifierAstNode); IdentifierTreeImpl identifier = new IdentifierTreeImpl(identifierToken); if (typeArguments.isPresent()) { identifier.prependChildren(typeArguments.get()); } ExpressionTree result = identifier; if (arguments.isPresent()) { result = new MethodInvocationTreeImpl(identifier, typeArguments.orNull(), arguments.get(), identifier, arguments.get()); } return result; }
} else { MethodInvocationTreeImpl methodInvocation = (MethodInvocationTreeImpl) selector; IdentifierTreeImpl identifier = (IdentifierTreeImpl) methodInvocation.methodSelect(); MemberSelectExpressionTreeImpl memberSelect = new MemberSelectExpressionTreeImpl(result, dotToken, identifier); result = new MethodInvocationTreeImpl(memberSelect, methodInvocation.typeArguments(), (ArgumentListTreeImpl) methodInvocation.arguments());