Skip to content

Commit ee3af06

Browse files
knutwalkers1ck
authored andcommitted
Allow ConfigParsers to opt-out of the builder generation
1 parent c04b766 commit ee3af06

File tree

5 files changed

+35
-24
lines changed

5 files changed

+35
-24
lines changed

annotations/src/main/java/org/neo4j/gds/annotation/Configuration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
*/
4848
String value() default "";
4949

50+
boolean generateBuilder() default true;
51+
5052
/**
5153
* By default, a configuration field is resolved in the {@link org.neo4j.gds.core.CypherMapWrapper} parameter with the method name as the expected key.
5254
* This annotation changes the key to look up to use {@link org.neo4j.gds.annotation.Configuration.Key#value()} instead.

config-generator/src/main/java/org/neo4j/gds/proc/ConfigParser.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,12 @@ final class ConfigParser {
5959
this.typeUtils = typeUtils;
6060
}
6161

62-
Spec process(TypeMirror configType) {
62+
Spec process(TypeMirror configType, Configuration configAnnotation) {
6363
TypeElement configElement = asTypeElement(configType);
64-
SpecBuilder config = SpecBuilder.builder().root(configElement).rootType(configType);
64+
SpecBuilder config = SpecBuilder.builder()
65+
.root(configElement)
66+
.rootType(configType)
67+
.generateBuilder(configAnnotation.generateBuilder());
6568
process(config, new HashSet<>(), configElement, configElement);
6669
return config.build();
6770
}

config-generator/src/main/java/org/neo4j/gds/proc/ConfigurationProcessingStep.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ private ProcessResult process(Element element) {
8383
);
8484
return ProcessResult.INVALID;
8585
}
86-
Spec configSpec = configParser.process(element.asType());
86+
var configAnnotation = element.getAnnotation(Configuration.class);
87+
Spec configSpec = configParser.process(element.asType(), configAnnotation);
8788
if (!validClassName(element, configSpec)) {
8889
messager.printMessage(
8990
Diagnostic.Kind.ERROR,

config-generator/src/main/java/org/neo4j/gds/proc/GenerateConfiguration.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,28 +132,33 @@ private TypeSpec process(Spec config, String packageName, String generatedClassN
132132
builder.addMethod(constructor);
133133
}
134134

135-
ClassName builderClassName = ClassName.get(packageName, generatedClassName + ".Builder");
136-
TypeSpec configBuilderClass = new GenerateConfigurationBuilder(configParameterName)
137-
.defineConfigBuilder(
138-
TypeName.get(config.rootType()),
139-
implMembers,
140-
builderClassName,
141-
generatedClassName,
142-
constructor.parameters,
143-
factory
144-
);
135+
builder.addMethods(defineMemberMethods(config, fieldDefinitions.names()));
136+
137+
if (config.generateBuilder()) {
138+
139+
ClassName builderClassName = ClassName.get(packageName, generatedClassName + ".Builder");
140+
TypeSpec configBuilderClass = new GenerateConfigurationBuilder(configParameterName)
141+
.defineConfigBuilder(
142+
TypeName.get(config.rootType()),
143+
implMembers,
144+
builderClassName,
145+
generatedClassName,
146+
constructor.parameters,
147+
factory
148+
);
145149

146-
MethodSpec builderFactoryMethod = MethodSpec.methodBuilder("builder")
147-
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
148-
.addStatement("return new $T()", builderClassName)
149-
.returns(builderClassName)
150-
.build();
150+
MethodSpec builderFactoryMethod = MethodSpec.methodBuilder("builder")
151+
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
152+
.addStatement("return new $T()", builderClassName)
153+
.returns(builderClassName)
154+
.build();
151155

152-
return builder
153-
.addMethods(defineMemberMethods(config, fieldDefinitions.names()))
154-
.addMethod(builderFactoryMethod)
155-
.addType(configBuilderClass)
156-
.build();
156+
builder
157+
.addMethod(builderFactoryMethod)
158+
.addType(configBuilderClass);
159+
}
160+
161+
return builder.build();
157162
}
158163

159164
private TypeSpec.Builder classBuilder(Spec config, String packageName, String generatedClassName) {

config-generator/src/main/java/org/neo4j/gds/proc/Spec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
import static com.google.auto.common.MoreElements.isAnnotationPresent;
4545

4646
@GenerateBuilder
47-
record Spec(TypeElement root, TypeMirror rootType, List<Member> members) {
47+
record Spec(TypeElement root, TypeMirror rootType, List<Member> members, boolean generateBuilder) {
4848

4949
@GenerateBuilder
5050
record Member(

0 commit comments

Comments
 (0)