private function analyzeExpression(Expr $expr, Context $context)
{
$compiledKey = $context->getExpressionCompiler()->compile($expr);
if (!$compiledKey->isTypeKnown() || $compiledKey->isScalar()) {
return false;
}
$keyType = $compiledKey->getTypeName();
if ($compiledKey->isObject() && $compiledKey->getValue()) {
$keyType = get_class($compiledKey->getValue());
}
if ($expr instanceof Expr\Variable) {
$message = sprintf('Illegal array offset type %s for key %s.', $keyType, '$' . $expr->name);
} else {
$message = sprintf('Illegal array offset type %s.', $keyType);
}
$context->notice('array.illegal_offset_type', $message, $expr);
return true;
}