diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/KernelImpl.scala b/compiler/src/dotty/tools/dotc/tastyreflect/KernelImpl.scala index 63181c3aa638..d2fcb429f5c7 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/KernelImpl.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/KernelImpl.scala @@ -1549,18 +1549,16 @@ class KernelImpl(val rootContext: core.Contexts.Context, val rootPosition: util. }.toList } + private def appliedTypeRef(sym: Symbol): Type = sym.typeRef.appliedTo(sym.typeParams.map(_.typeRef)) + def ClassDefSymbol_method(self: Symbol)(name: String)(implicit ctx: Context): List[DefDefSymbol] = { - self.typeRef.allMembers.iterator.map(_.symbol).collect { + appliedTypeRef(self).allMembers.iterator.map(_.symbol).collect { case sym if isMethod(sym) && sym.name.toString == name => sym.asTerm }.toList } def ClassDefSymbol_methods(self: Symbol)(implicit ctx: Context): List[DefDefSymbol] = { - val classTpe = self.typeRef.appliedTo(self.typeParams.map { param => - if (param.variance == -1) param.info.hiBound - else param.info.loBound - }) - classTpe.allMembers.iterator.map(_.symbol).collect { + appliedTypeRef(self).allMembers.iterator.map(_.symbol).collect { case sym if isMethod(sym) => sym.asTerm }.toList } diff --git a/tests/run-macros/i6518/Macro_1.scala b/tests/run-macros/i6518/Macro_1.scala index 532e6edc7bcb..48e134762919 100644 --- a/tests/run-macros/i6518/Macro_1.scala +++ b/tests/run-macros/i6518/Macro_1.scala @@ -8,7 +8,11 @@ object Macros { private def testImpl(implicit reflect: Reflection): Expr[String] = { import reflect._ - typeOf[Function1[_, _]].classSymbol.get.methods.map(_.name).sorted.mkString("\n") + val classSym = typeOf[Function1[_, _]].classSymbol.get + classSym.classMethod("apply") + classSym.classMethods + classSym.method("apply") + classSym.methods.map(_.name).sorted.mkString("\n") } }