findSubclasses method

  1. @override
List<Class> findSubclasses(
  1. Class parentClass
)
override

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);
}