diff options
author | 2017-07-07 06:58:45 -0400 | |
---|---|---|
committer | 2017-07-07 07:09:05 -0400 | |
commit | 9e54088754a8fbe1b73c02e7e25e8f46c44bc7d5 (patch) | |
tree | e6b2f59bb776a534c5e31908c21b5665f0a6bfea /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 12a6a7a7536b063f923d53eb9f6c244849b69fc5 (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.java | 10 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/FunctionSignature.java | 6 |
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) { |