From 88fd5c1f6e8c323d6b2b6585ae18218ef002d4cd Mon Sep 17 00:00:00 2001 From: Dusan Jakub Date: Thu, 25 Aug 2022 19:35:17 +0200 Subject: [PATCH] Fix @SchemaSwaps in apt context. fabric8io/kubernetes-client#4350 --- .../crd/generator/AbstractJsonSchema.java | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/crd-generator/api/src/main/java/io/fabric8/crd/generator/AbstractJsonSchema.java b/crd-generator/api/src/main/java/io/fabric8/crd/generator/AbstractJsonSchema.java index 80e4cb1e290..285e45254b2 100644 --- a/crd-generator/api/src/main/java/io/fabric8/crd/generator/AbstractJsonSchema.java +++ b/crd-generator/api/src/main/java/io/fabric8/crd/generator/AbstractJsonSchema.java @@ -198,30 +198,32 @@ private void extractSchemaSwaps(ClassRef definitionType, AnnotationRef annotatio case ANNOTATION_SCHEMA_SWAPS: Map params = annotation.getParameters(); Object[] values = (Object[]) params.get("value"); - if (values instanceof SchemaSwap[]) { - for (SchemaSwap value : (SchemaSwap[]) values) { - extractSchemaSwap(definitionType, value, schemaSwaps); - } + for (Object value : values) { + extractSchemaSwap(definitionType, value, schemaSwaps); } -// for (AnnotationRef value : values) { -// extractSchemaSwap(definitionType, value, schemaSwaps); -// } break; } } - private void extractSchemaSwap(ClassRef definitionType, AnnotationRef annotation, InternalSchemaSwaps schemaSwaps) { - Map params = annotation.getParameters(); - schemaSwaps.registerSwap(definitionType, - extractClassRef(params.get("originalType")), - (String) params.get("fieldName"), - extractClassRef(params.get("targetType"))); - } - private void extractSchemaSwap(ClassRef definitionType, SchemaSwap annotation, InternalSchemaSwaps schemaSwaps) { - schemaSwaps.registerSwap(definitionType, - extractClassRef(annotation.originalType()), - annotation.fieldName(), - extractClassRef(annotation.targetType())); + private void extractSchemaSwap(ClassRef definitionType, Object annotation, InternalSchemaSwaps schemaSwaps) { + if (annotation instanceof SchemaSwap) { + SchemaSwap schemaSwap = (SchemaSwap) annotation; + schemaSwaps.registerSwap(definitionType, + extractClassRef(schemaSwap.originalType()), + schemaSwap.fieldName(), + extractClassRef(schemaSwap.targetType())); + + } else if (annotation instanceof AnnotationRef + && ((AnnotationRef) annotation).getClassRef().getFullyQualifiedName().equals(ANNOTATION_SCHEMA_SWAP)) { + Map params = ((AnnotationRef) annotation).getParameters(); + schemaSwaps.registerSwap(definitionType, + extractClassRef(params.get("originalType")), + (String) params.get("fieldName"), + extractClassRef(params.get("targetType"))); + + } else { + throw new IllegalArgumentException("Unmanaged annotation type passed to the SchemaSwaps: " + annotation); + } } private void validateRemainingSchemaSwaps(InternalSchemaSwaps schemaSwaps) {