Skip to content

Commit

Permalink
Set trailing flag parameters as varargs (fixes #140)
Browse files Browse the repository at this point in the history
  • Loading branch information
jwharm committed Sep 29, 2024
1 parent 2e85680 commit aa3527b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,15 @@ void generateMethodParameters(MethodSpec.Builder builder,
var generator = new TypedValueGenerator(p);
var type = generator.getType(setOfBitfield);

// Trailing flags parameter can be variadic
if ((!setOfBitfield)
&& p.isBitfield()
&& p.isLastParameter()
&& (!p.isOutParameter())) {
type = ArrayTypeName.of(type);
builder.varargs(true);
}

if (generic && type.equals(ClassNames.GOBJECT))
type = ClassNames.GENERIC_T;

Expand Down Expand Up @@ -292,14 +301,19 @@ else if ((!ctor) || namedCtor)
continue;

TypedValueGenerator gen = new TypedValueGenerator(p);
String paramName = gen.getName();

if (p.isBitfield()) {
if (p.isOutParameter())
params.add(gen.getName() + " == null ? null : new $out:T($enumSet:T.of(" + gen.getName() + ".get()))");
else
params.add("$enumSet:T.of(" + gen.getName() + ")");
if (p.isOutParameter()) {
params.add(paramName + " == null ? null : new $out:T($enumSet:T.of(" + paramName + ".get()))");
} else if (p.isLastParameter()) {
params.add("(" + paramName + " == null ? null : (" + paramName + ".length == 0) ? $enumSet:T.noneOf($typeName:T.class) : $enumSet:T.of(" + paramName + "[0], " + paramName + "))");
stmt.add(null, "typeName", gen.getType(false));
} else {
params.add("$enumSet:T.of(" + paramName + ")");
}
} else {
params.add(gen.getName());
params.add(paramName);
}
}
stmt.add(params.toString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ public boolean allocatesMemory() {
&& target instanceof Alias a && a.type().isPrimitive();
}

public boolean isLastParameter() {
return this == parent().parameters().getLast();
}

public boolean nullable() {
return "1".equals(attr("nullable"))
|| "1".equals(attr("allow-none"))
Expand Down

0 comments on commit aa3527b

Please sign in to comment.