extractFromFile($file); echo " Found " . count($classes) . " classes:\n"; foreach ($classes as $class) { echo " - $class\n"; } echo "\n2. Detailed class extraction:\n"; $detailedClasses = $classExtractor->extractDetailedFromFile($file); echo " Found " . count($detailedClasses) . " detailed classes:\n"; foreach ($detailedClasses as $class) { echo " - {$class['type']}: {$class['name']} (line {$class['line']})\n"; echo " Namespace: " . ($class['namespace'] ?? 'NONE') . "\n"; } echo "\n3. Function extraction:\n"; $functions = $classExtractor->extractFunctionsFromFile($file); echo " Found " . count($functions) . " functions:\n"; foreach ($functions as $func) { echo " - {$func['type']}: {$func['name']} (line {$func['line']})\n"; echo " Visibility: {$func['visibility']}, Class: " . ($func['class'] ?? 'NONE') . "\n"; } echo "\n4. Use statements:\n"; $uses = $classExtractor->extractUseStatementsFromFile($file); echo " Found " . count($uses) . " use statements:\n"; foreach ($uses as $use) { echo " - {$use['class']} (line {$use['line']})\n"; if ($use['alias']) { echo " Alias: {$use['alias']}\n"; } } echo "\n5. Complete analysis:\n"; $analysis = $classExtractor->analyzeFile($file); echo " Classes: " . count($analysis['classes']) . "\n"; echo " Functions: " . count($analysis['functions']) . "\n"; echo " Uses: " . count($analysis['uses']) . "\n"; echo " Attributes: " . count($analysis['attributes']) . "\n"; // Check if this is actually working if (count($analysis['classes']) === 0 && count($analysis['functions']) === 0) { echo "\n❌ CRITICAL: No classes or functions found - Discovery is broken!\n"; echo "\n6. Debug: File content preview:\n"; $content = file_get_contents($realFile); echo " File size: " . strlen($content) . " bytes\n"; echo " First 300 characters:\n"; echo " " . substr($content, 0, 300) . "...\n"; echo "\n7. Debug: Direct tokenizer test:\n"; $tokenizer = new DiscoveryTokenizer(); $directClasses = $tokenizer->extractClasses($content); echo " Direct tokenizer found " . count($directClasses) . " classes\n"; if (count($directClasses) > 0) { foreach ($directClasses as $class) { echo " - {$class['type']}: {$class['name']}\n"; } } } else { echo "\n✅ Discovery appears to be working correctly!\n"; } } catch (\Exception $e) { echo "❌ Error during discovery test: " . $e->getMessage() . "\n"; echo "❌ Stack trace: " . $e->getTraceAsString() . "\n"; } echo "\n=== Real Discovery Test Complete ===\n";