Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ private MethodSpec aggregator() {
}

builder.addStatement(
"return $T.create($L)",
"return new $T($L)",
aggregatorImplementer.implementation(),
Stream.concat(
Stream.concat(hasWarnings ? Stream.of("warnings") : Stream.of(), Stream.of("driverContext, channels")),
Expand All @@ -188,7 +188,7 @@ private MethodSpec groupingAggregator() {
}

builder.addStatement(
"return $T.create($L)",
"return new $T($L)",
groupingAggregatorImplementer.implementation(),
Stream.concat(
Stream.concat(hasWarnings ? Stream.of("warnings") : Stream.of(), Stream.of("channels, driverContext")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ private TypeSpec type() {
builder.addSuperinterface(AGGREGATOR_FUNCTION);
builder.addField(
FieldSpec.builder(LIST_AGG_FUNC_DESC, "INTERMEDIATE_STATE_DESC", Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
.initializer(initInterState())
.initializer(initIntermediateStateDescription())
.build()
);

Expand All @@ -196,7 +196,6 @@ private TypeSpec type() {
builder.addField(p.type(), p.name(), Modifier.PRIVATE, Modifier.FINAL);
}

builder.addMethod(create());
builder.addMethod(ctor());
builder.addMethod(intermediateStateDesc());
builder.addMethod(intermediateBlockCount());
Expand All @@ -217,51 +216,7 @@ private TypeSpec type() {
return builder.build();
}

private MethodSpec create() {
MethodSpec.Builder builder = MethodSpec.methodBuilder("create");
builder.addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(implementation);
if (warnExceptions.isEmpty() == false) {
builder.addParameter(WARNINGS, "warnings");
}
builder.addParameter(DRIVER_CONTEXT, "driverContext");
builder.addParameter(LIST_INTEGER, "channels");
for (Parameter p : createParameters) {
builder.addParameter(p.type(), p.name());
}
if (createParameters.isEmpty()) {
builder.addStatement(
"return new $T($LdriverContext, channels, $L)",
implementation,
warnExceptions.isEmpty() ? "" : "warnings, ",
callInit()
);
} else {
builder.addStatement(
"return new $T($LdriverContext, channels, $L, $L)",
implementation,
warnExceptions.isEmpty() ? "" : "warnings, ",
callInit(),
createParameters.stream().map(p -> p.name()).collect(joining(", "))
);
}
return builder.build();
}

private CodeBlock callInit() {
String initParametersCall = init.getParameters()
.stream()
.map(p -> TypeName.get(p.asType()).equals(BIG_ARRAYS) ? "driverContext.bigArrays()" : p.getSimpleName().toString())
.collect(joining(", "));
CodeBlock.Builder builder = CodeBlock.builder();
if (aggState.declaredType().isPrimitive()) {
builder.add("new $T($T.$L($L))", aggState.type(), declarationType, init.getSimpleName(), initParametersCall);
} else {
builder.add("$T.$L($L)", declarationType, init.getSimpleName(), initParametersCall);
}
return builder.build();
}

private CodeBlock initInterState() {
private CodeBlock initIntermediateStateDescription() {
CodeBlock.Builder builder = CodeBlock.builder();
builder.add("List.of(");
boolean addComma = false;
Expand All @@ -275,23 +230,36 @@ private CodeBlock initInterState() {
}

private MethodSpec ctor() {
MethodSpec.Builder builder = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC);
MethodSpec.Builder builder = MethodSpec.constructorBuilder();
if (warnExceptions.isEmpty() == false) {
builder.addParameter(WARNINGS, "warnings");
}
builder.addParameter(DRIVER_CONTEXT, "driverContext");
builder.addParameter(LIST_INTEGER, "channels");
builder.addParameter(aggState.type, "state");

for (Parameter p : createParameters()) {
p.buildCtor(builder);
}

if (warnExceptions.isEmpty() == false) {
builder.addStatement("this.warnings = warnings");
}
builder.addStatement("this.driverContext = driverContext");
builder.addStatement("this.channels = channels");
builder.addStatement("this.state = state");
builder.addStatement("this.state = $L", initState());
return builder.build();
}

for (Parameter p : createParameters()) {
p.buildCtor(builder);
private CodeBlock initState() {
String initParametersCall = init.getParameters()
.stream()
.map(p -> TypeName.get(p.asType()).equals(BIG_ARRAYS) ? "driverContext.bigArrays()" : p.getSimpleName().toString())
.collect(joining(", "));
CodeBlock.Builder builder = CodeBlock.builder();
if (aggState.declaredType().isPrimitive()) {
builder.add("new $T($T.$L($L))", aggState.type(), declarationType, init.getSimpleName(), initParametersCall);
} else {
builder.add("$T.$L($L)", declarationType, init.getSimpleName(), initParametersCall);
}
return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ private TypeSpec type() {
builder.addSuperinterface(GROUPING_AGGREGATOR_FUNCTION);
builder.addField(
FieldSpec.builder(LIST_AGG_FUNC_DESC, "INTERMEDIATE_STATE_DESC", Modifier.PRIVATE, Modifier.STATIC, Modifier.FINAL)
.initializer(initInterState())
.initializer(initIntermediateStateDescription())
.build()
);
builder.addField(aggState.type(), "state", Modifier.PRIVATE, Modifier.FINAL);
Expand All @@ -198,7 +198,6 @@ private TypeSpec type() {
builder.addField(p.type(), p.name(), Modifier.PRIVATE, Modifier.FINAL);
}

builder.addMethod(create());
builder.addMethod(ctor());
builder.addMethod(intermediateStateDesc());
builder.addMethod(intermediateBlockCount());
Expand All @@ -219,37 +218,42 @@ private TypeSpec type() {
return builder.build();
}

private MethodSpec create() {
MethodSpec.Builder builder = MethodSpec.methodBuilder("create");
builder.addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(implementation);
private CodeBlock initIntermediateStateDescription() {
CodeBlock.Builder builder = CodeBlock.builder();
builder.add("List.of(");
boolean addComma = false;
for (var interState : intermediateState) {
if (addComma) builder.add(",");
builder.add("$Wnew $T($S, $T." + interState.elementType() + ")", INTERMEDIATE_STATE_DESC, interState.name(), ELEMENT_TYPE);
addComma = true;
}
builder.add("$W$W)");
return builder.build();
}

private MethodSpec ctor() {
MethodSpec.Builder builder = MethodSpec.constructorBuilder();
if (warnExceptions.isEmpty() == false) {
builder.addParameter(WARNINGS, "warnings");
}
builder.addParameter(LIST_INTEGER, "channels");
builder.addParameter(DRIVER_CONTEXT, "driverContext");

for (Parameter p : createParameters) {
builder.addParameter(p.type(), p.name());
builder.addStatement("this.$N = $N", p.name(), p.name());
}
if (createParameters.isEmpty()) {
builder.addStatement(
"return new $T($Lchannels, $L, driverContext)",
implementation,
warnExceptions.isEmpty() ? "" : "warnings, ",
callInit()
);
} else {
builder.addStatement(
"return new $T($Lchannels, $L, driverContext, $L)",
implementation,
warnExceptions.isEmpty() ? "" : "warnings, ",
callInit(),
createParameters.stream().map(p -> p.name()).collect(joining(", "))
);

if (warnExceptions.isEmpty() == false) {
builder.addStatement("this.warnings = warnings");
}
builder.addStatement("this.channels = channels");
builder.addStatement("this.state = $L", initState());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Would be nice to make the ungrouped/grouped agg implementors, and by consequence the code they generate, as similar as possible, for comparison/learning purposes. If you agree, we can declare the class members in the same order as in AggregatorImplementer; context, then channels, then state.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Let me do that in a follow up. Because it'll be another huge PR that you can scan over. Rather than merge into this one.

builder.addStatement("this.driverContext = driverContext");
return builder.build();
}

private CodeBlock callInit() {
private CodeBlock initState() {
String initParametersCall = init.getParameters()
.stream()
.map(p -> TypeName.get(p.asType()).equals(BIG_ARRAYS) ? "driverContext.bigArrays()" : p.getSimpleName().toString())
Expand All @@ -269,41 +273,6 @@ private CodeBlock callInit() {
return builder.build();
}

private CodeBlock initInterState() {
CodeBlock.Builder builder = CodeBlock.builder();
builder.add("List.of(");
boolean addComma = false;
for (var interState : intermediateState) {
if (addComma) builder.add(",");
builder.add("$Wnew $T($S, $T." + interState.elementType() + ")", INTERMEDIATE_STATE_DESC, interState.name(), ELEMENT_TYPE);
addComma = true;
}
builder.add("$W$W)");
return builder.build();
}

private MethodSpec ctor() {
MethodSpec.Builder builder = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC);
if (warnExceptions.isEmpty() == false) {
builder.addParameter(WARNINGS, "warnings");
}
builder.addParameter(LIST_INTEGER, "channels");
builder.addParameter(aggState.type(), "state");
builder.addParameter(DRIVER_CONTEXT, "driverContext");
if (warnExceptions.isEmpty() == false) {
builder.addStatement("this.warnings = warnings");
}
builder.addStatement("this.channels = channels");
builder.addStatement("this.state = state");
builder.addStatement("this.driverContext = driverContext");

for (Parameter p : createParameters) {
builder.addParameter(p.type(), p.name());
builder.addStatement("this.$N = $N", p.name(), p.name());
}
return builder.build();
}

private MethodSpec intermediateStateDesc() {
MethodSpec.Builder builder = MethodSpec.methodBuilder("intermediateStateDesc");
builder.addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(LIST_AGG_FUNC_DESC);
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading