private boolean isAcceptableDeferredType(DeferredType arg, JavaType formal) { AbstractTypedTree tree = arg.tree(); if(tree.is(Tree.Kind.METHOD_REFERENCE, Tree.Kind.LAMBDA_EXPRESSION) && (!formal.symbol.isFlag(Flags.INTERFACE) || !findSamMethodArgsRecursively(formal).isPresent())) { return false; } // we accept all deferred type as we will resolve this later, but reject lambdas with incorrect arity return !tree.is(Tree.Kind.LAMBDA_EXPRESSION) || ((LambdaExpressionTree) tree).parameters().size() == findSamMethodArgs(formal).size(); }
private boolean isAcceptableDeferredType(DeferredType arg, JavaType formal) { AbstractTypedTree tree = arg.tree(); if(tree.is(Tree.Kind.METHOD_REFERENCE, Tree.Kind.LAMBDA_EXPRESSION) && (!formal.symbol.isFlag(Flags.INTERFACE) || !findSamMethodArgsRecursively(formal).isPresent())) { return false; } // we accept all deferred type as we will resolve this later, but reject lambdas with incorrect arity return !tree.is(Tree.Kind.LAMBDA_EXPRESSION) || ((LambdaExpressionTree) tree).parameters().size() == findSamMethodArgs(formal).size(); }
ClassJavaType type = (ClassJavaType) symbol.type; if (!symbol.isFlag(Flags.ANNOTATION)) {
ClassJavaType type = (ClassJavaType) symbol.type; if (!symbol.isFlag(Flags.ANNOTATION)) {
@Override public void visitNewClass(NewClassTree tree) { if (tree.enclosingExpression() != null) { resolveAs(tree.enclosingExpression(), JavaSymbol.VAR); } Resolve.Env newClassEnv = semanticModel.getEnv(tree); resolveAs(tree.identifier(), JavaSymbol.TYP, newClassEnv, false); if (tree.typeArguments() != null) { resolveAs((List<Tree>) tree.typeArguments(), JavaSymbol.TYP); } resolveAs((List<ExpressionTree>) tree.arguments(), JavaSymbol.VAR); NewClassTreeImpl newClassTreeImpl = (NewClassTreeImpl) tree; resolveConstructorSymbol(newClassTreeImpl.getConstructorIdentifier(), newClassEnv, getParameterTypes(tree.arguments())); ClassTree classBody = tree.classBody(); if (classBody != null) { JavaType type = (JavaType) tree.identifier().symbolType(); JavaType.ClassJavaType anonymousClassType = (JavaType.ClassJavaType) classBody.symbol().type(); if (type.getSymbol().isFlag(Flags.INTERFACE)) { anonymousClassType.interfaces = ImmutableList.of(type); anonymousClassType.supertype = symbols.objectType; } else { anonymousClassType.supertype = type; anonymousClassType.interfaces = ImmutableList.of(); } scan(classBody); registerType(tree, anonymousClassType); } else { registerType(tree, getType(tree.identifier())); } }
@Override public void visitNewClass(NewClassTree tree) { if (tree.enclosingExpression() != null) { resolveAs(tree.enclosingExpression(), JavaSymbol.VAR); } Resolve.Env newClassEnv = semanticModel.getEnv(tree); resolveAs(tree.identifier(), JavaSymbol.TYP, newClassEnv, false); resolveAs(tree.typeArguments(), JavaSymbol.TYP); resolveAs(tree.arguments(), JavaSymbol.VAR); NewClassTreeImpl newClassTreeImpl = (NewClassTreeImpl) tree; resolveConstructorSymbol(newClassTreeImpl.getConstructorIdentifier(), newClassEnv, getParameterTypes(tree.arguments())); ClassTree classBody = tree.classBody(); if (classBody != null) { JavaType type = (JavaType) tree.identifier().symbolType(); JavaType.ClassJavaType anonymousClassType = (JavaType.ClassJavaType) classBody.symbol().type(); if (type.getSymbol().isFlag(Flags.INTERFACE)) { anonymousClassType.interfaces = ImmutableList.of(type); anonymousClassType.supertype = symbols.objectType; } else { anonymousClassType.supertype = type; anonymousClassType.interfaces = ImmutableList.of(); } scan(classBody); registerType(tree, anonymousClassType); } else { registerType(tree, getType(tree.identifier())); } }