Skip to content

Commit

Permalink
chore: add spotless formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
jonas-grgt committed Mar 21, 2024
1 parent 8b832af commit 184fdc4
Show file tree
Hide file tree
Showing 19 changed files with 615 additions and 239 deletions.
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

Bob serves as a lightweight alternative to Lombok's `@Builder` annotation.
Its retention policy is `SOURCE`, ensuring it won't clutter your bytecode.
Bob generates a builder in the form of a pure Java source code file,
which the Java compiler can pick up as a regular source file.
Bob generates a builder in the form of pure Java source code.

## Installation

Expand All @@ -20,7 +19,7 @@ which the Java compiler can pick up as a regular source file.

## Getting Started

Annotate the class you which to be able to build with `@Buildable`
Annotate the class with `@Buildable` to generate a builder for it.

```java
package my.garage;
Expand Down Expand Up @@ -108,7 +107,7 @@ public class Car {

### Records

Records work as normal java classes
Bob can work with Records work as normal java classes

```java
@Buildable
Expand Down
315 changes: 315 additions & 0 deletions eclipse-formatter.xml

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<maven-compiler-plugin.version>3.12.1</maven-compiler-plugin.version>
<maven-aseembly-plugin.version>3.6.0</maven-aseembly-plugin.version>
<maven-source-plugin.version>3.3.0</maven-source-plugin.version>
<maven-spotless-plugin.version>2.41.1</maven-spotless-plugin.version>

<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
Expand Down Expand Up @@ -124,6 +125,37 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>${maven-spotless-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<formats>
<format>
<includes>
<include>.gitattributes</include>
<include>.gitignore</include>
</includes>
<trimTrailingWhitespace/>
<endWithNewline/>
</format>
</formats>
<java>
<eclipse>
<version>4.26</version>
<file>${project.basedir}/eclipse-formatter.xml</file>
</eclipse>
</java>
</configuration>
</plugin>

</plugins>
</build>

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/jonasg/bob/Buildable.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*
* @return the list of fields to be excluded to be included in the builder.
*/
String[] excludes() default {};
String[] excludes() default {};

/**
* The prefix for the generated setters.
Expand All @@ -28,13 +28,13 @@
*
* @return the prefix for the generated setters.
*/
String prefix() default "";
String prefix() default "";

/**
* The package name of the generated builder.
* Defaults to the package of the annotated class.
*
* @return the package name of the generated builder
*/
String packageName() default "";
String packageName() default "";
}
3 changes: 2 additions & 1 deletion src/main/java/io/jonasg/bob/BuildableConstructor.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
/**
* Marks a constructor as buildable.
* This means that a builder will be generated
* using the selected constructor as opposed to the one with the most parameters.
* using the selected constructor as opposed to the one with the most
* parameters.
*/
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.CONSTRUCTOR)
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/io/jonasg/bob/BuildableProcessor.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.jonasg.bob;


import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
Expand Down Expand Up @@ -32,8 +31,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
TypeDefinition sourceDefinition = typeDefinitionFactory.typeDefinitionForElement(element);
try {
builderGenerator.generate(sourceDefinition, buildable);
}
catch (Exception e) {
} catch (Exception e) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element);
}
});
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/io/jonasg/bob/BuilderGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@

