Skip to content

Commit

Permalink
Address #122 in SuperBuilder (#124)
Browse files Browse the repository at this point in the history
* Track processed classes.  (#123)

* address #122 in SuperBuilder
  • Loading branch information
graemerocher authored Jul 23, 2024
1 parent 890f0d1 commit a490ba1
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@
import io.micronaut.sourcegen.model.TypeDef;
import io.micronaut.sourcegen.model.VariableDef;

import java.util.HashSet;
import java.util.Set;
import javax.lang.model.element.Modifier;
import java.util.ArrayList;
import java.util.Collection;
Expand All @@ -51,7 +53,6 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.TreeMap;
Expand All @@ -69,13 +70,23 @@
@Internal
public final class BuilderAnnotationVisitor implements TypeElementVisitor<Builder, Object> {

private final Set<String> processed = new HashSet<>();

@Override
public @NonNull VisitorKind getVisitorKind() {
return VisitorKind.ISOLATING;
}

@Override
public void start(VisitorContext visitorContext) {
processed.clear();
}

@Override
public void visitClass(ClassElement element, VisitorContext context) {
if (processed.contains(element.getName())) {
return;
}
try {
String simpleName = element.getSimpleName() + "Builder";
String builderClassName = element.getPackageName() + "." + simpleName;
Expand All @@ -102,6 +113,7 @@ public void visitClass(ClassElement element, VisitorContext context) {
}

ClassDef builderDef = builder.build();
processed.add(element.getName());
context.visitGeneratedSourceFile(
builderDef.getPackageName(),
builderDef.getSimpleName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
import io.micronaut.sourcegen.model.MethodDef;
import io.micronaut.sourcegen.model.TypeDef;

import java.util.HashSet;
import java.util.Set;
import javax.lang.model.element.Modifier;
import java.util.List;

Expand All @@ -44,13 +46,23 @@
@Internal
public final class SuperBuilderAnnotationVisitor implements TypeElementVisitor<SuperBuilder, Object> {

private final Set<String> processed = new HashSet<>();

@Override
public void start(VisitorContext visitorContext) {
processed.clear();
}

@Override
public @NonNull VisitorKind getVisitorKind() {
return VisitorKind.ISOLATING;
}

@Override
public void visitClass(ClassElement element, VisitorContext context) {
if (processed.contains(element.getName())) {
return;
}
try {
String abstractBuilderClassName = getAbstractSuperBuilderName(element);

Expand Down Expand Up @@ -105,6 +117,7 @@ public void visitClass(ClassElement element, VisitorContext context) {
return;
}

processed.add(element.getName());
context.visitGeneratedSourceFile(
abstractBuilderDef.getPackageName(),
abstractBuilderDef.getSimpleName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
import io.micronaut.sourcegen.model.StatementDef;
import io.micronaut.sourcegen.model.TypeDef;

import java.util.HashSet;
import java.util.Set;
import javax.lang.model.element.Modifier;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -52,13 +54,23 @@
@Internal
public final class WitherAnnotationVisitor implements TypeElementVisitor<Wither, Object> {

private final Set<String> processed = new HashSet<>();

@Override
public @NonNull VisitorKind getVisitorKind() {
return VisitorKind.ISOLATING;
}

@Override
public void start(VisitorContext visitorContext) {
processed.clear();
}

@Override
public void visitClass(ClassElement recordElement, VisitorContext context) {
if (processed.contains(recordElement.getName())) {
return;
}
try {
if (!recordElement.isRecord()) {
throw new ProcessingException(recordElement, "Only records can be annotated with @Wither");
Expand Down Expand Up @@ -105,6 +117,7 @@ public void visitClass(ClassElement recordElement, VisitorContext context) {
}

InterfaceDef witherDef = wither.build();
processed.add(recordElement.getName());
context.visitGeneratedSourceFile(
witherDef.getPackageName(),
witherDef.getSimpleName(),
Expand Down

0 comments on commit a490ba1

Please sign in to comment.