@@ -645,26 +645,22 @@ class SpaceEngine(using Context) extends SpaceLogic {
645645
646646
647647 /** Abstract sealed types, or-types, Boolean and Java enums can be decomposed */
648- def canDecompose (tp : Type ): Boolean = {
649- val dealiasedTp = tp.dealias
650- val res =
651- (tp.classSymbol.is(Sealed ) &&
652- tp.classSymbol.isOneOf(AbstractOrTrait ) &&
653- ! tp.classSymbol.hasAnonymousChild &&
654- tp.classSymbol.children.nonEmpty ) ||
655- dealiasedTp.isInstanceOf [OrType ] ||
656- (dealiasedTp.isInstanceOf [AndType ] && {
657- val and = dealiasedTp.asInstanceOf [AndType ]
658- canDecompose(and.tp1) || canDecompose(and.tp2)
659- }) ||
660- tp.isRef(defn.BooleanClass ) ||
661- tp.isRef(defn.UnitClass ) ||
662- tp.classSymbol.isAllOf(JavaEnumTrait )
663-
648+ def canDecompose (tp : Type ): Boolean =
649+ val res = tp.dealias match
650+ case _ : SingletonType => false
651+ case _ : OrType => true
652+ case and : AndType => canDecompose(and.tp1) || canDecompose(and.tp2)
653+ case _ =>
654+ val cls = tp.classSymbol
655+ cls.is(Sealed )
656+ && cls.isOneOf(AbstractOrTrait )
657+ && ! cls.hasAnonymousChild
658+ && cls.children.nonEmpty
659+ || cls.isAllOf(JavaEnumTrait )
660+ || tp.isRef(defn.BooleanClass )
661+ || tp.isRef(defn.UnitClass )
664662 debug.println(s " decomposable: ${tp.show} = $res" )
665-
666663 res
667- }
668664
669665 /** Show friendly type name with current scope in mind
670666 *
@@ -765,7 +761,8 @@ class SpaceEngine(using Context) extends SpaceLogic {
765761 if (flattenList && tp <:< scalaNilType) " "
766762 else tp.symbol.showName
767763 case Typ (tp, decomposed) =>
768- val sym = tp.widen.classSymbol
764+
765+ val sym = tp.classSymbol
769766
770767 if (ctx.definitions.isTupleType(tp))
771768 params(tp).map(_ => " _" ).mkString(" (" , " , " , " )" )
0 commit comments