@@ -586,11 +586,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
586
586
}
587
587
588
588
/** Decompose a type into subspaces -- assume the type can be decomposed */
589
- def decompose (tp : Type ): List [Space ] = {
590
- val children = tp.classSymbol.children
591
-
592
- debug.println(s " candidates for ${tp.show} : [ ${children.map(_.show).mkString(" , " )}] " )
593
-
589
+ def decompose (tp : Type ): List [Space ] =
594
590
tp.dealias match {
595
591
case AndType (tp1, tp2) =>
596
592
intersect(Typ (tp1, false ), Typ (tp2, false )) match {
@@ -607,8 +603,13 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
607
603
case tp if tp.isRef(defn.UnitClass ) =>
608
604
Typ (ConstantType (Constant (())), true ) :: Nil
609
605
case tp if tp.classSymbol.isAllOf(JavaEnumTrait ) =>
606
+ tp.classSymbol.linkedClass.info.decls.toList.map(_.ensureCompleted())
607
+ val children = tp.classSymbol.children
610
608
children.map(sym => Typ (sym.termRef, true ))
611
609
case tp =>
610
+ val children = tp.classSymbol.children
611
+ debug.println(s " candidates for ${tp.show} : [ ${children.map(_.show).mkString(" , " )}] " )
612
+
612
613
val parts = children.map { sym =>
613
614
val sym1 = if (sym.is(ModuleClass )) sym.sourceModule else sym
614
615
val refined = TypeOps .refineUsingParent(tp, sym1)
@@ -630,7 +631,7 @@ class SpaceEngine(implicit ctx: Context) extends SpaceLogic {
630
631
631
632
parts.map(Typ (_, true ))
632
633
}
633
- }
634
+
634
635
635
636
/** Abstract sealed types, or-types, Boolean and Java enums can be decomposed */
636
637
def canDecompose (tp : Type ): Boolean = {
0 commit comments