diff --git a/builder/processor/src/main/java/io/helidon/builder/processor/CustomMethods.java b/builder/processor/src/main/java/io/helidon/builder/processor/CustomMethods.java index e386d032cff..2cdd2d62eba 100644 --- a/builder/processor/src/main/java/io/helidon/builder/processor/CustomMethods.java +++ b/builder/processor/src/main/java/io/helidon/builder/processor/CustomMethods.java @@ -168,8 +168,13 @@ private static boolean correctType(TypeName knownType, TypeName processingType) if (processingType.packageName().isEmpty()) { if (processingType.className().equals("")) { // cannot be resolved as this is part of our round, good faith it is a correct parameter + // this type name is used for types that are part of this round and that have a generic declaration + // such as BuilderBase, also compilation will fail with a correct exception if the type is wrong + // it will just fail on the generated class return true; } + // the type name is known, but package could not be determined as the type is generated as part of this + // annotation processing round - if the class name is correct, assume we have the right type return knownType.className().equals(processingType.className()) && knownType.enclosingNames().equals(processingType.enclosingNames()); } diff --git a/builder/processor/src/main/java/io/helidon/builder/processor/FactoryMethods.java b/builder/processor/src/main/java/io/helidon/builder/processor/FactoryMethods.java index af409fd8209..27d13bf1582 100644 --- a/builder/processor/src/main/java/io/helidon/builder/processor/FactoryMethods.java +++ b/builder/processor/src/main/java/io/helidon/builder/processor/FactoryMethods.java @@ -76,11 +76,10 @@ static FactoryMethods create(ProcessingContext processingContext, return new FactoryMethods(targetFactory, configFactory, - builder(processingContext, blueprint, typeHandler, configObjectCandidates)); + builder(processingContext, typeHandler, configObjectCandidates)); } private static Optional builder(ProcessingContext processingContext, - TypeInfo blueprint, TypeHandler typeHandler, Set builderCandidates) { if (typeHandler.actualType().equals(OBJECT)) { @@ -92,7 +91,6 @@ private static Optional builder(ProcessingContext processingConte for (TypeName builderCandidate : builderCandidates) { if (typeHandler.actualType().primitive()) { // primitive methods do not have builders - found = null; continue; } TypeInfo typeInfo = processingContext.toTypeInfo(builderCandidate.genericTypeName()).orElse(null); diff --git a/common/processor/processor/src/main/java/io/helidon/common/processor/TypeFactory.java b/common/processor/processor/src/main/java/io/helidon/common/processor/TypeFactory.java index 29af92b874c..1ca77890f60 100644 --- a/common/processor/processor/src/main/java/io/helidon/common/processor/TypeFactory.java +++ b/common/processor/processor/src/main/java/io/helidon/common/processor/TypeFactory.java @@ -87,9 +87,10 @@ public static Optional createTypeName(TypeMirror typeMirror) { case TYPEVAR -> { return Optional.of(createFromGenericDeclaration(typeMirror.toString())); } - case WILDCARD -> { + case WILDCARD, ERROR -> { return Optional.of(TypeName.create(typeMirror.toString())); } + // this is most likely a type that is code generated as part of this round, best effort case NONE -> { return Optional.empty(); }