mirror of
https://github.com/danog/psalm.git
synced 2024-12-11 08:49:52 +01:00
Update
This commit is contained in:
parent
0f9936553f
commit
a9647155f2
@ -519,7 +519,8 @@ class TypeExpander
|
|||||||
$return_type = $return_type->setTypeParams($type_params);
|
$return_type = $return_type->setTypeParams($type_params);
|
||||||
} elseif ($return_type instanceof TKeyedArray) {
|
} elseif ($return_type instanceof TKeyedArray) {
|
||||||
$properties = $return_type->properties;
|
$properties = $return_type->properties;
|
||||||
foreach ($properties as &$property_type) {
|
$changed = false;
|
||||||
|
foreach ($properties as $k => $property_type) {
|
||||||
$property_type = self::expandUnion(
|
$property_type = self::expandUnion(
|
||||||
$codebase,
|
$codebase,
|
||||||
$property_type,
|
$property_type,
|
||||||
@ -533,9 +534,44 @@ class TypeExpander
|
|||||||
$expand_templates,
|
$expand_templates,
|
||||||
$throw_on_unresolvable_constant,
|
$throw_on_unresolvable_constant,
|
||||||
);
|
);
|
||||||
|
if ($property_type !== $properties[$k]) {
|
||||||
|
$changed = true;
|
||||||
|
$properties[$k] = $property_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unset($property_type);
|
unset($property_type);
|
||||||
$return_type = $return_type->setProperties($properties);
|
$fallback_params = $return_type->fallback_params;
|
||||||
|
if ($return_type->fallback_params) {
|
||||||
|
foreach ($fallback_params as $k => $property_type) {
|
||||||
|
$property_type = self::expandUnion(
|
||||||
|
$codebase,
|
||||||
|
$property_type,
|
||||||
|
$self_class,
|
||||||
|
$static_class_type,
|
||||||
|
$parent_class,
|
||||||
|
$evaluate_class_constants,
|
||||||
|
$evaluate_conditional_types,
|
||||||
|
$final,
|
||||||
|
$expand_generic,
|
||||||
|
$expand_templates,
|
||||||
|
$throw_on_unresolvable_constant,
|
||||||
|
);
|
||||||
|
if ($property_type !== $fallback_params[$k]) {
|
||||||
|
$changed = true;
|
||||||
|
$fallback_params[$k] = $property_type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset($property_type);
|
||||||
|
}
|
||||||
|
if ($changed) {
|
||||||
|
$return_type = new TKeyedArray(
|
||||||
|
$properties,
|
||||||
|
$return_type->class_strings,
|
||||||
|
$fallback_params,
|
||||||
|
$return_type->is_list,
|
||||||
|
$return_type->from_docblock
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($return_type instanceof TObjectWithProperties) {
|
if ($return_type instanceof TObjectWithProperties) {
|
||||||
|
@ -475,11 +475,32 @@ class TKeyedArray extends Atomic
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($properties === $this->properties) {
|
$fallback_params = $this->fallback_params;
|
||||||
|
|
||||||
|
foreach ($fallback_params ?? [] as $offset => $property) {
|
||||||
|
$fallback_params[$offset] = TemplateStandinTypeReplacer::replace(
|
||||||
|
$property,
|
||||||
|
$template_result,
|
||||||
|
$codebase,
|
||||||
|
$statements_analyzer,
|
||||||
|
$input_type_param,
|
||||||
|
$input_arg_offset,
|
||||||
|
$calling_class,
|
||||||
|
$calling_function,
|
||||||
|
$replace,
|
||||||
|
$add_lower_bound,
|
||||||
|
null,
|
||||||
|
$depth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($properties === $this->properties && $fallback_params === $this->fallback_params) {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
$cloned = clone $this;
|
$cloned = clone $this;
|
||||||
$cloned->properties = $properties;
|
$cloned->properties = $properties;
|
||||||
|
$cloned->fallback_params = $fallback_params;
|
||||||
return $cloned;
|
return $cloned;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,7 +519,15 @@ class TKeyedArray extends Atomic
|
|||||||
$codebase
|
$codebase
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ($properties !== $this->properties) {
|
$fallback_params = $this->fallback_params;
|
||||||
|
foreach ($fallback_params as $offset => $property) {
|
||||||
|
$fallback_params[$offset] = TemplateInferredTypeReplacer::replace(
|
||||||
|
$property,
|
||||||
|
$template_result,
|
||||||
|
$codebase
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ($properties !== $this->properties || $fallback_params !== $this->fallback_params) {
|
||||||
$cloned = clone $this;
|
$cloned = clone $this;
|
||||||
$cloned->properties = $properties;
|
$cloned->properties = $properties;
|
||||||
return $cloned;
|
return $cloned;
|
||||||
|
Loading…
Reference in New Issue
Block a user