@@ -108,6 +108,11 @@ object Typer {
108
108
def rememberSearchFailure (tree : tpd.Tree , fail : SearchFailure ) =
109
109
tree.putAttachment(HiddenSearchFailure ,
110
110
fail :: tree.attachmentOrElse(HiddenSearchFailure , Nil ))
111
+
112
+ def isInlineableFromInlineTrait (inlinedTraitSym : ClassSymbol , member : tpd.Tree )(using Context ): Boolean =
113
+ ! (member.isInstanceOf [tpd.TypeDef ] && inlinedTraitSym.typeParams.contains(member.symbol))
114
+ && ! member.symbol.is(Deferred )
115
+ && ! member.symbol.isAllOf(Inline )
111
116
}
112
117
/** Typecheck trees, the main entry point is `typed`.
113
118
*
@@ -2662,13 +2667,7 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2662
2667
val body1 = addAccessorDefs(cls, typedStats(impl.body, dummy)(using ctx.inClassContext(self1.symbol))._1) ::: inlineTraitDefs
2663
2668
2664
2669
if ! ctx.isAfterTyper && cls.isInlineTrait then
2665
- def isConstructorType (t : Tree ) = t.isInstanceOf [TypeDef ] && cls.typeParams.contains(t.symbol)
2666
- // If the following is changed, remember to adapt TreeUnpickler.scala as well
2667
- val membersToInline = body1.filter { t =>
2668
- ! isConstructorType(t)
2669
- && ! t.symbol.is(Deferred )
2670
- && ! t.symbol.isAllOf(Inline )
2671
- }
2670
+ val membersToInline = body1.filter(member => isInlineableFromInlineTrait(cls, member))
2672
2671
val wrappedMembersToInline = Block (membersToInline, unitLiteral).withSpan(cdef.span)
2673
2672
PrepareInlineable .registerInlineInfo(cls, wrappedMembersToInline)
2674
2673
0 commit comments