Skip to content

Commit

Permalink
feat: @ExternalBuildables can now include/exclude abstract classes an…
Browse files Browse the repository at this point in the history
…d interfaces
  • Loading branch information
iocanel committed Apr 23, 2021
1 parent 0e184e0 commit 97f007b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@

BuildableReference[] refs() default {};

boolean includeInterfaces() default true;

boolean includeAbstractClasses() default true;

String[] value() default {};

String[] includes() default {};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,14 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
for (TypeElement typeElement : typeElements) {
final boolean isLazyCollectionInitEnabled = generated.lazyCollectionInitEnabled();
final boolean isLazyMapInitEnabled = generated.lazyMapInitEnabled();
final boolean includeInterfaces = generated.includeInterfaces();
final boolean includeAbstractClasses = generated.includeAbstractClasses();

TypeDef original = ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(typeElement));
String fqcn = original.getFullyQualifiedName();
boolean isBuildable = original.getKind() != Kind.ENUM && !original.isAbstract()
boolean isBuildable = original.getKind() != Kind.ENUM
&& (includeAbstractClasses || !original.isAbstract())
&& (includeInterfaces || original.getKind() != Kind.INTERFACE)
&& isIncluded(fqcn, generated.includes()) && !isExcluded(fqcn, generated.excludes());

TypeDef b = new TypeDefBuilder(original)
Expand All @@ -115,7 +119,15 @@ public void visit(PropertyBuilder builder) {
}
}).build();

if (b.getKind() == Kind.ENUM || b.isAbstract()) {
if (b.getKind() == Kind.ENUM) {
continue;
}

if (b.isAbstract() && !includeAbstractClasses) {
continue;
}

if (b.getKind() == Kind.INTERFACE && !includeInterfaces) {
continue;
}

Expand All @@ -134,6 +146,8 @@ public void visit(PropertyBuilder builder) {
for (TypeElement ref : BuilderUtils.getBuildableReferences(ctx, generated)) {
final boolean isLazyCollectionInitEnabled = generated.lazyCollectionInitEnabled();
final boolean isLazyMapInitEnabled = generated.lazyMapInitEnabled();
final boolean includeInterfaces = generated.includeInterfaces();
final boolean includeAbstractClasses = generated.includeAbstractClasses();

TypeDef original = ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(ref));
String fqcn = original.getFullyQualifiedName();
Expand All @@ -157,6 +171,17 @@ public void visit(PropertyBuilder builder) {
if (r.getKind() == Kind.ENUM || r.isAbstract()) {
continue;
}
if (r.getKind() == Kind.ENUM) {
continue;
}

if (r.isAbstract() && !includeAbstractClasses) {
continue;
}

if (r.getKind() == Kind.INTERFACE && !includeInterfaces) {
continue;
}

if (!isIncluded(r.getFullyQualifiedName(), generated.includes())) {
continue;
Expand Down

0 comments on commit 97f007b

Please sign in to comment.