classProgramIndex
final class ProgramIndex
Every declaration the analyzed source tree contains, looked up by name.
Resolution follows parents, traits and interfaces, so a repository method inherited from an abstract base is found from the subclass the call names.
Properties§
public array<string, ClassShape> $classes = []public array<string, FunctionShape> $functions = []public array<string, Expr> $constants = []Methods§
public function __construct(
public array<string, ClassShape> $classes = [],
public array<string, FunctionShape> $functions = [],
public array<string, Expr> $constants = [],
)Parameters
$classes | array<string, ClassShape> | Class-likes, keyed by lower-case fully qualified name |
$functions | array<string, FunctionShape> | Functions, keyed by lower-case fully qualified name |
$constants | array<string, Expr> | Global constant expressions, keyed by fully qualified name |
public function findClass(?string $name): ?ClassShapeThe class-like of that name, or null when the source tree does not declare it.
Parameters
$name | ?string |
Returns
Test cases 1
Called from 9
- method-call SqlCatalog\Core\Analysis\ConstantReader::readClassConstant() packages/sql-catalog/src/Core/Analysis/ConstantReader.php:110
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::inheritorsOf() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:151
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::staticTarget() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:217
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:242
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:249
- method-call SqlCatalog\Core\Analysis\ReferenceEvaluator::readEnumProperty() packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:232
- method-call SqlCatalog\Core\Php\ProgramIndex::isInstanceOf() packages/sql-catalog/src/Core/Php/ProgramIndex.php:120
- method-call SqlCatalog\Core\Php\ProgramIndex::lineage() packages/sql-catalog/src/Core/Php/ProgramIndex.php:135
- method-call SqlCatalog\Core\Php\ProgramIndex::lineage() packages/sql-catalog/src/Core/Php/ProgramIndex.php:148
public function findFunction(string $name): ?FunctionShapeThe function of that name, or null when the source tree does not declare it.
Parameters
$name | string |
Returns
Test cases 1
Called from 3
- method-call SqlCatalog\Core\Analysis\CallEvaluator::applyEffects() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:119
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateFunction() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:341
- method-call SqlCatalog\Core\Analysis\CallEvaluator::functionName() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:366
public function findConstant(string $name): ?ExprThe global constant expression of that name, or null when there is none.
Parameters
$name | string |
Returns
?ExprTest cases 1
Called from 2
Calls 1
- function-call
ltrimline 52
public function findMethod(?string $className, string $method): ?MethodShapeThe method of that name on the class or anything it inherits from.
Parameters
$className | ?string | |
$method | string |
Returns
Called from 3
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateMethod() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:210
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateStatic() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:293
- method-call SqlCatalog\Extension\Laravel\CallbackModel::apply() packages/sql-catalog/src/Extension/Laravel/CallbackModel.php:49
Calls 2
- function-call
strtolowerline 60 - method-call ProgramIndex::lineage() line 61
public function findClassConstant(?string $className, string $constant): ?ExprThe class constant expression of that name on the class or anything it inherits from.
Parameters
$className | ?string | |
$constant | string |
Returns
?ExprCalled from 2
Calls 1
- method-call ProgramIndex::lineage() line 75
public function findPropertyType(?string $className, string $property): ?TypeShapeThe declared type of a property on the class or anything it inherits from.
Parameters
$className | ?string | |
$property | string |
Returns
Called from 1
Calls 1
- method-call ProgramIndex::lineage() line 89
public function isInstanceOf(?string $className, string $expected): boolWhether the class is, or inherits from, the named one.
The walk follows written names rather than indexed declarations, so a class that extends one the analyzed source does not declare — a driver class, or a framework base class — is still recognised as inheriting it.
Parameters
$className | ?string | |
$expected | string |
Returns
boolCalled from 11
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::reaches() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:177
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:234
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:237
- method-call SqlCatalog\Core\Analysis\SinkMatcher::classMatches() packages/sql-catalog/src/Core/Analysis/SinkMatcher.php:142
- method-call SqlCatalog\Core\Php\ProgramIndex::implementationsOf() packages/sql-catalog/src/Core/Php/ProgramIndex.php:182
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:72
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:73
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isConnection() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:162
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isConnection() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:166
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:59
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::recognizes() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:134
Calls 4
- function-call
strtolowerline 107 - function-call
ltrimline 107 - function-call
array_shiftline 112 - method-call ProgramIndex::findClass() line 120
public function lineage(?string $className): list<ClassShape>The class and everything it inherits from, nearest first, without repeats.
Parameters
$className | ?string |
Returns
list<ClassShape>Called from 9
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::writersOf() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:105
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::promotions() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:143
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::defaultOf() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:164
- method-call SqlCatalog\Core\Analysis\ReferenceEvaluator::readProperty() packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:205
- method-call SqlCatalog\Core\Php\ProgramIndex::findMethod() packages/sql-catalog/src/Core/Php/ProgramIndex.php:61
- method-call SqlCatalog\Core\Php\ProgramIndex::findClassConstant() packages/sql-catalog/src/Core/Php/ProgramIndex.php:75
- method-call SqlCatalog\Core\Php\ProgramIndex::findPropertyType() packages/sql-catalog/src/Core/Php/ProgramIndex.php:89
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::guard() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:72
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::property() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:147
Calls 4
- method-call ProgramIndex::findClass() line 135
- function-call
strtolowerline 140 - function-call
array_shiftline 144 - function-call
ltrimline 147
public function implementationsOf(
?string $className,
string $method,
int $limit = 8,
): list<MethodShape>The concrete implementations of a method, for a call the declaration cannot answer.
A call on an abstract class or an interface names a method whose body is somewhere else. Collecting the bodies the source tree does declare is what lets a statement built by a subclass resolve instead of becoming a gap.
Parameters
$className | ?string | |
$method | string | |
$limit | int | How many implementations to return before giving up on enumerating them |
Returns
list<MethodShape>Called from 1
Calls 3
- function-call
strtolowerline 175 - method-call ProgramIndex::isInstanceOf() line 182
- function-call
countline 185
public function merge(self $other): selfThe index holding the declarations of both, with this one taking precedence.
Parameters
$other | self |
Returns
selfTest cases 1
Calls 1
- new
selfline 198
Test cases 250§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 4
Other tests reaching this symbol 246
CatalogCommandTestcallsCallEvaluatorTest::testApplySinkHandsBackAHandleNamingThePreparingCallcallsCallEvaluatorTest::testApplySinkHandsBackWhatEachKindOfDatabaseCallHandsBackcallsCallEvaluatorTest::testArgumentsAreEvaluatedInOrdercallsCallEvaluatorTest::testArgumentsIsCalledWithTheCallItselfcallsCallEvaluatorTest::testEvaluateFunctionGivesUpOnAFunctionWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateFunctionHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testEvaluateFunctionNamesTheExternalInputItReadscallsCallEvaluatorTest::testEvaluateInstantiationNamesTheClassItCreatescallsCallEvaluatorTest::testEvaluateInstantiationResolvesSelfcallsCallEvaluatorTest::testEvaluateMethodFollowsAMethodDeclaredWithoutABodycallsCallEvaluatorTest::testEvaluateMethodGivesUpOnAMethodWhoseNameIsNotWrittencallsCallEvaluatorTest::testEvaluateOfAFirstClassCallableIsAClosurecallsCallEvaluatorTest::testEvaluateStaticGivesUpWhenTheClassOrTheNameIsNotWrittencallsCallEvaluatorTest::testEvaluateStaticHandsBackWhatADatabaseCallHandsBackcallsCallEvaluatorTest::testFollowWithoutReturnsToReadNamesTheCalleecallsCallEvaluatorTest::testFunctionNameUsesRegisteredNamespaceBeforeGlobalFallbackcallsCallEvaluatorTest::testInvalidateEscapesOpensAliasedObjectStatecallsCallEvaluatorTest::testSiteKeyOfNamesTheCallAndTheDatabaseCallcallsConstantReaderTest::testReadClassConstantGivesUpOnAConstantNothingDeclarescallsConstantReaderTest::testReadClassConstantGivesUpWhenTheClassIsNotWrittencallsConstantReaderTest::testReadClassConstantQuotesWhatItCouldNotReadcallsConstantReaderTest::testReadClassConstantReadsTheClassKeywordWhateverItsCasecallsConstantReaderTest::testReadConstantReadsTheKeywordsWhateverTheirCasecallsConstantReaderTest::testReadRuntimeConstantOnlyTrustsThePhpConstantscallsConstantReaderTest::testReadRuntimeConstantReadsAFullyQualifiedNamecallsConstantReaderTest::testResolveClassNameResolvesEveryKeywordForTheEnclosingClasscallsConstantReaderTest::testResolveClassNameResolvesTheSelfKeywordscallsCalleeReturnsTest::testParametersBindsEachArgumentToThePositionItIsPassedIncallsCalleeReturnsTest::testParametersLeavesAParameterNeitherPassedNorDefaultedOpencallsCalleeReturnsTest::testParametersLeavesAVariadicParameterOpenWhateverIsPassedcallsCalleeReturnsTest::testReturnedReadsNullFromABareReturncallsCalleeReturnsTest::testReturnedReadsWhatTheReturnDependsOnFromTheStartcallsCalleeReturnsTest::testReturnedUnitesEveryRunOfTheSlicecallsCalleeReturnsTest::testValueOfLeavesAFunctionWithoutABodyAsACallItDidNotFollowcallsCallersTest::testOfFunctionFallsBackToTheWrittenNameOfADeclarationWithoutAResolvedOnecallsCallersTest::testOfFunctionLeavesOutCallsOfAnotherFunctionWithTheSameShortNamecallsCallersTest::testOfFunctionMatchesTheGlobalFunctionACallInANamespaceFallsBackTocallsDeriverTest::testBinderIsTheEntryBinderTheDeriverWasWiredWithcallsDeriverTest::testBoundedKeepsSolutionsWithinTheLimitAsTheyArecallsDeriverTest::testBoundedMarksSolutionsBeyondTheLimitTruncatedcallsDeriverTest::testClassOfANodeWithoutParentsIsNullcallsDeriverTest::testClassOfFallsBackToTheWrittenNameWhenNamesWereNotResolvedcallsDeriverTest::testEvaluatorIsTheEvaluatorTheDeriverWasWiredWithcallsDeriverTest::testNameOfAClosureWithoutParentsIsNamedAfterTheFilecallsDeriverTest::testNameOfAFunctionWhoseNameWasNotResolvedIsItsWrittenNamecallsDeriverTest::testNameOfAMethodOutsideEveryClassHasNoClassBeforeItcallsDeriverTest::testRunGivesOneSolutionPerArrivalWithOneValuePerGoalcallsDeriverTest::testRunKeepsNoMoreSolutionsThanTheLimitcallsDeriverTest::testRunMarksSolutionsTruncatedWhenTheirPathWasCutShortcallsDeriverTest::testScopeOfANodeInNoRecordedFileHasNoFilecallsDeriverTest::testSpentTellsWhetherTheBudgetIsExhaustedcallsEntryBinderTest::testAffordableJoinsNothingIntoAnEmptyWayIncallsEntryBinderTest::testAffordableJoinsTheRestIntoOneThatIsNotCutShortWhenNoneOfThemWascallsEntryBinderTest::testAffordableJoinsTheWaysInBeyondTheLimitIntoOnecallsEntryBinderTest::testAffordableKeepsTheSameWaysInWithinTheLimitcallsEntryBinderTest::testArgumentsForFindsTheArgumentPassedForEachParametercallsEntryBinderTest::testFileScopeBindsTheGlobalsAnExtensionDeclarescallsEntryBinderTest::testLeaveOpenLeavesEveryNeededNameOpenForTheReasonGivencallsEntryBinderTest::testOpenOriginBlamesTheBudgetOnlyOnceItIsSpentcallsEntryBinderTest::testParametersOfAreTheNeededParametersWithTheirPositionscallsEntryBinderTest::testParametersOfSkipsParametersWithoutAPlainNamecallsEntryBinderTest::testWithParametersLeavesEveryParameterOpenForTheReasonGivencallsEntryBinderTest::testWithPropertyKeepsNoMoreWaysInThanTheSolutionLimitcallsEntryBinderTest::testWithPropertyLeavesTheWaysInAloneWithoutValuescallsEntryBinderTest::testWithPropertyMarksEveryWayInCombinedWhenAskedcallsEntryBinderTest::testWithPropertySplitsEveryWayInByEachValuecallsCallbackEffectsTest::testApplyFollowsMutationsOfTheCallbackParametercallsCallbackEffectsTest::testApplyLeavesCallbacksWithoutAReceiverOpencallsCallbackEffectsTest::testApplyRunsClosureEffectsThroughCapturedAliasesOfItsReceivercallsPropertyWritesTestcallsSliceExecutorTest::testApplyAssignsAnExpressionAndSplitsOnWhatItWrotecallsSliceExecutorTest::testApplyBindsADeclarationcallsSliceExecutorTest::testApplyEntersAClosureWithoutEvaluatingAnythingcallsSliceExecutorTest::testApplyEntersAnArrowFunctioncallsSliceExecutorTest::testApplyGoesOnFromThePassAForeachReachedOverWhatItFirstReadcallsSliceExecutorTest::testApplyLeavesAnyOtherStatementAsItFoundItcallsSliceExecutorTest::testApplyRunsEveryAlternativeFromItsOwnCopycallsSliceExecutorTest::testApplySplitsAForeachPastItsElementsWithinTheLimitcallsSliceExecutorTest::testApplyStartsAForeachByReadingWhatItGoesOvercallsSliceExecutorTest::testAssignOnceTheBudgetIsSpentcallsSliceExecutorTest::testAssignQuotesWhatItCouldNotFollowcallsSliceExecutorTest::testAssignRunsEveryKindOfAssignmentcallsSliceExecutorTest::testIterateBindsTheValueAndKeyOfOnePasscallsSliceExecutorTest::testIterateOverAnythingElseQuotesTheIteratedKeyAndValuecallsSliceExecutorTest::testIterateWithoutAKeyBindsOnlyTheValuecallsSliceExecutorTest::testRunAbandonsTheStepsLeftOnceTheSearchBudgetIsExhaustedcallsSliceExecutorTest::testRunDropsRunsThatEndUpTheSamecallsSliceExecutorTest::testRunJoinsTheRunsPastTheLimitcallsSliceExecutorTest::testRunSizesTheLimitFromTheBudgetWhenNoneIsGivencallsSliceExecutorTest::testRunSplitsOnATernarySoLaterReadsAgreecallsSliceExecutorTest::testRunWhenClosingReadsOnPastTheSearchBudgetcallsSliceExecutorTest::testRunWhenClosingStopsOnceTheReadingBudgetIsSpentcallsSliceExecutorTest::testRunWithALimitOfOneKeepsTheValuesTogethercallsSliceExecutorTest::testRunWithNoStepsHandsBackTheStartcallsWriteEffectsTestcallsExpressionEvaluatorTest::testCastLiteralWritesTheValueAsTheTypeItIsCastTocallsExpressionEvaluatorTest::testEvaluatecallsExpressionEvaluatorTest::testEvaluateAppendIsCalledWithTheExpressionItselfcallsExpressionEvaluatorTest::testEvaluateAppendStartsFromWhatTheVariableAlreadyHoldscallsExpressionEvaluatorTest::testEvaluateAssignIsCalledWithTheExpressionItselfcallsExpressionEvaluatorTest::testEvaluateAssignWritesIntoTheEnvironmentcallsExpressionEvaluatorTest::testEvaluateCastEndsTheTrailBackToExternalInputcallsExpressionEvaluatorTest::testEvaluateCastNamesTheTypeACastProducesWhenTheValueIsNotKnowncallsExpressionEvaluatorTest::testEvaluateCastOfAnObjectKnowsOnlyThatItIsOnecallsExpressionEvaluatorTest::testEvaluateCloneCreatesAnIndependentTrackedAllocationcallsExpressionEvaluatorTest::testEvaluateGivesUpOnceTheBudgetIsSpentcallsExpressionEvaluatorTest::testEvaluateInterpolationIsCalledWithTheExpressionItselfcallsExpressionEvaluatorTest::testEvaluateInterpolationJoinsLiteralPartsAndExpressionscallsExpressionEvaluatorTest::testEvaluateInvalidatesAllAliasesOfAReferenceAssignedObjectcallsExpressionEvaluatorTest::testEvaluateIssetDoesNotEvaluatePredicatescallsExpressionEvaluatorTest::testEvaluateIssetKeepsIntermediateOperandWritescallsExpressionEvaluatorTest::testEvaluateIssetKeepsPossibleOperandEffectscallsExpressionEvaluatorTest::testEvaluateMatchOfNoArmsKnowsNothingcallsExpressionEvaluatorTest::testEvaluateMatchRetainsEarlierConditionEffectsForLaterArmscallsExpressionEvaluatorTest::testEvaluateMatchSeesAssignmentsInTheSubjectAndInTheConditionscallsExpressionEvaluatorTest::testEvaluateOfAMatchKeepsEveryArmcallsExpressionEvaluatorTest::testEvaluateOfAnAppendingAssignmentExtendsTheVariablecallsExpressionEvaluatorTest::testEvaluateOfAnInterpolatedStringJoinsItsPartscallsExpressionEvaluatorTest::testEvaluateOfATernaryKeepsBothBranchescallsExpressionEvaluatorTest::testEvaluateOperandsEvaluatesEveryOperandInPlacecallsExpressionEvaluatorTest::testEvaluateOperatorOfACoalesceKeepsBothSidescallsExpressionEvaluatorTest::testEvaluateOperatorOnlyAnswersForOperatorscallsExpressionEvaluatorTest::testEvaluateOptionalRightKeepsTheUnwrittenAlternativecallsExpressionEvaluatorTest::testEvaluateResultReportsTheTypeTheOperatorProducescallsExpressionEvaluatorTest::testEvaluateResultSeesAnAssignmentWrittenInsideTheOperandcallsExpressionEvaluatorTest::testEvaluateScalarOnlyAnswersForLiteralscallsExpressionEvaluatorTest::testEvaluateSeesAnAssignmentWrittenInsideAnOperatorItDoesNotModelcallsExpressionEvaluatorTest::testEvaluateTernaryHandlesTheShortFormcallsExpressionEvaluatorTest::testEvaluateTernaryIsCalledWithTheExpressionItselfcallsExpressionEvaluatorTest::testEvaluateTernaryKeepsBothBranchesEvenForKnownConditionscallsExpressionEvaluatorTest::testEvaluateTraversesIncludeEffectsBeforeReadingAnotherOperandcallsExpressionEvaluatorTest::testReferencesIsTheReaderThisEvaluatorResolvesNamesWithcallsExpressionEvaluatorTest::testResultTypeNamesTheTypeOfEveryOperatorItCoverscallsRegistryTest::testEvaluateCallUsesTheNewestHandlingFunctionAndPreservesItsDomaincallsInterpreterTest::testArgumentsOfListsTheExpressionsACallPassescallsInterpreterTest::testDeriverForWiresADeriverOverTheFilescallsInterpreterTest::testReceiverOfWorksOutWhatAMethodIsCalledOncallsInterpreterTest::testRecordStatementsFilesTheStatementsOfEveryReadingUnderThePreparedHandlecallsInterpreterTest::testRecordStatementsMarksAStatementCombinedWhenEitherTheTextOrTheReadingIscallsInterpreterTest::testRecordStatementsRecordsACallNothingCouldBeReadFromAsUnreadcallsInterpreterTest::testRecordStatementsSkipsAReadingWithoutTheStatementcallsInterpreterTest::testRecordUnmatchedFilesTheCallUnderItsOwnSinkcallsInterpreterTest::testRecordUnmatchedKeysTheCallByItsFileAndOffsetcallsInterpreterTest::testUnidentifiedCoversANullsafeCallButNotAFunctionCallcallsInterpreterTest::testUnidentifiedIsTrueOnlyForATextCarryingCallOnSomethingUnknowncallsInterpreterTest::testUnreadQuotesTheCallInItsOnlyGapcallsInterpreterTest::testVisitHandsBackNothingForABindingCallWrittenWithoutAReceivercallsInterpreterTest::testVisitHandsBackWhatAnExecuteBindscallsInterpreterTest::testVisitRecordsAStatementAndHandsBackNothingToBindLatercallsInterpreterTest::testVisitRecordsNothingForACallWithoutItsStatementcallsInterpreterTest::testVisitRecordsNothingForADatabaseCallThatTakesNoStatementcallsModelQueriesTest::testSolveKeepsCompilerFlagsAndMultipleOutputscallsModelQueriesTest::testSolveRetainsMissingModelsAsIncompleteStatementscallsReferenceEvaluatorTest::testAssignElementIgnoresATargetItCannotNamecallsReferenceEvaluatorTest::testAssignElementKeepsWhetherTheArrayIsKnownInFullcallsReferenceEvaluatorTest::testAssignElementMarksTheArrayANestedWriteGoesIntoAsIncompletecallsReferenceEvaluatorTest::testAssignLeavesATargetItDoesNotTrackAlonecallsReferenceEvaluatorTest::testAssignListDescendsIntoANestedListcallsReferenceEvaluatorTest::testAssignListLeavesAGapCarryingTheOriginOfAValueThatIsNotAKnownArraycallsReferenceEvaluatorTest::testAssignListLeavesAGapForAnElementTheArrayDoesNotHoldcallsReferenceEvaluatorTest::testAssignListReadsAKeyedTargetByItsKeycallsReferenceEvaluatorTest::testAssignListWritesEachElementIntoTheTargetAtItsPositioncallsReferenceEvaluatorTest::testAssignWritesIntoAnArrayHeldByAVariablecallsReferenceEvaluatorTest::testEvaluateOnlyAnswersForReferencescallsReferenceEvaluatorTest::testEvaluateReadsAnInstantiationAStaticPropertyAndAClosurecallsReferenceEvaluatorTest::testLoseTrackLeavesAnythingThatIsNotATrackedArrayAlonecallsReferenceEvaluatorTest::testLoseTrackMarksAnArrayHeldByAPropertyOfThisAsIncompletecallsReferenceEvaluatorTest::testLoseTrackMarksTheArrayANestedWriteGoesIntoAsIncompletecallsReferenceEvaluatorTest::testOriginOfIsTheOriginOfTheFirstGapUnlessAnyGapIsExternalInputcallsReferenceEvaluatorTest::testOriginOfReportsExternalInputWhenAnyTermCarriesItcallsReferenceEvaluatorTest::testReadArrayIsCalledWithTheExpressionItselfcallsReferenceEvaluatorTest::testReadArrayKeepsTheElementsWrittenAfterAnUnpackingcallsReferenceEvaluatorTest::testReadArrayKnowsALiteralWithoutUnpackingInFullcallsReferenceEvaluatorTest::testReadArrayMarksAnUnpackedLiteralIncompletecallsReferenceEvaluatorTest::testReadElementFallsBackToTheOriginOfTheArraycallsReferenceEvaluatorTest::testReadElementIsCalledWithTheExpressionItselfcallsReferenceEvaluatorTest::testReadElementLeavesAGapForAnElementTheArrayDoesNotHoldcallsReferenceEvaluatorTest::testReadElementUnderAKeyThatDidNotResolveQuotesTheGapOfAnArrayKnownOnlyInPartcallsReferenceEvaluatorTest::testReadEnumPropertyIgnoresAClassTheSourceDoesNotDeclarecallsReferenceEvaluatorTest::testReadInstanceGivesUpOnAnExpressionClasscallsReferenceEvaluatorTest::testReadPropertyQuotesAPropertyItCannotNamecallsReferenceEvaluatorTest::testReadPropertyQuotesAStaticPropertyWhoseClassItCannotNamecallsReferenceEvaluatorTest::testReadVariableGivesUpOnAVariableVariablecallsReferenceEvaluatorTest::testReadVariableNamesTheExternalInputItReadscallsReferenceEvaluatorTest::testReadVariablePreservesProvenanceAndDomainFlagsWhileNamingOpaqueValuescallsReferenceEvaluatorTest::testReadVariableResolvesThisToTheEnclosingClasscallsReferenceEvaluatorTest::testTrackedNameNamesAVariableOrAPropertyOfThiscallsSinkMatcherTest::testByNameCollectsEveryCallWrittenWithThatNamecallsSinkMatcherTest::testByNameKeepsEveryCallOfThatNamecallsSinkMatcherTest::testClassMatchesFollowsInheritanceOfTheRunningProcesscallsSinkMatcherTest::testClassMatchesIgnoresALeadingBackslashAndTheCaseOfTheNamecallsSinkMatcherTest::testClassMatchesNeverLoadsAClassOfTheAnalyzedSourcecallsSinkMatcherTest::testClassMatchesReadsTheRunningProcessOnlyForAClassThatIsRelatedcallsSinkMatcherTest::testClassMatchesUsesRegisteredTypeRelationsOnlycallsSinkMatcherTest::testMatchFunctionFindsTheFreeFunctioncallsSinkMatcherTest::testMatchMethodFindsTheCallOnAKnownReceivercallsSinkMatcherTest::testMatchMethodIgnoresAReceiverNothingIsKnownAboutcallsSinkMatcherTest::testMatchStaticFindsTheCallOnAKnownClasscallsSinkMatcherTest::testModelsSaysWhetherAnExtensionAlreadyStandsForTheReceivercallsSinkMatcherTest::testReceiverMatchesReadsTheClassOutOfTheDomaincallsCallContextTest::testKeepsTheModelContractInputscallsModelContextTest::testKeepsTheModelContractInputscallsQueryModelInterfaceTest::testInputsCanBeProvidedOutsideTheBuiltinscallsProgramIndexBuilderTestcallsBuilderCallsTest::testAllocateNeverReusesAnIdentityForTheSameStatecallsBuilderCallsTest::testBoundedMarksTooManyAlternativesAsOneOpenStateInsteadOfLosingEffectscallsBuilderCallsTest::testCallbackReturnsNullWithoutARegisteredRunnercallsBuilderCallsTest::testConnectionCallAliasesTheTableAndKeepsUnknownTablesOpencallsBuilderCallsTest::testConnectionCallAllocatesIndependentQueriesAndExplicitRawExpressionscallsBuilderCallsTest::testConnectionCallPreservesRawSqlAndAnExplicitConnectionNamecallsBuilderCallsTest::testConnectionDialectUsesConcreteConnectionsBeforeTheFallbackcallsBuilderCallsTest::testExecutionFindRetainsItsPredicateAndTheModelReturnTypecallsBuilderCallsTest::testExecutionPreservesFirstLimitAndReturnsACollectionForGetcallsBuilderCallsTest::testExecutionRetainsTheWindowOfSingleRowReadsAndTheirReturnTypescallsBuilderCallsTest::testExecutionReturnsTheFrameworkTypeWithoutInventingAnotherQuerycallsBuilderCallsTest::testIsBuilderRecognizesSourceDeclaredModelsAndBothBuilderContractscallsBuilderCallsTest::testIsConnectionRecognizesConcreteGrammarContractscallsBuilderCallsTest::testIsConnectionRecognizesInjectedConnectionContractscallsBuilderCallsTest::testMethodCallMutatesTheExistingIdentityAndLeavesOtherClassesAlonecallsBuilderCallsTest::testMutateNamesTheUnmodelledOperationInItsDiagnosticcallsBuilderCallsTest::testMutateOnlyChangesSoftDeleteModesForModelsUsingTheTraitcallsBuilderCallsTest::testMutateRetainsEarlierUnknownEffectscallsBuilderCallsTest::testMutateTreatsIdentityCallsAndEagerLoadsWithoutOpeningTheQuerycallsBuilderCallsTest::testPositionalRejectsNamedAndUnpackedArgumentscallsBuilderCallsTest::testStaticCallCreatesFacadeQueriesAndDoesNotModelUnrelatedStaticscallsBuilderCallsTest::testUnsupportedInvalidatesAliasesWithoutLosingTheirIdentitycallsBuilderQueriesTest::testCompileAppliesSoftDeletesOnlyAtExecutioncallsBuilderQueriesTest::testCompileGroupsDisjunctionsBeforeApplyingSoftDeletescallsBuilderQueriesTest::testCompileKeepsUnknownEffectsAndMissingDialectsOpencallsBuilderQueriesTest::testCompileRequiresADialectEvenWhenEveryIdentifierIsRawcallsBuilderQueriesTest::testDispatchRoutesReadsAndWritesToTheirCompilerscallsBuilderQueriesTest::testInputsUsesTheReceiverOrModelFactoryBeforeTheArgumentscallsBuilderQueriesTest::testOutputsListsEveryStatementAPaginatedOrEagerReadIssuescallsBuilderQueriesTest::testPrepareAppliesScopesAndMarksUnmodelledWritescallsCallbackModelTest::testCheckedPreservesAVisibleGapWhenTheCallbackExceedsItsBudgetcallsCallbackModelTest::testClosedRejectsWidenedResultsAndForeignIdentitiescallsCallbackModelTest::testConditionalKeepsBothOutcomesOfWhenAndUnlesscallsCallbackModelTest::testNestedRestoresOuterClausesAndGroupsOnlyNewPredicatescallsCallModelTestcallsLaravelExtensionTest::testModelsRegistersLaravelSemanticsThroughTheOptionalContractcallsModelMetadataTest::testConventionalTableUsesKnownEnglishNamesAndRequiresExplicitOtherInflectionscallsModelMetadataTest::testScalarDoesNotEvaluateApplicationCallscallsAnalyzerTestcallsJsonReporterTestcallsTextReporterTestcalls
Relations§
Instantiated in 1
Method calls 34
- method-call SqlCatalog\Core\Analysis\CallEvaluator::applyEffects() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:119
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateMethod() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:210
- method-call SqlCatalog\Core\Analysis\CallEvaluator::dispatch() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:248
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateStatic() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:293
- method-call SqlCatalog\Core\Analysis\CallEvaluator::evaluateFunction() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:341
- method-call SqlCatalog\Core\Analysis\CallEvaluator::functionName() packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:366
- method-call SqlCatalog\Core\Analysis\ConstantReader::readConstant() packages/sql-catalog/src/Core/Analysis/ConstantReader.php:55
- method-call SqlCatalog\Core\Analysis\ConstantReader::constantName() packages/sql-catalog/src/Core/Analysis/ConstantReader.php:72
- method-call SqlCatalog\Core\Analysis\ConstantReader::readClassConstant() packages/sql-catalog/src/Core/Analysis/ConstantReader.php:110
- method-call SqlCatalog\Core\Analysis\ConstantReader::readClassConstant() packages/sql-catalog/src/Core/Analysis/ConstantReader.php:115
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::inheritorsOf() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:151
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::reaches() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:177
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::staticTarget() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:217
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:234
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:237
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:242
- method-call SqlCatalog\Core\Analysis\Derivation\Callers::related() packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:249
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::writersOf() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:105
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::promotions() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:143
- method-call SqlCatalog\Core\Analysis\Derivation\PropertyWrites::defaultOf() packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:164
- method-call SqlCatalog\Core\Analysis\ReferenceEvaluator::readProperty() packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:205
- method-call SqlCatalog\Core\Analysis\ReferenceEvaluator::readProperty() packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:212
- method-call SqlCatalog\Core\Analysis\ReferenceEvaluator::readEnumProperty() packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:232
- method-call SqlCatalog\Core\Analysis\SinkMatcher::classMatches() packages/sql-catalog/src/Core/Analysis/SinkMatcher.php:142
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:72
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isBuilder() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:73
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isConnection() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:162
- method-call SqlCatalog\Extension\Laravel\BuilderCalls::isConnection() packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:166
- method-call SqlCatalog\Extension\Laravel\CallbackModel::apply() packages/sql-catalog/src/Extension/Laravel/CallbackModel.php:49
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::state() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:59
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::guard() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:72
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::recognizes() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:134
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::property() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:147
- method-call SqlCatalog\Extension\Laravel\ModelMetadata::constant() packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:161
Type declarations 22
- type SqlCatalog\Core\Analysis\CallEvaluator packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:39
- type SqlCatalog\Core\Analysis\CallEvaluator packages/sql-catalog/src/Core/Analysis/CallEvaluator.php:57
- type SqlCatalog\Core\Analysis\ConstantReader packages/sql-catalog/src/Core/Analysis/ConstantReader.php:28
- type SqlCatalog\Core\Analysis\ConstantReader packages/sql-catalog/src/Core/Analysis/ConstantReader.php:35
- type SqlCatalog\Core\Analysis\Derivation\Callers packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:45
- type SqlCatalog\Core\Analysis\Derivation\Callers packages/sql-catalog/src/Core/Analysis/Derivation/Callers.php:52
- type SqlCatalog\Core\Analysis\Derivation\PropertyWrites packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:29
- type SqlCatalog\Core\Analysis\Derivation\PropertyWrites packages/sql-catalog/src/Core/Analysis/Derivation/PropertyWrites.php:48
- type SqlCatalog\Core\Analysis\Effect\WriteEffects packages/sql-catalog/src/Core/Analysis/Effect/WriteEffects.php:36
- type SqlCatalog\Core\Analysis\Effect\WriteEffects packages/sql-catalog/src/Core/Analysis/Effect/WriteEffects.php:101
- type SqlCatalog\Core\Analysis\Interpreter packages/sql-catalog/src/Core/Analysis/Interpreter.php:58
- type SqlCatalog\Core\Analysis\Interpreter packages/sql-catalog/src/Core/Analysis/Interpreter.php:84
- type SqlCatalog\Core\Analysis\ReferenceEvaluator packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:27
- type SqlCatalog\Core\Analysis\ReferenceEvaluator packages/sql-catalog/src/Core/Analysis/ReferenceEvaluator.php:40
- type SqlCatalog\Core\Analysis\SinkMatcher packages/sql-catalog/src/Core/Analysis/SinkMatcher.php:24
- type SqlCatalog\Core\Analysis\SinkMatcher packages/sql-catalog/src/Core/Analysis/SinkMatcher.php:30
- type SqlCatalog\Core\Extension\Model\ModelContext packages/sql-catalog/src/Core/Extension/Model/ModelContext.php:29
- type SqlCatalog\Core\Php\ProgramIndexBuilder packages/sql-catalog/src/Core/Php/ProgramIndexBuilder.php:46
- type SqlCatalog\Extension\Laravel\BuilderCalls packages/sql-catalog/src/Extension/Laravel/BuilderCalls.php:63
- type SqlCatalog\Extension\Laravel\BuilderQueries packages/sql-catalog/src/Extension/Laravel/BuilderQueries.php:27
- type SqlCatalog\Extension\Laravel\CallbackModel packages/sql-catalog/src/Extension/Laravel/CallbackModel.php:26
- type SqlCatalog\Extension\Laravel\ModelMetadata packages/sql-catalog/src/Extension/Laravel/ModelMetadata.php:38