Skip to content

Commit f7fd82a

Browse files
committed
Discover Transformer implementations
1 parent a00f37b commit f7fd82a

File tree

1 file changed

+23
-8
lines changed
  • extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment

1 file changed

+23
-8
lines changed

extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ class CamelProcessor {
109109
"org.apache.camel.Predicate");
110110
private static final DotName CONVERTER_TYPE = DotName.createSimple(
111111
"org.apache.camel.Converter");
112+
private static final DotName TRANSFORMER_TYPE = DotName.createSimple(
113+
"org.apache.camel.spi.Transformer");
112114

113115
private static final Set<DotName> UNREMOVABLE_BEANS_TYPES = CamelSupport.setOf(
114116
ROUTES_BUILDER_TYPE,
@@ -433,26 +435,39 @@ CamelComponentNameResolverBuildItem componentNameResolver(
433435
}
434436

435437
/**
436-
* Discovers classes annotated with @DataTypeTransformer for package scanning and reflection.
438+
* Discovers all Transformer implementations for package scanning and reflection.
437439
* This enables transformer.scan() to work in native mode.
438440
*/
439441
@BuildStep
440-
void discoverDataTypeTransformers(
442+
void discoverTransformers(
443+
ApplicationArchivesBuildItem applicationArchives,
441444
CombinedIndexBuildItem combinedIndex,
442445
BuildProducer<CamelPackageScanClassBuildItem> packageScanClass,
443446
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
444447

445-
IndexView view = combinedIndex.getIndex();
446-
DotName dataTypeTransformer = DotName.createSimple("org.apache.camel.spi.DataTypeTransformer");
448+
IndexView index = combinedIndex.getIndex();
449+
450+
Set<String> internalTransformers = new HashSet<>();
451+
// Ignore all Transformer implementations from org.apache.camel:camel-* dependencies
452+
for (ApplicationArchive archive : applicationArchives.getAllApplicationArchives()) {
453+
ArtifactKey artifactKey = archive.getKey();
454+
if (artifactKey != null && "org.apache.camel".equals(artifactKey.getGroupId())
455+
&& artifactKey.getArtifactId().startsWith("camel-")) {
456+
internalTransformers.addAll(archive.getIndex().getAllKnownSubclasses(TRANSFORMER_TYPE)
457+
.stream()
458+
.map(classInfo -> classInfo.name().toString())
459+
.collect(Collectors.toSet()));
460+
}
461+
}
447462

448-
Set<String> transformerClasses = view.getAnnotations(dataTypeTransformer)
463+
Set<String> transformerClasses = index.getAllKnownSubclasses(TRANSFORMER_TYPE)
449464
.stream()
450-
.filter(ai -> ai.target().kind() == AnnotationTarget.Kind.CLASS)
451-
.map(ai -> ai.target().asClass().name().toString())
465+
.map(classInfo -> classInfo.name().toString())
466+
.filter(className -> !internalTransformers.contains(className))
452467
.collect(Collectors.toSet());
453468

454469
if (!transformerClasses.isEmpty()) {
455-
LOGGER.debug("Found @DataTypeTransformer annotated classes: {}", transformerClasses);
470+
LOGGER.debug("Found Transformer classes: {}", transformerClasses);
456471
packageScanClass.produce(new CamelPackageScanClassBuildItem(transformerClasses));
457472

458473
// Register transformer classes for reflection so they can be instantiated at runtime

0 commit comments

Comments
 (0)