/** * Locate every available Record class. * * @param TokenizerInterface $tokenizer * @throws SchemaException */ protected function locateRecords(TokenizerInterface $tokenizer) { //Table names associated with records $sources = []; foreach ($tokenizer->getClasses(RecordEntity::class) as $class => $definition) { if ($class == RecordEntity::class || $class == Record::class) { continue; } $this->records[$class] = $record = new RecordSchema($this, $class); if (!$record->isAbstract()) { //See comment near exception continue; } //Record associated tableID (includes resolved database name) $sourceID = $record->getSourceID(); if (isset($sources[$sourceID])) { //We are not allowing multiple records talk to same database, unless they one of them //is abstract throw new SchemaException("Record '{$record}' associated with " . "same source table '{$sourceID}' as '{$sources[$sourceID]}'."); } $sources[$sourceID] = $record; } }