mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 08:12:40 +01:00
Allow PhutilArrayCheck to accept a list of objects as a context
Summary: This simplifies merging a list-of-lists, which is a common pattern when asking a list of extensions to each provide some kind of list of items. Test Plan: Used elsewhere in Piledriver. Differential Revision: https://secure.phabricator.com/D21294
This commit is contained in:
parent
a0c346bf63
commit
0da1a2e17d
1 changed files with 30 additions and 3 deletions
|
@ -29,10 +29,24 @@ final class PhutilArrayCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setContext($object, $method) {
|
public function setContext($object, $method) {
|
||||||
if (!is_object($object) && !is_string($object)) {
|
if (is_array($object)) {
|
||||||
|
foreach ($object as $idx => $value) {
|
||||||
|
if (!is_object($value)) {
|
||||||
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'Expected an object, string, or list of objects for "object" '.
|
||||||
|
'context. Got a list ("%s"), but the list item at index '.
|
||||||
|
'"%s" (with type "%s") is not an object.',
|
||||||
|
phutil_describe_type($object),
|
||||||
|
$idx,
|
||||||
|
phutil_describe_type($value)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!is_object($object) && !is_string($object)) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'Expected an object or string for "object" context, got "%s".',
|
'Expected an object, string, or list of objects for "object" '.
|
||||||
|
'context, got "%s".',
|
||||||
phutil_describe_type($object)));
|
phutil_describe_type($object)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +233,20 @@ final class PhutilArrayCheck
|
||||||
$method = $context['method'];
|
$method = $context['method'];
|
||||||
$argv = $context['argv'];
|
$argv = $context['argv'];
|
||||||
|
|
||||||
if (is_object($object)) {
|
if (is_array($object)) {
|
||||||
|
$classes = array();
|
||||||
|
foreach ($object as $item) {
|
||||||
|
$classes[] = get_class($item);
|
||||||
|
}
|
||||||
|
$classes = array_fuse($classes);
|
||||||
|
$n = count($object);
|
||||||
|
|
||||||
|
$object_display = sprintf(
|
||||||
|
'[%s]<%d>->%s',
|
||||||
|
implode(', ', $classes),
|
||||||
|
$n,
|
||||||
|
$method);
|
||||||
|
} else if (is_object($object)) {
|
||||||
$object_display = sprintf(
|
$object_display = sprintf(
|
||||||
'%s->%s',
|
'%s->%s',
|
||||||
get_class($object),
|
get_class($object),
|
||||||
|
|
Loading…
Reference in a new issue