findSubclasses method
Finds all direct subclasses of the specified class with caching.
Parameters:
parentClass
: The parent class to find subclasses for
Returns:
- List of direct subclasses (not transitive)
- Empty list if no subclasses exist
- Cached results for subsequent calls
Caching Strategy
- Results are cached by parent class qualified name
- Cache is invalidated when new classes are loaded
- Supports incremental updates for dynamic loading
Example
final animalClass = await loader.loadClass<Animal>('com.example.Animal');
final subclasses = await loader.findSubclasses(animalClass);
// Returns: [Dog, Cat, Bird] (direct subclasses only)
Performance Notes
- First call performs full hierarchy scan
- Subsequent calls return cached O(1) results
- Cache updates are incremental for new class additions
Implementation
@override
List<Class> findSubclasses(Class parentClass) {
_checkClosed();
final cacheKey = "${_buildCacheKey(parentClass)}:classes";
// Check cache first
final cached = _subclassCache[cacheKey];
if (cached != null) {
_hitCount++;
return List.from(cached);
}
_missCount++;
// Compute classes
final classes = _computeSubclasses(parentClass);
// Cache result
_subclassCache[cacheKey] = classes;
return List.from(classes);
}