@@ -402,61 +402,61 @@ class ClassHierarchyImpl implements ClassHierarchy {
402
402
// Exact classes [cls1] and [cls2] must be identical to have any classes
403
403
// in common.
404
404
if (cls1 != cls2) {
405
- return SubclassResult . EMPTY ;
405
+ return SimpleSubclassResult .empty ;
406
406
}
407
- return SubclassResult . EXACT1 ;
407
+ return SimpleSubclassResult .exact1 ;
408
408
} else if (query1 == ClassQuery .EXACT ) {
409
409
if (query2 == ClassQuery .SUBCLASS ) {
410
410
// Exact [cls1] must be a subclass of [cls2] to have any classes in
411
411
// common.
412
412
if (isSubclassOf (cls1, cls2)) {
413
- return SubclassResult . EXACT1 ;
413
+ return SimpleSubclassResult .exact1 ;
414
414
}
415
415
} else if (query2 == ClassQuery .SUBTYPE ) {
416
416
// Exact [cls1] must be a subtype of [cls2] to have any classes in
417
417
// common.
418
418
if (isSubtypeOf (cls1, cls2)) {
419
- return SubclassResult . EXACT1 ;
419
+ return SimpleSubclassResult .exact1 ;
420
420
}
421
421
}
422
- return SubclassResult . EMPTY ;
422
+ return SimpleSubclassResult .empty ;
423
423
} else if (query2 == ClassQuery .EXACT ) {
424
424
if (query1 == ClassQuery .SUBCLASS ) {
425
425
// Exact [cls2] must be a subclass of [cls1] to have any classes in
426
426
// common.
427
427
if (isSubclassOf (cls2, cls1)) {
428
- return SubclassResult . EXACT2 ;
428
+ return SimpleSubclassResult .exact2 ;
429
429
}
430
430
} else if (query1 == ClassQuery .SUBTYPE ) {
431
431
// Exact [cls2] must be a subtype of [cls1] to have any classes in
432
432
// common.
433
433
if (isSubtypeOf (cls2, cls1)) {
434
- return SubclassResult . EXACT2 ;
434
+ return SimpleSubclassResult .exact2 ;
435
435
}
436
436
}
437
- return SubclassResult . EMPTY ;
437
+ return SimpleSubclassResult .empty ;
438
438
} else if (query1 == ClassQuery .SUBCLASS && query2 == ClassQuery .SUBCLASS ) {
439
439
// [cls1] must be a subclass of [cls2] or vice versa to have any classes
440
440
// in common.
441
441
if (cls1 == cls2 || isSubclassOf (cls1, cls2)) {
442
442
// The subclasses of [cls1] are contained within the subclasses of
443
443
// [cls2].
444
- return SubclassResult . SUBCLASS1 ;
444
+ return SimpleSubclassResult .subclass1 ;
445
445
} else if (isSubclassOf (cls2, cls1)) {
446
446
// The subclasses of [cls2] are contained within the subclasses of
447
447
// [cls1].
448
- return SubclassResult . SUBCLASS2 ;
448
+ return SimpleSubclassResult .subclass2 ;
449
449
}
450
- return SubclassResult . EMPTY ;
450
+ return SimpleSubclassResult .empty ;
451
451
} else if (query1 == ClassQuery .SUBCLASS ) {
452
452
if (isSubtypeOf (cls1, cls2)) {
453
453
// The subclasses of [cls1] are all subtypes of [cls2].
454
- return SubclassResult . SUBCLASS1 ;
454
+ return SimpleSubclassResult .subclass1 ;
455
455
}
456
456
if (cls1 == _commonElements.objectClass) {
457
457
// Since [cls1] is `Object` all subtypes of [cls2] are contained within
458
458
// the subclasses of [cls1].
459
- return SubclassResult . SUBTYPE2 ;
459
+ return SimpleSubclassResult .subtype2 ;
460
460
}
461
461
// Find all the root subclasses of [cls1] of that implement [cls2].
462
462
//
@@ -481,16 +481,16 @@ class ClassHierarchyImpl implements ClassHierarchy {
481
481
}
482
482
return IterationStep .CONTINUE ;
483
483
});
484
- return SubclassResult (classes);
484
+ return SetSubclassResult (classes);
485
485
} else if (query2 == ClassQuery .SUBCLASS ) {
486
486
if (isSubtypeOf (cls2, cls1)) {
487
487
// The subclasses of [cls2] are all subtypes of [cls1].
488
- return SubclassResult . SUBCLASS2 ;
488
+ return SimpleSubclassResult .subclass2 ;
489
489
}
490
490
if (cls2 == _commonElements.objectClass) {
491
491
// Since [cls2] is `Object` all subtypes of [cls1] are contained within
492
492
// the subclasses of [cls2].
493
- return SubclassResult . SUBTYPE1 ;
493
+ return SimpleSubclassResult .subtype1 ;
494
494
}
495
495
// Find all the root subclasses of [cls2] of that implement [cls1].
496
496
List <ClassEntity > classes = [];
@@ -503,14 +503,14 @@ class ClassHierarchyImpl implements ClassHierarchy {
503
503
}
504
504
return IterationStep .CONTINUE ;
505
505
});
506
- return SubclassResult (classes);
506
+ return SetSubclassResult (classes);
507
507
} else {
508
508
if (cls1 == cls2 || isSubtypeOf (cls1, cls2)) {
509
509
// The subtypes of [cls1] are contained within the subtypes of [cls2].
510
- return SubclassResult . SUBTYPE1 ;
510
+ return SimpleSubclassResult .subtype1 ;
511
511
} else if (isSubtypeOf (cls2, cls1)) {
512
512
// The subtypes of [cls2] are contained within the subtypes of [cls1].
513
- return SubclassResult . SUBTYPE2 ;
513
+ return SimpleSubclassResult .subtype2 ;
514
514
}
515
515
// Find all the root subclasses of [cls1] of that implement [cls2].
516
516
//
@@ -537,7 +537,7 @@ class ClassHierarchyImpl implements ClassHierarchy {
537
537
}
538
538
return IterationStep .CONTINUE ;
539
539
});
540
- return SubclassResult (classes);
540
+ return SetSubclassResult (classes);
541
541
}
542
542
}
543
543
@@ -935,59 +935,38 @@ enum ClassQuery {
935
935
SUBTYPE ,
936
936
}
937
937
938
- /// Result kind for [ClassHierarchy.commonSubclasses] .
939
- enum SubclassResultKind {
938
+ /// Result computed in [ClassHierarchy.commonSubclasses] .
939
+ sealed class SubclassResult {}
940
+
941
+ enum SimpleSubclassResult implements SubclassResult {
940
942
/// No common subclasses.
941
- EMPTY ,
943
+ empty ,
942
944
943
945
/// Exactly the first class in common.
944
- EXACT1 ,
946
+ exact1 ,
945
947
946
948
/// Exactly the second class in common.
947
- EXACT2 ,
949
+ exact2 ,
948
950
949
951
/// Subclasses of the first class in common.
950
- SUBCLASS1 ,
952
+ subclass1 ,
951
953
952
954
/// Subclasses of the second class in common.
953
- SUBCLASS2 ,
955
+ subclass2 ,
954
956
955
957
/// Subtypes of the first class in common.
956
- SUBTYPE1 ,
958
+ subtype1 ,
957
959
958
960
/// Subtypes of the second class in common.
959
- SUBTYPE2 ,
960
-
961
- /// Subclasses of a set of classes in common.
962
- SET
961
+ subtype2,
963
962
}
964
963
965
- /// Result computed in [ClassHierarchy.commonSubclasses] .
966
- class SubclassResult {
967
- final SubclassResultKind kind;
968
- final List <ClassEntity >? _classes;
969
-
970
- List <ClassEntity > get classes => _classes! ;
971
-
972
- SubclassResult (this ._classes) : kind = SubclassResultKind .SET ;
973
-
974
- const SubclassResult .internal (this .kind) : _classes = null ;
975
-
976
- static const SubclassResult EMPTY =
977
- SubclassResult .internal (SubclassResultKind .EMPTY );
978
- static const SubclassResult EXACT1 =
979
- SubclassResult .internal (SubclassResultKind .EXACT1 );
980
- static const SubclassResult EXACT2 =
981
- SubclassResult .internal (SubclassResultKind .EXACT2 );
982
- static const SubclassResult SUBCLASS1 =
983
- SubclassResult .internal (SubclassResultKind .SUBCLASS1 );
984
- static const SubclassResult SUBCLASS2 =
985
- SubclassResult .internal (SubclassResultKind .SUBCLASS2 );
986
- static const SubclassResult SUBTYPE1 =
987
- SubclassResult .internal (SubclassResultKind .SUBTYPE1 );
988
- static const SubclassResult SUBTYPE2 =
989
- SubclassResult .internal (SubclassResultKind .SUBTYPE2 );
964
+ /// Subclasses of a set of classes in common.
965
+ class SetSubclassResult implements SubclassResult {
966
+ final List <ClassEntity > classes;
967
+
968
+ SetSubclassResult (this .classes);
990
969
991
970
@override
992
- String toString () => 'SubclassResult($ kind , classes=$_classes )' ;
971
+ String toString () => 'SetSubclassResult( classes=$classes )' ;
993
972
}
0 commit comments