public class BuilderGenerator {

private final Filer filer;
private final Filer filer;

public BuilderGenerator(Filer filer) {
this.filer = filer;
}
public BuilderGenerator(Filer filer) {
this.filer = filer;
}

public void generate(TypeDefinition typeDefinition, Buildable buildable) {
public void generate(TypeDefinition typeDefinition, Buildable buildable) {
TypeSpec typeSpec = TypeSpecFactory.produce(typeDefinition, buildable);
String result;
if (!buildable.packageName().isEmpty()) {
Expand All @@ -22,6 +22,6 @@ public void generate(TypeDefinition typeDefinition, Buildable buildable) {
result = String.format("%s.builder", typeDefinition.packageName());
}
TypeWriter.write(filer, result, typeSpec);
}
}

}
6 changes: 3 additions & 3 deletions src/main/java/io/jonasg/bob/Formatter.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

public final class Formatter {

public static String format(String source, Object ... args) {
return String.format(source.replaceAll("\\$\\w+", "%s"), args);
}
public static String format(String source, Object... args) {
return String.format(source.replaceAll("\\$\\w+", "%s"), args);
}
}
27 changes: 17 additions & 10 deletions src/main/java/io/jonasg/bob/TypeSpecFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,11 @@ private MethodSpec buildMethod() {
MethodSpec.Builder builder = MethodSpec.methodBuilder("build")
.addModifiers(Modifier.PUBLIC)
.returns(className(this.typeDefinition));
builder.addStatement("return new $T($L)", className(this.typeDefinition), this.constructorDefinition.parameters().stream()
.map(param -> this.eligibleConstructorParams.contains(param) ? param.name() : defaultForType(param.type()))
.collect(Collectors.joining(", ")));
builder.addStatement("return new $T($L)", className(this.typeDefinition),
this.constructorDefinition.parameters().stream()
.map(param -> this.eligibleConstructorParams.contains(param) ? param.name()
: defaultForType(param.type()))
.collect(Collectors.joining(", ")));
return builder.build();
}

Expand All @@ -137,7 +139,8 @@ private MethodSpec of() {
.addTypeVariables(builderTypeGenerics())
.returns(builderType());
for (ParameterDefinition parameter : this.typeDefinition.genericParameters())
of.addParameter(ParameterizedTypeName.get(ClassName.get("java.lang", "Class"), TypeVariableName.get(parameter.name())), String.format("%stype", parameter.name()));
of.addParameter(ParameterizedTypeName.get(ClassName.get("java.lang", "Class"),
TypeVariableName.get(parameter.name())), String.format("%stype", parameter.name()));
of.addCode(body.build());
return of.build();
}
Expand All @@ -157,7 +160,8 @@ private TypeName builderType() {
result = this.buildable.packageName();
else
result = String.format("%s.builder", this.typeDefinition.packageName());
return ParameterizedTypeName.get(ClassName.get(result, builderTypeName(this.typeDefinition)), typeVariableNames.toArray(new TypeName[typeVariableNames.size()]));
return ParameterizedTypeName.get(ClassName.get(result, builderTypeName(this.typeDefinition)),
typeVariableNames.toArray(new TypeName[typeVariableNames.size()]));
}

private List<TypeVariableName> builderTypeGenerics() {
Expand All @@ -175,11 +179,11 @@ private List<TypeVariableName> builderTypeGenerics() {
private TypeName className(TypeDefinition definition) {
if (definition.genericParameters().isEmpty()) {
if (definition.isNested())
return ClassName.get(definition.packageName(), definition.nestedIn()).nestedClass(definition.typeName());
return ClassName.get(definition.packageName(), definition.nestedIn())
.nestedClass(definition.typeName());
else
return ClassName.get(definition.packageName(), definition.fullTypeName());
}
else {
} else {
List<TypeVariableName> genericParameters = toTypeVariableNames(definition);
return ParameterizedTypeName.get(ClassName.get(definition.packageName(), definition.fullTypeName()),
genericParameters.toArray(new TypeName[genericParameters.size()]));
Expand All @@ -189,7 +193,9 @@ private TypeName className(TypeDefinition definition) {
private List<TypeVariableName> toTypeVariableNames(TypeDefinition definition) {
List<TypeVariableName> genericParameters = new ArrayList<>();
for (GenericParameterDefinition parameterDefinition : definition.genericParameters())
genericParameters.add(TypeVariableName.get(parameterDefinition.name(), simpleClassNames(parameterDefinition.bounds()).toArray(new TypeName[parameterDefinition.bounds().size()])));
genericParameters
.add(TypeVariableName.get(parameterDefinition.name(), simpleClassNames(parameterDefinition.bounds())
.toArray(new TypeName[parameterDefinition.bounds().size()])));
return genericParameters;
}

Expand All @@ -204,7 +210,8 @@ private String fieldName(String name) {
if (buildable.prefix().isEmpty()) {
return name;
}
return Formatter.format("$prefix$name", buildable.prefix(), name.substring(0, 1).toUpperCase() + name.substring(1));
return Formatter.format("$prefix$name", buildable.prefix(),
name.substring(0, 1).toUpperCase() + name.substring(1));
}

private boolean notExcluded(ParameterDefinition field) {
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/io/jonasg/bob/TypeWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import com.squareup.javapoet.TypeSpec;

public class TypeWriter {
public static void write(Filer filer, String packageName, TypeSpec spec) {
JavaFile javaFile = JavaFile.builder(packageName, spec)
.build();
try {
javaFile.writeTo(filer);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void write(Filer filer, String packageName, TypeSpec spec) {
JavaFile javaFile = JavaFile.builder(packageName, spec)
.build();
try {
javaFile.writeTo(filer);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
20 changes: 10 additions & 10 deletions src/main/java/io/jonasg/bob/definitions/ConstructorDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,27 @@

public final class ConstructorDefinition {

private final List<ParameterDefinition> parameters;
private final List<ParameterDefinition> parameters;

private final Set<Modifier> modifiers;
private final Set<Modifier> modifiers;

private final List<? extends AnnotationMirror> annotations;

public ConstructorDefinition(List<ParameterDefinition> parameters,
Set<Modifier> modifiers,
List<? extends AnnotationMirror> annotations) {
this.parameters = parameters;
this.modifiers = modifiers;
this.parameters = parameters;
this.modifiers = modifiers;
this.annotations = annotations;
}

public boolean isPrivate() {
return modifiers.contains(Modifier.PRIVATE);
}
public boolean isPrivate() {
return modifiers.contains(Modifier.PRIVATE);
}

public List<ParameterDefinition> parameters() {
return parameters;
}
public List<ParameterDefinition> parameters() {
return parameters;
}

public boolean isAnnotatedWith(Class<?> type) {
return annotations.stream()
Expand Down
20 changes: 10 additions & 10 deletions src/main/java/io/jonasg/bob/definitions/FieldDefinition.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@

public class FieldDefinition {

private final String name;
private final String name;

private final TypeMirror type;

public FieldDefinition(String name, TypeMirror type) {
this.name = name;
public FieldDefinition(String name, TypeMirror type) {
this.name = name;
this.type = type;
}
}

public String name() {
return name;
}
public String name() {
return name;
}

public TypeMirror type() {
return type;
}
public TypeMirror type() {
return type;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

public class GenericParameterDefinition extends ParameterDefinition {

private final List<SimpleTypeDefinition> bounds;
private final List<SimpleTypeDefinition> bounds;

public GenericParameterDefinition(TypeMirror type, String name, List<SimpleTypeDefinition> bounds) {
super(type, name);
this.bounds = bounds;
}
public GenericParameterDefinition(TypeMirror type, String name, List<SimpleTypeDefinition> bounds) {
super(type, name);
this.bounds = bounds;
}

public List<SimpleTypeDefinition> bounds() {
return bounds;
}
public List<SimpleTypeDefinition> bounds() {
return bounds;
}

}
14 changes: 7 additions & 7 deletions src/main/java/io/jonasg/bob/definitions/MethodDefinition.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package io.jonasg.bob.definitions;

public class MethodDefinition {
private final String name;
private final String name;

public MethodDefinition(String name) {
this.name = name;
}
public MethodDefinition(String name) {
this.name = name;
}

public String name() {
return name;
}
public String name() {
return name;
}
}
Loading

0 comments on commit 184fdc4

Please sign in to comment.