Skip to content

Commit

Permalink
Support type hints in Transformables
Browse files Browse the repository at this point in the history
  • Loading branch information
tonydamage committed Sep 28, 2022
1 parent d707ac6 commit 1be4390
Showing 1 changed file with 11 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.deleg.ReferenceDefinitionDelegator;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ObjectReferencePathSegment;
import com.evolveum.midpoint.util.exception.SchemaException;

public class TransformableReferenceDefinition extends TransformableItemDefinition<PrismReference, PrismReferenceDefinition>
Expand Down Expand Up @@ -49,9 +50,17 @@ public <T extends ItemDefinition<?>> T findItemDefinition(@NotNull ItemPath path
if (!path.startsWithObjectReference()) {
return super.findItemDefinition(path, clazz);
} else {
var first = path.first();
ItemPath rest = path.rest();
PrismObjectDefinition referencedObjectDefinition =
getSchemaRegistry().determineReferencedObjectDefinition(getTargetTypeName(), rest);
var targetType = getTargetTypeName();
if (first instanceof ObjectReferencePathSegment) {
var typeHint = ((ObjectReferencePathSegment) first).typeHint();
if (typeHint.isPresent()) {
targetType = typeHint.get();
}
}
PrismObjectDefinition<?> referencedObjectDefinition =
getSchemaRegistry().determineReferencedObjectDefinition(targetType, rest);
return (T) ((ItemDefinition) referencedObjectDefinition).findItemDefinition(rest, clazz);
}
}
Expand Down

0 comments on commit 1be4390

Please sign in to comment.