classObjectEffects
final class ObjectEffects
Restricted visibility: declared "@visibility root". Code outside that scope must not name this declaration.
Conservative alias dependencies for calls that may mutate an object.
Methods§
public function __construct(list<ParsedFile> $files = [])Indexes possible file-scope aliases; function scopes are indexed on demand.
Parameters
$files | list<ParsedFile> |
Calls 3
- new
WeakMapline 33 - method-call ObjectEffects::graph() line 35
- new
Namespace_line 35
public function writes(Node $node): array<string, true>Parameters
$node | Node |
Returns
array<string, true> Names whose objects a call may change.Test cases 3
Calls 10
- method-call
Node::isFirstClassCallable()line 52 - method-call ObjectEffects::root() line 57
- method-call
Node::getArgs()line 62 - method-call ObjectEffects::storedRoots() line 63
- method-call FreeNames::read() line 67
- new FreeNames line 67
- method-call ObjectEffects::owner() line 70
- method-call ObjectEffects::graph() line 71
- function-call
array_keysline 73 - function-call
array_shiftline 75
public function root(Node $node): ?stringThe variable through which an expression reaches an object.
Parameters
$node | Node |
Returns
?stringTest cases 1
Called from 5
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\CallbackEffects::supported() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/CallbackEffects.php:87
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::writes() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:57
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::root() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:95
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::graph() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:125
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::storedRoots() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:144
Calls 4
- function-call
is_stringline 92 - method-call ObjectEffects::root() line 95
- method-call FreeNames::propertyName() line 98
- new FreeNames line 98
public function owner(Node $node): NodeThe lexical body in which alias assignments are relevant.
Parameters
$node | Node |
Returns
NodeTest cases 1
Called from 1
Calls 1
- method-call
Node::getAttribute()line 106
public function graph(Node $owner): array<string, array<string, true>>Parameters
$owner | Node |
Returns
array<string, array<string, true>> Possible aliases, without claiming equal runtime identity.Test cases 1
Called from 2
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::__construct() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:35
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::writes() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:71
Calls 3
- method-call ObjectEffects::assignments() line 124
- method-call ObjectEffects::root() line 125
- method-call ObjectEffects::storedRoots() line 126
public function storedRoots(Expr $expression): list<string>Possible object references stored by an assignment, including array elements.
Parameters
$expression | Expr |
Returns
list<string>Test cases 2
Called from 3
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::writes() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:63
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::graph() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:126
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::storedRoots() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:151
Calls 3
- method-call ObjectEffects::root() line 144
- function-call
array_mergeline 151 - method-call ObjectEffects::storedRoots() line 151
public function assignments(Node $node, bool $root = false): list<Assign|AssignRef>Parameters
$node | Node | |
$root | bool |
Returns
list<Assign|AssignRef> Assignments outside nested declarations.Test cases 1
Called from 2
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::graph() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:124
- method-call SqlCatalog\Core\Analysis\Derivation\Objects\ObjectEffects::assignments() packages/sql-catalog/src/Core/Analysis/Derivation/Objects/ObjectEffects.php:170
Calls 4
- function-call
get_object_varsline 167 - function-call
is_arrayline 168 - function-call
array_mergeline 170 - method-call ObjectEffects::assignments() line 170
Private surface 1§
Implementation details, listed for orientation only.
private WeakMap<Node, array<string, array<string, true>>> $aliasesTest cases 23§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 9
ObjectEffectsTest::testAssignmentsExcludesNestedFunctionsAndClassescallsObjectEffectsTest::testGraphDoesNotTreatClonesAsAliasescallsObjectEffectsTest::testOwnerStopsAtTheEnclosingFunctioncallsObjectEffectsTest::testRootFindsTheBaseOfFluentCallsAndArrayElementscallsObjectEffectsTest::testStoredRootsIncludesNestedArrayReferencescallsObjectEffectsTest::testStoredRootsPreservesEveryObjectReferenceInAnArraycallsObjectEffectsTest::testWritesFollowsAliasesStoredInArraysInsideFunctionScopescallsObjectEffectsTest::testWritesIncludesCapturedObjectsAndPropertyMutationReceiverscallsObjectEffectsTest::testWritesIncludesFileScopeAliasesWithoutCrossingIntoFunctionscalls
Other tests reaching this symbol 14
ModifiedNamesTest::testOwnRetainsSymbolTableWritesAlongsideObjectEffectscallsModifiedNamesTest::testTracksObjectsRequiresAnExplicitEffectModelcallsCallbackEffectsTest::testApplyFollowsMutationsOfTheCallbackParametercallsCallbackEffectsTest::testApplyLeavesCallbacksWithoutAReceiverOpencallsCallbackEffectsTest::testApplyRunsClosureEffectsThroughCapturedAliasesOfItsReceivercallsCallbackEffectsTest::testBindKeepsOnlyExplicitClosureCapturesAndPassedArgumentscallsBuilderQueriesTestcallsCallbackModelTest::testApplyRunsSourceDeclaredLocalScopescallsCallbackModelTest::testCheckedPreservesAVisibleGapWhenTheCallbackExceedsItsBudgetcallsCallbackModelTest::testClosedRejectsWidenedResultsAndForeignIdentitiescallsCallbackModelTest::testConditionalKeepsBothOutcomesOfWhenAndUnlesscallsCallbackModelTest::testNestedRestoresOuterClausesAndGroupsOnlyNewPredicatescallsCallModelTestcallsAnalyzerTestcalls