private <O extends ObjectType> boolean isDelegationToNonDelegableTarget(AssignmentType assignmentType, @NotNull PrismObject<O> target, EvaluationContext ctx) { AssignmentPathSegment previousSegment = ctx.assignmentPath.beforeLast(1); if (previousSegment == null || !previousSegment.isDelegation() || !target.canRepresent(AbstractRoleType.class)) { return false; } if (!Boolean.TRUE.equals(((AbstractRoleType)target.asObjectable()).isDelegable())) { if (LOGGER.isTraceEnabled()) { LOGGER.trace("Skipping evaluation of {} because it delegates to a non-delegable target {}", FocusTypeUtil.dumpAssignment(assignmentType), target); } return true; } else { return false; } }