public MethodReferenceTreeImpl newTypeMethodReference(Tree type, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(type, doubleColonToken); }
public MethodReferenceTreeImpl(Tree expression, SyntaxToken doubleColon, AstNode... children) { super(JavaLexer.METHOD_REFERENCE); this.expression = expression; this.doubleColon = doubleColon; for (AstNode child : children) { addChild(child); } }
public ExpressionTree completeMethodReference(MethodReferenceTreeImpl partial, Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken newOrIdentifierToken) { partial.complete(typeArguments.orNull(), new IdentifierTreeImpl(newOrIdentifierToken)); return partial; }
public ExpressionTree completeMethodReference(MethodReferenceTreeImpl partial, Optional<TypeArgumentListTreeImpl> typeArguments, AstNode newOrIdentifierToken) { TypeArguments typeArgs = null; if (typeArguments.isPresent()) { typeArgs = typeArguments.get(); partial.addChild((AstNode) typeArgs); } IdentifierTree identifier = new IdentifierTreeImpl(InternalSyntaxToken.create(newOrIdentifierToken)); partial.addChild(newOrIdentifierToken); partial.complete(typeArgs, identifier); return partial; }
private void resolveMethodReference(JavaSymbol.MethodJavaSymbol samMethod, MethodReferenceTreeImpl methodRefTree) { JavaType methodRefType = (JavaType) methodRefTree.symbolType(); JavaType samReturnType = (JavaType) samMethod.returnType().type(); List<JavaType> samMethodArgs = resolve.findSamMethodArgs(methodRefType); if (JavaKeyword.NEW.getValue().equals(methodRefTree.method().name())) { Type constructorType = ((AbstractTypedTree) methodRefTree.expression()).symbolType(); samMethodArgs = addImplicitOuterClassParameter(samMethodArgs, (JavaSymbol.TypeJavaSymbol) constructorType.symbol()); } Resolution resolution = resolve.findMethodReference(semanticModel.getEnv(methodRefTree), samMethodArgs, methodRefTree); JavaSymbol methodSymbol = resolution.symbol(); if (methodSymbol.isMethodSymbol()) { IdentifierTree methodIdentifier = methodRefTree.method(); addMethodRefReference(methodIdentifier, methodSymbol); setMethodRefType(methodRefTree, methodRefType, resolution.type()); JavaType capturedReturnType = resolve.resolveTypeSubstitution(samReturnType, methodRefType); JavaType refinedReturnType = ((MethodJavaType) methodIdentifier.symbolType()).resultType(); if ("<init>".equals(methodSymbol.name)) { refinedReturnType = refinedTypeForConstructor(capturedReturnType, refinedReturnType); } if (refinedReturnType instanceof DeferredType) { ((DeferredType) refinedReturnType).setTree((AbstractTypedTree) methodRefTree.method()); } refineType(methodRefTree, methodRefType, capturedReturnType, refinedReturnType); } else { handleNewArray(methodRefTree, methodRefType, samReturnType); } }
@Override public void visitMethodReference(MethodReferenceTree methodReferenceTree) { MethodReferenceTreeImpl methodRefTree = (MethodReferenceTreeImpl) methodReferenceTree; if (methodRefTree.isTypeSet() && methodReferenceTree.typeArguments() == null) { resolve.getSamMethod((JavaType) methodRefTree.symbolType()).ifPresent(samMethod -> resolveMethodReference(samMethod, methodRefTree)); } else { // TODO : SONARJAVA-1663 : consider type arguments for method resolution and substitution scan(methodReferenceTree.typeArguments()); resolveAs(methodReferenceTree.expression(), JavaSymbol.VAR | JavaSymbol.TYP); registerType(methodRefTree, symbols.deferedType(methodRefTree)); } }
public ExpressionTree completeMethodReference(MethodReferenceTreeImpl partial, Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken newOrIdentifierToken) { partial.complete(typeArguments.orNull(), new IdentifierTreeImpl(newOrIdentifierToken)); return partial; }
private void resolveMethodReference(JavaSymbol.MethodJavaSymbol samMethod, MethodReferenceTreeImpl methodRefTree) { JavaType methodRefType = (JavaType) methodRefTree.symbolType(); JavaType samReturnType = (JavaType) samMethod.returnType().type(); List<JavaType> samMethodArgs = resolve.findSamMethodArgs(methodRefType); if (JavaKeyword.NEW.getValue().equals(methodRefTree.method().name())) { Type constructorType = ((AbstractTypedTree) methodRefTree.expression()).symbolType(); samMethodArgs = addImplicitOuterClassParameter(samMethodArgs, (JavaSymbol.TypeJavaSymbol) constructorType.symbol()); } Resolution resolution = resolve.findMethodReference(semanticModel.getEnv(methodRefTree), samMethodArgs, methodRefTree); JavaSymbol methodSymbol = resolution.symbol(); if (methodSymbol.isMethodSymbol()) { IdentifierTree methodIdentifier = methodRefTree.method(); addMethodRefReference(methodIdentifier, methodSymbol); setMethodRefType(methodRefTree, methodRefType, resolution.type()); JavaType capturedReturnType = resolve.resolveTypeSubstitution(samReturnType, methodRefType); JavaType refinedReturnType = ((MethodJavaType) methodIdentifier.symbolType()).resultType(); if ("<init>".equals(methodSymbol.name)) { refinedReturnType = refinedTypeForConstructor(capturedReturnType, refinedReturnType); } if (refinedReturnType instanceof DeferredType) { ((DeferredType) refinedReturnType).setTree((AbstractTypedTree) methodRefTree.method()); } refineType(methodRefTree, methodRefType, capturedReturnType, refinedReturnType); } else { handleNewArray(methodRefTree, methodRefType, samReturnType); } }
@Override public void visitMethodReference(MethodReferenceTree methodReferenceTree) { MethodReferenceTreeImpl methodRefTree = (MethodReferenceTreeImpl) methodReferenceTree; if (methodRefTree.isTypeSet() && methodReferenceTree.typeArguments() == null) { resolve.getSamMethod((JavaType) methodRefTree.symbolType()).ifPresent(samMethod -> resolveMethodReference(samMethod, methodRefTree)); } else { // TODO : SONARJAVA-1663 : consider type arguments for method resolution and substitution scan(methodReferenceTree.typeArguments()); resolveAs(methodReferenceTree.expression(), JavaSymbol.VAR | JavaSymbol.TYP); registerType(methodRefTree, symbols.deferedType(methodRefTree)); } }
public MethodReferenceTreeImpl newPrimaryMethodReference(ExpressionTree expression, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(expression, doubleColonToken); }
public ExpressionTree completeMethodReference(MethodReferenceTreeImpl partial, Optional<TypeArgumentListTreeImpl> typeArguments, InternalSyntaxToken newOrIdentifierToken) { TypeArguments typeArgs = null; if (typeArguments.isPresent()) { typeArgs = typeArguments.get(); } partial.complete(typeArgs, new IdentifierTreeImpl(newOrIdentifierToken)); return partial; }
public MethodReferenceTreeImpl newPrimaryMethodReference(ExpressionTree expression, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(expression, doubleColonToken); }
public MethodReferenceTreeImpl newTypeMethodReference(Tree type, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(type, doubleColonToken); }
public MethodReferenceTreeImpl newPrimaryMethodReference(ExpressionTree expression, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(expression, doubleColonToken); }
public MethodReferenceTreeImpl newTypeMethodReference(Tree type, InternalSyntaxToken doubleColonToken) { return new MethodReferenceTreeImpl(type, doubleColonToken); }
public MethodReferenceTreeImpl newSuperMethodReference(InternalSyntaxToken superToken, InternalSyntaxToken doubleColonToken) { IdentifierTree superIdentifier = new IdentifierTreeImpl(superToken); return new MethodReferenceTreeImpl(superIdentifier, doubleColonToken); }
public MethodReferenceTreeImpl newSuperMethodReference(InternalSyntaxToken superToken, InternalSyntaxToken doubleColonToken) { IdentifierTree superIdentifier = new IdentifierTreeImpl(superToken); return new MethodReferenceTreeImpl(superIdentifier, doubleColonToken); }
public MethodReferenceTreeImpl newPrimaryMethodReference(ExpressionTree expression, AstNode doubleColonToken) { return new MethodReferenceTreeImpl(expression, InternalSyntaxToken.create(doubleColonToken), (AstNode) expression, doubleColonToken); }
public MethodReferenceTreeImpl newSuperMethodReference(InternalSyntaxToken superToken, InternalSyntaxToken doubleColonToken) { IdentifierTree superIdentifier = new IdentifierTreeImpl(superToken); return new MethodReferenceTreeImpl(superIdentifier, doubleColonToken); }
public MethodReferenceTreeImpl newTypeMethodReference(Tree type, AstNode doubleColonToken) { return new MethodReferenceTreeImpl(type, InternalSyntaxToken.create(doubleColonToken), (AstNode) type, doubleColonToken); }