aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/squareup/javapoet
diff options
context:
space:
mode:
authorJesse Wilson <jesse@swank.ca>2015-12-09 19:37:48 -0500
committerJesse Wilson <jesse@swank.ca>2015-12-09 19:37:48 -0500
commit251cb9a9797dabfe873ae6901fdabe8ea7c052cf (patch)
tree57e0087a269b387adc11191e7af4f59da1421fbe /src/main/java/com/squareup/javapoet
parent4522c42783ac897f26b98232ca39c76a803b07b1 (diff)
parent4ce8e427b533ec2a598ae9c967487713ce731662 (diff)
downloadjavapoet-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.java24
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;
}