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);
}
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);
}
Aggregations