diff options
author | Jesse Wilson <jesse@swank.ca> | 2015-12-09 19:37:48 -0500 |
---|---|---|
committer | Jesse Wilson <jesse@swank.ca> | 2015-12-09 19:37:48 -0500 |
commit | 251cb9a9797dabfe873ae6901fdabe8ea7c052cf (patch) | |
tree | 57e0087a269b387adc11191e7af4f59da1421fbe /src/main/java/com/squareup/javapoet | |
parent | 4522c42783ac897f26b98232ca39c76a803b07b1 (diff) | |
parent | 4ce8e427b533ec2a598ae9c967487713ce731662 (diff) | |
download | javapoet-251cb9a9797dabfe873ae6901fdabe8ea7c052cf.tar.gz |
Merge pull request #375 from sormuras/master
Unused indexed arguments do fail now.
Diffstat (limited to 'src/main/java/com/squareup/javapoet')
-rw-r--r-- | src/main/java/com/squareup/javapoet/CodeBlock.java | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/main/java/com/squareup/javapoet/CodeBlock.java b/src/main/java/com/squareup/javapoet/CodeBlock.java index 5fff86f..28eebe5 100644 --- a/src/main/java/com/squareup/javapoet/CodeBlock.java +++ b/src/main/java/com/squareup/javapoet/CodeBlock.java @@ -111,7 +111,8 @@ public final class CodeBlock { public Builder add(String format, Object... args) { boolean hasRelative = false; boolean hasIndexed = false; - int parameterCount = 0; + int relativeParameterCount = 0; + int[] indexedParameterCount = new int[args.length]; for (int p = 0; p < format.length(); ) { if (format.charAt(p) != '$') { @@ -145,11 +146,12 @@ public final class CodeBlock { if (indexStart < indexEnd) { index = Integer.parseInt(format.substring(indexStart, indexEnd)) - 1; hasIndexed = true; + indexedParameterCount[index % args.length]++; // modulo is needed, checked below anyway } else { - index = parameterCount; + index = relativeParameterCount; hasRelative = true; + relativeParameterCount++; } - parameterCount++; checkArgument(index >= 0 && index < args.length, "index %d for '%s' not in range (received %s arguments)", @@ -177,8 +179,20 @@ public final class CodeBlock { formatParts.add("$" + c); } - checkArgument(parameterCount >= args.length, - "unused arguments: expected %s, received %s", parameterCount, args.length); + if (hasRelative) { + checkArgument(relativeParameterCount >= args.length, + "unused arguments: expected %s, received %s", relativeParameterCount, args.length); + } + if (hasIndexed) { + List<String> unused = new ArrayList<>(); + for (int i = 0; i < args.length; i++) { + if (indexedParameterCount[i] == 0) { + unused.add("$" + (i + 1)); + } + } + String s = unused.size() == 1 ? "" : "s"; + checkArgument(unused.isEmpty(), "unused argument%s: %s", s, Util.join(", ", unused)); + } return this; } |