Improve ConstantArrayType union performance #1176
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This gets rid of some complicated code that repeatedly calls
ConstantArrayType::setOffsetValueType
which leads to a new creation of a ConstantArray via the builder which leads to union again and so on. ApparentlyConstantArrayType::mergeWith
, which is used viareduceArrays
, does already what needs to be done.There seems to be just one catch: The keys in constant arrays are ordered a bit different in some cases and re-ordering them via e.g.
UnionTypeHelper::sortTypes
is too time-intensive. But if only 3 very dynamic cases are affected I hope that should be fine.This is a huuuge improvement for phpstan/phpstan#6948
But let's see what CI says first before I cheer too loud..