@@ -71,24 +71,10 @@ class Inlining extends MacroTransform, SymTransformer {
71
71
def transformInlineTrait (inlineTrait : TypeDef )(using Context ): TypeDef =
72
72
val tpd .TypeDef (_, tmpl : Template ) = inlineTrait : @ unchecked
73
73
val body1 = tmpl.body.flatMap {
74
- case innerClass @ tpd.TypeDef (name, tmpl1 : Template ) =>
75
- val newTrait = cpy.TypeDef (innerClass)(name = newInnerClassName(name))
76
- val upperBound = innerClass.symbol.primaryConstructor.info match {
77
- case _ : MethodType =>
78
- newTrait.symbol.typeRef
79
- case poly : PolyType =>
80
- HKTypeLambda (poly.paramNames)(tl => poly.paramInfos, tl => newTrait.symbol.typeRef.appliedTo(tl.paramRefs.head))
81
- }
82
- val newTypeSym = newSymbol(
83
- owner = inlineTrait.symbol,
84
- name = name.asTypeName,
85
- flags = innerClass.symbol.flags & (Private | Protected ),
86
- info = TypeBounds .upper(upperBound),
87
- privateWithin = innerClass.symbol.privateWithin,
88
- coord = innerClass.symbol.coord,
89
- nestingLevel = innerClass.symbol.nestingLevel,
90
- ).asType
91
- List (newTrait, TypeDef (newTypeSym))
74
+ case innerClass : TypeDef if innerClass.symbol.isClass =>
75
+ val newTrait = makeTraitFromInnerClass(innerClass)
76
+ val newType = makeTypeFromInnerClass(inlineTrait.symbol, innerClass, newTrait.symbol)
77
+ List (newTrait, newType)
92
78
case member : MemberDef =>
93
79
List (member)
94
80
case _ =>
@@ -97,6 +83,28 @@ class Inlining extends MacroTransform, SymTransformer {
97
83
val tmpl1 = cpy.Template (tmpl)(body = body1)
98
84
cpy.TypeDef (inlineTrait)(rhs = tmpl1)
99
85
86
+ private def makeTraitFromInnerClass (innerClass : TypeDef )(using Context ): TypeDef =
87
+ cpy.TypeDef (innerClass)(name = newInnerClassName(innerClass.name))
88
+
89
+ private def makeTypeFromInnerClass (parentSym : Symbol , innerClass : TypeDef , newTraitSym : Symbol )(using Context ): TypeDef =
90
+ val upperBound = innerClass.symbol.primaryConstructor.info match {
91
+ case _ : MethodType =>
92
+ newTraitSym.typeRef
93
+ case poly : PolyType =>
94
+ HKTypeLambda (poly.paramNames)(tl => poly.paramInfos, tl => newTraitSym.typeRef.appliedTo(tl.paramRefs.head))
95
+ }
96
+ val newTypeSym = newSymbol(
97
+ owner = parentSym,
98
+ name = newTraitSym.name.asTypeName,
99
+ flags = innerClass.symbol.flags & (Private | Protected ),
100
+ info = TypeBounds .upper(upperBound),
101
+ privateWithin = innerClass.symbol.privateWithin,
102
+ coord = innerClass.symbol.coord,
103
+ nestingLevel = innerClass.symbol.nestingLevel,
104
+ ).asType
105
+ TypeDef (newTypeSym)
106
+ end makeTypeFromInnerClass
107
+
100
108
private class InliningTreeMap extends TreeMapWithImplicits {
101
109
102
110
/** List of top level classes added by macro annotation in a package object.
0 commit comments