Search in sources :

Example 1 with PlaceholderExpressionKey

use of com.google.errorprone.refaster.PlaceholderMethod.PlaceholderExpressionKey in project error-prone by google.

the class Template method expectedTypes.

/**
   * Returns a list of the expected types to be matched.  This consists of the argument types from
   * the @BeforeTemplate method, concatenated with the return types of expression placeholders, 
   * sorted by the name of the placeholder method.
   *
   * @throws CouldNotResolveImportException if a referenced type could not be resolved
   */
protected List<Type> expectedTypes(Inliner inliner) throws CouldNotResolveImportException {
    ArrayList<Type> result = new ArrayList<>();
    ImmutableList<UType> types = expressionArgumentTypes().values().asList();
    ImmutableList<String> argNames = expressionArgumentTypes().keySet().asList();
    for (int i = 0; i < argNames.size(); i++) {
        String argName = argNames.get(i);
        Optional<JCExpression> singleBinding = inliner.getOptionalBinding(new UFreeIdent.Key(argName));
        if (!singleBinding.isPresent()) {
            Optional<java.util.List<JCExpression>> exprs = inliner.getOptionalBinding(new URepeated.Key(argName));
            if (!exprs.isPresent() || exprs.get().isEmpty()) {
                // It is a repeated template variable and matches no expressions.
                continue;
            }
        }
        result.add(types.get(i).inline(inliner));
    }
    for (PlaceholderExpressionKey key : Ordering.natural().immutableSortedCopy(Iterables.filter(inliner.bindings.keySet(), PlaceholderExpressionKey.class))) {
        result.add(key.method.returnType().inline(inliner));
    }
    return List.from(result);
}
Also used : ArrayList(java.util.ArrayList) MethodType(com.sun.tools.javac.code.Type.MethodType) Type(com.sun.tools.javac.code.Type) JCExpression(com.sun.tools.javac.tree.JCTree.JCExpression) List(com.sun.tools.javac.util.List) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) PlaceholderExpressionKey(com.google.errorprone.refaster.PlaceholderMethod.PlaceholderExpressionKey)

Example 2 with PlaceholderExpressionKey

use of com.google.errorprone.refaster.PlaceholderMethod.PlaceholderExpressionKey in project error-prone by google.

the class Template method actualTypes.

/**
   * Returns a list of the actual types to be matched.  This consists of the types of the 
   * expressions bound to the @BeforeTemplate method parameters, concatenated with the types
   * of the expressions bound to expression placeholders, sorted by the name of the placeholder 
   * method.
   */
protected List<Type> actualTypes(Inliner inliner) {
    ArrayList<Type> result = new ArrayList<>();
    ImmutableList<String> argNames = expressionArgumentTypes().keySet().asList();
    for (int i = 0; i < expressionArgumentTypes().size(); i++) {
        String argName = argNames.get(i);
        Optional<JCExpression> singleBinding = inliner.getOptionalBinding(new UFreeIdent.Key(argName));
        if (singleBinding.isPresent()) {
            result.add(singleBinding.get().type);
        } else {
            Optional<java.util.List<JCExpression>> exprs = inliner.getOptionalBinding(new URepeated.Key(argName));
            if (exprs.isPresent() && !exprs.get().isEmpty()) {
                Type[] exprTys = new Type[exprs.get().size()];
                for (int j = 0; j < exprs.get().size(); j++) {
                    exprTys[j] = exprs.get().get(j).type;
                }
                // Get the least upper bound of the types of all expressions that the argument matches.
                // In the special case where exprs is empty, returns the "bottom" type, which is a
                // subtype of everything.
                result.add(inliner.types().lub(List.from(exprTys)));
            }
        }
    }
    for (PlaceholderExpressionKey key : Ordering.natural().immutableSortedCopy(Iterables.filter(inliner.bindings.keySet(), PlaceholderExpressionKey.class))) {
        result.add(inliner.getBinding(key).type);
    }
    return List.from(result);
}
Also used : ArrayList(java.util.ArrayList) MethodType(com.sun.tools.javac.code.Type.MethodType) Type(com.sun.tools.javac.code.Type) JCExpression(com.sun.tools.javac.tree.JCTree.JCExpression) List(com.sun.tools.javac.util.List) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) PlaceholderExpressionKey(com.google.errorprone.refaster.PlaceholderMethod.PlaceholderExpressionKey)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)2 PlaceholderExpressionKey (com.google.errorprone.refaster.PlaceholderMethod.PlaceholderExpressionKey)2 Type (com.sun.tools.javac.code.Type)2 MethodType (com.sun.tools.javac.code.Type.MethodType)2 JCExpression (com.sun.tools.javac.tree.JCTree.JCExpression)2 List (com.sun.tools.javac.util.List)2 ArrayList (java.util.ArrayList)2