aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
authorGravatar laurentlb <laurentlb@google.com>2017-07-07 06:58:45 -0400
committerGravatar John Cater <jcater@google.com>2017-07-07 07:09:05 -0400
commit9e54088754a8fbe1b73c02e7e25e8f46c44bc7d5 (patch)
treee6b2f59bb776a534c5e31908c21b5665f0a6bfea /src/main/java/com/google/devtools/build/lib/syntax
parent12a6a7a7536b063f923d53eb9f6c244849b69fc5 (diff)
Improve error message when calling a builtin function with wrong type
Error message is simpler and doesn't show the type of all arguments. RELNOTES: None. PiperOrigin-RevId: 161187134
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java6
2 files changed, 7 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
index b3c742f148..5852386729 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
@@ -186,17 +186,15 @@ public class BuiltinFunction extends BaseFunction {
if (args[i] != null && !types[i].isAssignableFrom(args[i].getClass())) {
String paramName =
i < len ? signature.getSignature().getNames().get(i) : extraArgs[i - len].name();
- int extraArgsCount = (extraArgs == null) ? 0 : extraArgs.length;
throw new EvalException(
loc,
String.format(
- "method %s is not applicable for arguments %s: "
- + "'%s' is '%s', but should be '%s'",
- getShortSignature(),
- printTypeString(args, args.length - extraArgsCount),
+ "argument '%s' has type '%s', but should be '%s'\nin call to builtin %s %s",
paramName,
EvalUtils.getDataTypeName(args[i]),
- EvalUtils.getDataTypeNameFromClass(types[i])));
+ EvalUtils.getDataTypeNameFromClass(types[i]),
+ hasSelfArgument() ? "method" : "function",
+ getShortSignature()));
}
}
throw badCallException(loc, e, args);
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java b/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java
index 3b12fd5425..5dc2a6a5c6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java
@@ -391,7 +391,7 @@ public abstract class FunctionSignature implements Serializable {
public StringBuilder toStringBuilder(
final StringBuilder sb,
final boolean showDefaults,
- final boolean skipMissingTypeNames,
+ final boolean showTypes,
final boolean skipFirstMandatory) {
FunctionSignature signature = getSignature();
Shape shape = signature.getShape();
@@ -431,9 +431,9 @@ public abstract class FunctionSignature implements Serializable {
// a) there is no type defined (such as in user-defined functions) or
// b) the type is java.lang.Object.
boolean typeDefined = types != null && types.get(i) != null;
- if (typeDefined || !skipMissingTypeNames) {
+ if (typeDefined && showTypes) {
printer.append(": ");
- printer.append(typeDefined ? types.get(i).toString() : "object");
+ printer.append(types.get(i).toString());
}
}
public void mandatory(int i) {