From 56c877c74abed69f088104737971377c9d63a5ef Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 8 Aug 2019 11:43:03 +0200 Subject: [PATCH 1/4] Refactor TermRef extractor Make it closer to NamedTermRef extractor --- .../ReflectionCompilerInterface.scala | 11 ++--- .../tasty/reflect/CompilerInterface.scala | 8 ++-- .../src/scala/tasty/reflect/Printers.scala | 47 ++++++++++--------- .../src/scala/tasty/reflect/SymbolOps.scala | 3 ++ .../scala/tasty/reflect/TypeOrBoundsOps.scala | 6 ++- .../tasty-macro-assert-1/quoted_1.scala | 2 +- .../tasty-macro-assert-2/quoted_1.scala | 2 +- tests/run-macros/tasty-eval/quoted_1.scala | 4 +- tests/run-macros/tasty-extractors-1.check | 10 ++-- tests/run-macros/tasty-extractors-2.check | 10 ++-- tests/run-macros/tasty-extractors-3.check | 14 +++--- tests/run-macros/tasty-extractors-types.check | 8 ++-- .../tasty-macro-assert/quoted_1.scala | 2 +- 13 files changed, 65 insertions(+), 62 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala index 2bf5e9907251..9684a6b9482f 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala @@ -1114,6 +1114,8 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend def Type_typeSymbol(self: Type) given Context: Symbol = self.typeSymbol + def Type_termSymbol(self: Type) given Context: Symbol = self.termSymbol + def Type_isSingleton(self: Type) given Context: Boolean = self.isSingleton def Type_memberType(self: Type)(member: Symbol) given Context: Type = @@ -1158,14 +1160,7 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend def TermRef_qualifier(self: TermRef) given Context: TypeOrBounds = self.prefix - def matchTermRef_unapply(tpe: TypeOrBounds) given Context: Option[(Symbol, Type | NoPrefix)] = tpe match { - case tpe: Types.NamedType => - tpe.designator match { - case sym: Symbol if sym.isTerm => Some((sym, tpe.prefix)) - case _ => None - } - case _ => None - } + def TermRef_name(self: TermRef) given Context: String = self.name.toString type TypeRef = Types.NamedType diff --git a/library/src/scala/tasty/reflect/CompilerInterface.scala b/library/src/scala/tasty/reflect/CompilerInterface.scala index f021a707e4fe..cb6ce8bc8ea2 100644 --- a/library/src/scala/tasty/reflect/CompilerInterface.scala +++ b/library/src/scala/tasty/reflect/CompilerInterface.scala @@ -878,10 +878,12 @@ trait CompilerInterface { */ def Type_dealias(self: Type) given (ctx: Context): Type - def Type_classSymbol(self: Type) given (ctx: Context): Option[ClassDefSymbol] + def Type_classSymbol(self: Type) given (ctx: Context): Option[ClassDefSymbol] // TODO remove Option and use NoSymbol def Type_typeSymbol(self: Type) given (ctx: Context): Symbol + def Type_termSymbol(self: Type) given (ctx: Context): Symbol + def Type_isSingleton(self: Type) given (ctx: Context): Boolean def Type_memberType(self: Type)(member: Symbol) given (ctx: Context): Type @@ -931,9 +933,9 @@ trait CompilerInterface { def matchTermRef(tpe: TypeOrBounds) given (ctx: Context): Option[TermRef] - def matchTermRef_unapply(tpe: TypeOrBounds) given (ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)] - def TermRef_qualifier(self: TermRef) given (ctx: Context): TypeOrBounds + def TermRef_name(self: TermRef) given (ctx: Context): String + /** Type of a reference to a type symbol */ type TypeRef <: Type diff --git a/library/src/scala/tasty/reflect/Printers.scala b/library/src/scala/tasty/reflect/Printers.scala index ac9f8b079f80..76fcf7f2de1c 100644 --- a/library/src/scala/tasty/reflect/Printers.scala +++ b/library/src/scala/tasty/reflect/Printers.scala @@ -308,8 +308,8 @@ trait Printers def visitType(x: TypeOrBounds): Buffer = x match { case Type.ConstantType(value) => this += "Type.ConstantType(" += value += ")" - case Type.TermRef(sym, qual) => - this += "Type.TermRef(" += sym += ", " += qual += ")" + case Type.TermRef(qual, name) => + this += "Type.TermRef(" += qual+= ", \"" += name += "\")" case Type.TypeRef(sym, qual) => this += "Type.TypeRef(" += sym += ", " += qual += ")" case Type.NamedTermRef(name, qual) => @@ -1423,10 +1423,10 @@ trait Printers case Type.TypeRef(IsClassDefSymbol(sym), _) if sym.fullName == "scala.runtime.Null$" || sym.fullName == "scala.runtime.Nothing$" => // scala.runtime.Null$ and scala.runtime.Nothing$ are not modules, those are their actual names printType(tpe) - case tpe @ Type.TermRef(IsClassDefSymbol(sym), _) if sym.name.endsWith("$") => + case Type.IsTermRef(tpe) if tpe.termSymbol.isClass && tpe.termSymbol.name.endsWith("$") => printType(tpe) this += ".type" - case tpe @ Type.TypeRef(IsClassDefSymbol(sym), _) if sym.name.endsWith("$") => + case Type.IsTypeRef(tpe) if tpe.typeSymbol.isClass && tpe.typeSymbol.name.endsWith("$") => printType(tpe) this += ".type" case tpe @ Type.TermRef(sym, _) => @@ -1519,8 +1519,9 @@ trait Printers case Type.ConstantType(const) => printConstant(const) - case Type.TypeRef(sym, prefix) => - prefix match { + case Type.IsTypeRef(tpe) => + val sym = tpe.typeSymbol + tpe.qualifier match { case Type.ThisType(Types.EmptyPackage() | Types.RootPackage()) => case NoPrefix() => if (sym.owner.flags.is(Flags.Package)) { @@ -1529,7 +1530,7 @@ trait Printers if (packagePath != "") this += packagePath += "." } - case IsType(prefix @ Type.TermRef(IsClassDefSymbol(_), _)) => + case Type.IsTermRef(prefix) if prefix.termSymbol.isClass => printType(prefix) this += "#" case IsType(prefix @ Type.TypeRef(IsClassDefSymbol(_), _)) => @@ -1543,14 +1544,14 @@ trait Printers } this += highlightTypeDef(sym.name.stripSuffix("$")) - case Type.TermRef(sym, prefix) => + case Type.TermRef(prefix, name) => prefix match { case NoPrefix() | Type.ThisType(Types.EmptyPackage() | Types.RootPackage()) => - this += highlightTypeDef(sym.name) + this += highlightTypeDef(name) case _ => printTypeOrBound(prefix) - if (sym.name != "package") - this += "." += highlightTypeDef(sym.name) + if (name != "package") + this += "." += highlightTypeDef(name) this } @@ -1706,8 +1707,8 @@ trait Printers val annots = definition.symbol.annots.filter { case Annotation(annot, _) => annot.tpe match { - case Type.NamedTypeRef(_, Type.TermRef(sym, _)) if sym.fullName == "scala.annotation.internal" => false - case Type.NamedTypeRef(_, Type.TypeRef(sym, _)) if sym.fullName == "scala.annotation.internal" => false + case Type.NamedTypeRef(_, Type.IsTermRef(prefix)) if prefix.termSymbol.fullName == "scala.annotation.internal" => false + case Type.NamedTypeRef(_, Type.IsTypeRef(prefix)) if prefix.typeSymbol.fullName == "scala.annotation.internal" => false case Type.NamedTypeRef("forceInline", Types.ScalaPackage()) => false case _ => true } @@ -1871,8 +1872,8 @@ trait Printers def unapply(arg: Tree) given (ctx: Context): Option[(String, List[Term])] = arg match { case IsTerm(arg @ Apply(fn, args)) => fn.tpe match { - case Type.TermRef(IsDefDefSymbol(sym), Type.ThisType(Type.TypeRef(sym2, _))) if sym2.name == "" => - Some((sym.tree.name, args)) + case tpe @ Type.TermRef(Type.ThisType(Type.TypeRef(sym2, _)), _) if sym2.name == "" => + Some((tpe.termSymbol.asDefDef.tree.name, args)) case _ => None } case _ => None @@ -1893,23 +1894,23 @@ trait Printers object JavaLangObject { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef("Object", Type.TermRef(sym, _)) => sym.fullName == "java.lang" + case Type.NamedTypeRef("Object", Type.IsTermRef(prefix)) => prefix.typeSymbol.fullName == "java.lang" case _ => false } } object Sequence { def unapply(tpe: Type) given (ctx: Context): Option[Type] = tpe match { - case Type.AppliedType(Type.NamedTypeRef("Seq", Type.TermRef(sym, _)), IsType(tp) :: Nil) if sym.fullName == "scala.collection" => Some(tp) - case Type.AppliedType(Type.NamedTypeRef("Seq", Type.TypeRef(sym, _)), IsType(tp) :: Nil) if sym.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.NamedTypeRef("Seq", Type.IsTermRef(prefix)), IsType(tp) :: Nil) if prefix.termSymbol.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.NamedTypeRef("Seq", Type.IsTypeRef(prefix)), IsType(tp) :: Nil) if prefix.typeSymbol.fullName == "scala.collection" => Some(tp) case _ => None } } object RepeatedAnnotation { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef("Repeated", Type.TermRef(sym, _)) => sym.fullName == "scala.annotation.internal" - case Type.NamedTypeRef("Repeated", Type.TypeRef(sym, _)) => sym.fullName == "scala.annotation.internal" + case Type.NamedTypeRef("Repeated", Type.IsTermRef(prefix)) => prefix.termSymbol.fullName == "scala.annotation.internal" + case Type.NamedTypeRef("Repeated", Type.IsTypeRef(prefix)) => prefix.typeSymbol.fullName == "scala.annotation.internal" case _ => false } } @@ -1923,21 +1924,21 @@ trait Printers object ScalaPackage { def unapply(tpe: TypeOrBounds) given (ctx: Context): Boolean = tpe match { - case Type.TermRef(sym, _) => sym == definitions.ScalaPackage + case Type.IsTermRef(tpe) => tpe.termSymbol == definitions.ScalaPackage case _ => false } } object RootPackage { def unapply(tpe: TypeOrBounds) given (ctx: Context): Boolean = tpe match { - case Type.TypeRef(sym, _) => sym.fullName == "" // TODO use Symbol.== + case Type.IsTypeRef(tpe) => tpe.typeSymbol.fullName == "" // TODO use Symbol.== case _ => false } } object EmptyPackage { def unapply(tpe: TypeOrBounds) given (ctx: Context): Boolean = tpe match { - case Type.TypeRef(sym, _) => sym.fullName == "" + case Type.IsTypeRef(tpe) => tpe.typeSymbol.fullName == "" case _ => false } } diff --git a/library/src/scala/tasty/reflect/SymbolOps.scala b/library/src/scala/tasty/reflect/SymbolOps.scala index db7b3ed7397e..01e071577336 100644 --- a/library/src/scala/tasty/reflect/SymbolOps.scala +++ b/library/src/scala/tasty/reflect/SymbolOps.scala @@ -85,6 +85,9 @@ trait SymbolOps extends Core { def isType given (ctx: Context): Boolean = internal.matchTypeSymbol(self).isDefined def isTerm given (ctx: Context): Boolean = internal.matchTermSymbol(self).isDefined + def isValDef given (ctx: Context): Boolean = internal.matchValDefSymbol(self).isDefined + def isDefDef given (ctx: Context): Boolean = internal.matchDefDefSymbol(self).isDefined + def isClass given (ctx: Context): Boolean = internal.matchClassDefSymbol(self).isDefined } // PackageSymbol diff --git a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala index a463ba733142..326acc4182fc 100644 --- a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala +++ b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala @@ -20,6 +20,7 @@ trait TypeOrBoundsOps extends Core { def classSymbol given (ctx: Context): Option[ClassDefSymbol] = internal.Type_classSymbol(self) def typeSymbol given (ctx: Context): Symbol = internal.Type_typeSymbol(self) + def termSymbol given (ctx: Context): Symbol = internal.Type_termSymbol(self) def isSingleton given (ctx: Context): Boolean = internal.Type_isSingleton(self) def memberType(member: Symbol) given (ctx: Context): Type = internal.Type_memberType(self)(member) @@ -84,8 +85,8 @@ trait TypeOrBoundsOps extends Core { } object TermRef { - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)] = - internal.matchTermRef_unapply(typeOrBounds) + def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = + internal.matchTermRef(typeOrBounds).map(x => (x.qualifier, x.name)) } object IsTypeRef { @@ -299,6 +300,7 @@ trait TypeOrBoundsOps extends Core { implicit class Type_TermRefAPI(self: TermRef) { def qualifier given (ctx: Context): TypeOrBounds /* Type | NoPrefix */ = internal.TermRef_qualifier(self) + def name given (ctx: Context): String = internal.TermRef_name(self) } implicit class Type_TypeRefAPI(self: TypeRef) { diff --git a/tests/neg-macros/tasty-macro-assert-1/quoted_1.scala b/tests/neg-macros/tasty-macro-assert-1/quoted_1.scala index c4981ebc3340..7815c7dede3f 100644 --- a/tests/neg-macros/tasty-macro-assert-1/quoted_1.scala +++ b/tests/neg-macros/tasty-macro-assert-1/quoted_1.scala @@ -18,7 +18,7 @@ object Asserts { val tree = cond.unseal def isOps(tpe: TypeOrBounds): Boolean = tpe match { - case Type.TermRef(IsDefDefSymbol(sym), _) => sym.name == "Ops" // TODO check that the parent is Asserts + case Type.IsTermRef(tpe) => tpe.termSymbol.isDefDef && tpe.name == "Ops"// TODO check that the parent is Asserts case _ => false } diff --git a/tests/neg-macros/tasty-macro-assert-2/quoted_1.scala b/tests/neg-macros/tasty-macro-assert-2/quoted_1.scala index 0def3546e32f..0ff6c6b24f88 100644 --- a/tests/neg-macros/tasty-macro-assert-2/quoted_1.scala +++ b/tests/neg-macros/tasty-macro-assert-2/quoted_1.scala @@ -18,7 +18,7 @@ object Asserts { val tree = cond.unseal def isOps(tpe: TypeOrBounds): Boolean = tpe match { - case Type.TermRef(IsDefDefSymbol(sym), _) => sym.name == "Ops" // TODO check that the parent is Asserts + case Type.IsTermRef(tpe) => tpe.termSymbol.isDefDef && tpe.name == "Ops"// TODO check that the parent is Asserts case _ => false } diff --git a/tests/run-macros/tasty-eval/quoted_1.scala b/tests/run-macros/tasty-eval/quoted_1.scala index e80a39d566d2..1831d7d90910 100644 --- a/tests/run-macros/tasty-eval/quoted_1.scala +++ b/tests/run-macros/tasty-eval/quoted_1.scala @@ -21,8 +21,8 @@ object Macros { import qctx.tasty._ e.unseal.tpe match { - case Type.TermRef(IsValDefSymbol(sym), pre) => - sym.tree.tpt.tpe match { + case Type.IsTermRef(pre) if pre.termSymbol.isValDef => + pre.termSymbol.asValDef.tree.tpt.tpe match { case Type.ConstantType(Constant(i: Int)) => Some(i) case _ => None } diff --git a/tests/run-macros/tasty-extractors-1.check b/tests/run-macros/tasty-extractors-1.check index 00cd51cd1ec4..ca0b7eca295d 100644 --- a/tests/run-macros/tasty-extractors-1.check +++ b/tests/run-macros/tasty-extractors-1.check @@ -20,13 +20,13 @@ Inlined(None, Nil, Apply(Ident("println"), List(Literal(Constant("abc"))))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) Inlined(None, Nil, Typed(Literal(Constant(8)), TypeIdent("Int"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inlined(None, Nil, Typed(Literal(Constant(8: Byte)), TypeIdent("Byte"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inlined(None, Nil, Typed(Literal(Constant(8: Short)), TypeIdent("Short"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inlined(None, Nil, Literal(Constant('a'))) Type.ConstantType(Constant('a')) @@ -83,7 +83,7 @@ Inlined(None, Nil, Apply(Select(Ident("Int"), "box"), List(NamedArg("x", Literal Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) Inlined(None, Nil, Apply(TypeApply(Select(Ident("Ordering"), "apply"), List(TypeIdent("Int"))), List(Ident("Int")))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) Inlined(None, Nil, Block(List(ValDef("a", TypeIdent("Int"), Some(Literal(Constant(3))))), Literal(Constant(())))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) @@ -113,7 +113,7 @@ Inlined(None, Nil, Block(List(DefDef("f7", List(TypeDef("T", TypeBoundsTree(Infe Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) Inlined(None, Nil, Block(List(DefDef("f8", Nil, List(List(ValDef("i", Annotated(Applied(Inferred(), List(TypeIdent("Int"))), Apply(Select(New(Inferred()), ""), Nil)), None))), TypeIdent("Int"), Some(Literal(Constant(9))))), Apply(Ident("f8"), List(Typed(Repeated(List(Literal(Constant(1)), Literal(Constant(2)), Literal(Constant(3))), Inferred()), Inferred()))))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inlined(None, Nil, Block(List(DefDef("f9", Nil, List(List(ValDef("i", ByName(TypeIdent("Int")), None))), TypeIdent("Int"), Some(Ident("i")))), Literal(Constant(())))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) diff --git a/tests/run-macros/tasty-extractors-2.check b/tests/run-macros/tasty-extractors-2.check index 9f688787ba7c..171d619527aa 100644 --- a/tests/run-macros/tasty-extractors-2.check +++ b/tests/run-macros/tasty-extractors-2.check @@ -2,25 +2,25 @@ Inlined(None, Nil, Block(List(ValDef("x", Inferred(), Some(Literal(Constant(1))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) Inlined(None, Nil, Block(List(DefDef("$anonfun", Nil, List(List(ValDef("x", TypeIdent("Int"), None))), Inferred(), Some(Ident("x")))), Closure(Ident("$anonfun"), None))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) Inlined(None, Nil, Ident("???")) -Type.TermRef(IsDefDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +Type.TermRef(Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef"), "???") Inlined(None, Nil, Literal(Constant(1))) Type.ConstantType(Constant(1)) Inlined(None, Nil, Typed(Literal(Constant(1)), TypeIdent("Int"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inlined(None, Nil, Typed(Ident("Nil"), Applied(TypeIdent("List"), List(TypeIdent("Int"))))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) Inlined(None, Nil, Typed(Apply(Select(New(TypeIdent("Baz")), ""), Nil), Applied(TypeIdent("&"), List(TypeIdent("Foo"), TypeIdent("Bar"))))) Type.AndType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix()))), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) Inlined(None, Nil, Typed(Literal(Constant(1)), Applied(TypeIdent("|"), List(TypeIdent("Int"), TypeIdent("String"))))) -Type.OrType(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))))) +Type.OrType(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef"))) Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, Nil)), Literal(Constant(())))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) diff --git a/tests/run-macros/tasty-extractors-3.check b/tests/run-macros/tasty-extractors-3.check index 31de889525fa..d3aa86618f56 100644 --- a/tests/run-macros/tasty-extractors-3.check +++ b/tests/run-macros/tasty-extractors-3.check @@ -1,6 +1,6 @@ Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TermRef(IsValDefSymbol(), NoPrefix()) +Type.TermRef(NoPrefix(), "x") TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) @@ -12,11 +12,11 @@ Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) -TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix()))))) +TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) @@ -30,15 +30,15 @@ Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPac Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))))) +Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) Type.TypeRef(IsClassDefSymbol(), NoPrefix()) -Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")) Type.TypeRef(IsClassDefSymbol(), NoPrefix()) -Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))))) +Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) diff --git a/tests/run-macros/tasty-extractors-types.check b/tests/run-macros/tasty-extractors-types.check index 402531ed1381..48ca1b3f8564 100644 --- a/tests/run-macros/tasty-extractors-types.check +++ b/tests/run-macros/tasty-extractors-types.check @@ -1,12 +1,12 @@ Inferred() -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(IsPackageDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(IsValDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))), Type.TypeRef(IsTypeDefSymbol(), NoPrefix()))) +Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), NoPrefix()))) diff --git a/tests/run-macros/tasty-macro-assert/quoted_1.scala b/tests/run-macros/tasty-macro-assert/quoted_1.scala index d009701fb4c2..c9fc9d98bf16 100644 --- a/tests/run-macros/tasty-macro-assert/quoted_1.scala +++ b/tests/run-macros/tasty-macro-assert/quoted_1.scala @@ -18,7 +18,7 @@ object Asserts { val tree = cond.unseal def isOps(tpe: TypeOrBounds): Boolean = tpe match { - case Type.TermRef(IsDefDefSymbol(sym), _) => sym.name == "Ops"// TODO check that the parent is Asserts + case Type.IsTermRef(tpe) => tpe.termSymbol.isDefDef && tpe.name == "Ops"// TODO check that the parent is Asserts case _ => false } From 9d8db4d2b4614cf6c73e7cffc07dee2b50dad766 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 8 Aug 2019 13:35:16 +0200 Subject: [PATCH 2/4] Refactor TypeRef extractor Make it closer to NamedTypeRef extractor --- .../ReflectionCompilerInterface.scala | 9 +-- .../tasty/reflect/CompilerInterface.scala | 3 +- .../src/scala/tasty/reflect/Printers.scala | 25 ++++--- .../scala/tasty/reflect/TypeOrBoundsOps.scala | 5 +- tests/run-macros/i5941/macro_1.scala | 4 +- tests/run-macros/tasty-definitions-1.check | 30 ++++---- tests/run-macros/tasty-extractors-1.check | 60 ++++++++-------- tests/run-macros/tasty-extractors-2.check | 68 +++++++++---------- tests/run-macros/tasty-extractors-3.check | 42 ++++++------ tests/run-macros/tasty-extractors-types.check | 8 +-- 10 files changed, 123 insertions(+), 131 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala index 9684a6b9482f..2b4926b458bd 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala @@ -1175,14 +1175,7 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend def TypeRef_qualifier(self: TypeRef) given Context: TypeOrBounds = self.prefix - def matchTypeRef_unapply(tpe: TypeOrBounds) given Context: Option[(Symbol, Type | NoPrefix)] = tpe match { - case tpe: Types.NamedType => - tpe.designator match { - case sym: Symbol if sym.isType => Some((sym, tpe.prefix)) - case _ => None - } - case _ => None - } + def TypeRef_name(self: TypeRef) given Context: String = self.name.toString type NamedTermRef = Types.NamedType diff --git a/library/src/scala/tasty/reflect/CompilerInterface.scala b/library/src/scala/tasty/reflect/CompilerInterface.scala index cb6ce8bc8ea2..2fd3411a0ab1 100644 --- a/library/src/scala/tasty/reflect/CompilerInterface.scala +++ b/library/src/scala/tasty/reflect/CompilerInterface.scala @@ -942,9 +942,8 @@ trait CompilerInterface { def matchTypeRef(tpe: TypeOrBounds) given (ctx: Context): Option[TypeRef] - def matchTypeRef_unapply(tpe: TypeOrBounds) given (ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)] - def TypeRef_qualifier(self: TypeRef) given (ctx: Context): TypeOrBounds + def TypeRef_name(self: TypeRef) given Context: String /** Type of a reference to a term by it's name */ type NamedTermRef <: Type diff --git a/library/src/scala/tasty/reflect/Printers.scala b/library/src/scala/tasty/reflect/Printers.scala index 76fcf7f2de1c..b96d9446e911 100644 --- a/library/src/scala/tasty/reflect/Printers.scala +++ b/library/src/scala/tasty/reflect/Printers.scala @@ -310,8 +310,8 @@ trait Printers this += "Type.ConstantType(" += value += ")" case Type.TermRef(qual, name) => this += "Type.TermRef(" += qual+= ", \"" += name += "\")" - case Type.TypeRef(sym, qual) => - this += "Type.TypeRef(" += sym += ", " += qual += ")" + case Type.TypeRef(qual, name) => + this += "Type.TypeRef(" += qual += ", \"" += name += "\")" case Type.NamedTermRef(name, qual) => this += "Type.NamedTermRef(\"" += name += "\", " += qual += ")" case Type.NamedTypeRef(name, qual) => @@ -1420,7 +1420,7 @@ trait Printers printTypeAndAnnots(tp) this += " " printAnnotation(annot) - case Type.TypeRef(IsClassDefSymbol(sym), _) if sym.fullName == "scala.runtime.Null$" || sym.fullName == "scala.runtime.Nothing$" => + case Type.IsTypeRef(tpe) if tpe.typeSymbol.fullName == "scala.runtime.Null$" || tpe.typeSymbol.fullName == "scala.runtime.Nothing$" => // scala.runtime.Null$ and scala.runtime.Nothing$ are not modules, those are their actual names printType(tpe) case Type.IsTermRef(tpe) if tpe.termSymbol.isClass && tpe.termSymbol.name.endsWith("$") => @@ -1533,7 +1533,7 @@ trait Printers case Type.IsTermRef(prefix) if prefix.termSymbol.isClass => printType(prefix) this += "#" - case IsType(prefix @ Type.TypeRef(IsClassDefSymbol(_), _)) => + case Type.IsTypeRef(prefix) if prefix.typeSymbol.isClass => printType(prefix) this += "#" case IsType(Type.ThisType(Type.TermRef(cdef, _))) if elideThis.nonEmpty && cdef == elideThis.get => @@ -1617,7 +1617,7 @@ trait Printers case Type.ThisType(tp) => tp match { - case Type.TypeRef(cdef, _) if !cdef.flags.is(Flags.Object) => + case Type.IsTypeRef(tp) if !tp.typeSymbol.flags.is(Flags.Object) => printFullClassName(tp) this += highlightTypeDef(".this") case Type.NamedTypeRef(name, prefix) if name.endsWith("$") => @@ -1805,8 +1805,7 @@ trait Printers def printProtectedOrPrivate(definition: Definition): Boolean = { var prefixWasPrinted = false def printWithin(within: Type) = within match { - case Type.TypeRef(sym, _) => - this += sym.name + case Type.TypeRef(_, name) => this += name case _ => printFullClassName(within) } if (definition.symbol.flags.is(Flags.Protected)) { @@ -1833,14 +1832,14 @@ trait Printers def printFullClassName(tp: TypeOrBounds): Unit = { def printClassPrefix(prefix: TypeOrBounds): Unit = prefix match { - case Type.TypeRef(IsClassDefSymbol(sym), prefix2) => + case Type.TypeRef(prefix2, name) => printClassPrefix(prefix2) - this += sym.name += "." + this += name += "." case _ => } - val Type.TypeRef(sym, prefix) = tp + val Type.TypeRef(prefix, name) = tp printClassPrefix(prefix) - this += sym.name + this += name } def +=(x: Boolean): this.type = { sb.append(x); this } @@ -1872,8 +1871,8 @@ trait Printers def unapply(arg: Tree) given (ctx: Context): Option[(String, List[Term])] = arg match { case IsTerm(arg @ Apply(fn, args)) => fn.tpe match { - case tpe @ Type.TermRef(Type.ThisType(Type.TypeRef(sym2, _)), _) if sym2.name == "" => - Some((tpe.termSymbol.asDefDef.tree.name, args)) + case tpe @ Type.TermRef(Type.ThisType(Type.TypeRef(_, name)), name2) if name == "" => + Some((name2, args)) case _ => None } case _ => None diff --git a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala index 326acc4182fc..1c18048ab8cf 100644 --- a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala +++ b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala @@ -96,8 +96,8 @@ trait TypeOrBoundsOps extends Core { } object TypeRef { - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(Symbol, TypeOrBounds /* Type | NoPrefix */)] = - internal.matchTypeRef_unapply(typeOrBounds) + def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = + internal.matchTypeRef(typeOrBounds).map(x => (x.qualifier, x.name)) } object IsNamedTermRef { @@ -305,6 +305,7 @@ trait TypeOrBoundsOps extends Core { implicit class Type_TypeRefAPI(self: TypeRef) { def qualifier given (ctx: Context): TypeOrBounds /* Type | NoPrefix */ = internal.TypeRef_qualifier(self) + def name given (ctx: Context): String = internal.TypeRef_name(self) } implicit class Type_NamedTermRefAPI(self: NamedTermRef) { diff --git a/tests/run-macros/i5941/macro_1.scala b/tests/run-macros/i5941/macro_1.scala index b112d9e7a50b..e35b3d2a742b 100644 --- a/tests/run-macros/i5941/macro_1.scala +++ b/tests/run-macros/i5941/macro_1.scala @@ -102,7 +102,7 @@ object Iso { val cls = tpS.classSymbol.get val companion = tpS match { - case Type.TypeRef(sym, prefix) => Type.NamedTermRef(prefix, sym.name) + case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) case Type.NamedTypeRef(name, prefix) => Type.NamedTermRef(prefix, name) } @@ -145,7 +145,7 @@ object Iso { } val companion = tpS match { - case Type.TypeRef(sym, prefix) => Type.NamedTermRef(prefix, sym.name) + case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) case Type.NamedTypeRef(name, prefix) => Type.NamedTermRef(prefix, name) } diff --git a/tests/run-macros/tasty-definitions-1.check b/tests/run-macros/tasty-definitions-1.check index 4ea9768d1842..11f76dc91eef 100644 --- a/tests/run-macros/tasty-definitions-1.check +++ b/tests/run-macros/tasty-definitions-1.check @@ -155,18 +155,18 @@ Tuple21 Tuple22 List(Unit, Boolean, Byte, Short, Int, Long, Float, Double, Char) List(Byte, Short, Int, Long, Float, Double, Char) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsTypeDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Byte") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Char") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Int") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Long") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Float") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Double") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Boolean") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Any") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "AnyVal") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "AnyRef") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "lang")), "Object") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Nothing") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Null") +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "lang")), "String") diff --git a/tests/run-macros/tasty-extractors-1.check b/tests/run-macros/tasty-extractors-1.check index ca0b7eca295d..593d10788d1f 100644 --- a/tests/run-macros/tasty-extractors-1.check +++ b/tests/run-macros/tasty-extractors-1.check @@ -17,16 +17,16 @@ Inlined(None, Nil, Literal(Constant("abc"))) Type.ConstantType(Constant("abc")) Inlined(None, Nil, Apply(Ident("println"), List(Literal(Constant("abc"))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Typed(Literal(Constant(8)), TypeIdent("Int"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") Inlined(None, Nil, Typed(Literal(Constant(8: Byte)), TypeIdent("Byte"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Byte") Inlined(None, Nil, Typed(Literal(Constant(8: Short)), TypeIdent("Short"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Short") Inlined(None, Nil, Literal(Constant('a'))) Type.ConstantType(Constant('a')) @@ -38,83 +38,83 @@ Inlined(None, Nil, If(Typed(Literal(Constant(true)), TypeIdent("Boolean")), Lite Type.OrType(Type.ConstantType(Constant(1)), Type.ConstantType(Constant(2))) Inlined(None, Nil, Match(Literal(Constant("a")), List(CaseDef(Pattern.Value(Literal(Constant("a"))), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Literal(Constant("b")), List(CaseDef(Pattern.Bind("n", Pattern.WildcardPattern()), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Literal(Constant("c")), List(CaseDef(Pattern.Bind("n", Pattern.TypeTest(TypeIdent("String"))), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Literal(Constant("e")), List(CaseDef(Pattern.WildcardPattern(), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Literal(Constant("f")), List(CaseDef(Pattern.TypeTest(TypeIdent("String")), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Typed(Literal(Constant("g")), TypeIdent("Any")), List(CaseDef(Pattern.Alternative(List(Pattern.TypeTest(TypeIdent("String")), Pattern.TypeTest(TypeIdent("Int")))), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Literal(Constant("h")), List(CaseDef(Pattern.WildcardPattern(), Some(Literal(Constant(false))), Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ValDef("a", Inferred(), Some(Literal(Constant("o"))))), Match(Literal(Constant("i")), List(CaseDef(Pattern.Bind("a", Pattern.WildcardPattern()), None, Block(Nil, Literal(Constant(())))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Match(Ident("Nil"), List(CaseDef(Pattern.Unapply(TypeApply(Select(Ident("List"), "unapplySeq"), List(Inferred())), Nil, List(Pattern.Bind("a", Pattern.WildcardPattern()), Pattern.Bind("b", Pattern.WildcardPattern()), Pattern.Bind("c", Pattern.WildcardPattern()))), None, Block(Nil, Literal(Constant(()))))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Try(Literal(Constant(1)), List(CaseDef(Pattern.WildcardPattern(), None, Block(Nil, Literal(Constant(()))))), None)) -Type.OrType(Type.ConstantType(Constant(1)), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +Type.OrType(Type.ConstantType(Constant(1)), Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit")) Inlined(None, Nil, Try(Literal(Constant(2)), Nil, Some(Literal(Constant(()))))) Type.ConstantType(Constant(2)) Inlined(None, Nil, Try(Literal(Constant(3)), List(CaseDef(Pattern.WildcardPattern(), None, Block(Nil, Literal(Constant(()))))), Some(Literal(Constant(()))))) -Type.OrType(Type.ConstantType(Constant(3)), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +Type.OrType(Type.ConstantType(Constant(3)), Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit")) Inlined(None, Nil, Apply(Select(Literal(Constant("a")), "=="), List(Literal(Constant("b"))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Boolean") Inlined(None, Nil, Apply(Select(New(TypeIdent("Object")), ""), Nil)) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "lang")), "Object") Inlined(None, Nil, Apply(Select(Ident("Int"), "box"), List(NamedArg("x", Literal(Constant(9)))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "lang")), "Integer") Inlined(None, Nil, Apply(TypeApply(Select(Ident("Ordering"), "apply"), List(TypeIdent("Int"))), List(Ident("Int")))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "math")), "Ordering"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"))) Inlined(None, Nil, Block(List(ValDef("a", TypeIdent("Int"), Some(Literal(Constant(3))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ValDef("b", TypeIdent("Int"), Some(Literal(Constant(3))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f1", Nil, Nil, TypeIdent("Int"), Some(Literal(Constant(3))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f2", Nil, Nil, TypeIdent("Int"), Some(Return(Literal(Constant(4)))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f3", Nil, List(List(ValDef("i", TypeIdent("Int"), None))), TypeIdent("Int"), Some(Ident("i")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f4", Nil, List(List(ValDef("i", TypeIdent("Int"), None)), List(ValDef("j", TypeIdent("Int"), None))), TypeIdent("Int"), Some(Apply(Select(Ident("i"), "+"), List(Ident("j")))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f5", Nil, List(List(ValDef("i", TypeIdent("Int"), None))), TypeIdent("Int"), Some(Ident("i"))), DefDef("f5$default$1", Nil, Nil, Inferred(), Some(Literal(Constant(9))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f6", List(TypeDef("T", TypeBoundsTree(Inferred(), Inferred()))), List(List(ValDef("x", TypeIdent("T"), None))), TypeIdent("T"), Some(Ident("x")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f7", List(TypeDef("T", TypeBoundsTree(Inferred(), Inferred()))), List(List(ValDef("x", TypeIdent("T"), None))), Singleton(Ident("x")), Some(Ident("x")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("f8", Nil, List(List(ValDef("i", Annotated(Applied(Inferred(), List(TypeIdent("Int"))), Apply(Select(New(Inferred()), ""), Nil)), None))), TypeIdent("Int"), Some(Literal(Constant(9))))), Apply(Ident("f8"), List(Typed(Repeated(List(Literal(Constant(1)), Literal(Constant(2)), Literal(Constant(3))), Inferred()), Inferred()))))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") Inlined(None, Nil, Block(List(DefDef("f9", Nil, List(List(ValDef("i", ByName(TypeIdent("Int")), None))), TypeIdent("Int"), Some(Ident("i")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") diff --git a/tests/run-macros/tasty-extractors-2.check b/tests/run-macros/tasty-extractors-2.check index 171d619527aa..2142e59d492c 100644 --- a/tests/run-macros/tasty-extractors-2.check +++ b/tests/run-macros/tasty-extractors-2.check @@ -1,105 +1,105 @@ Inlined(None, Nil, Block(List(ValDef("x", Inferred(), Some(Literal(Constant(1))))), Assign(Ident("x"), Literal(Constant(2))))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(DefDef("$anonfun", Nil, List(List(ValDef("x", TypeIdent("Int"), None))), Inferred(), Some(Ident("x")))), Closure(Ident("$anonfun"), None))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Function1"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"))) Inlined(None, Nil, Ident("???")) -Type.TermRef(Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef"), "???") +Type.TermRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "???") Inlined(None, Nil, Literal(Constant(1))) Type.ConstantType(Constant(1)) Inlined(None, Nil, Typed(Literal(Constant(1)), TypeIdent("Int"))) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") Inlined(None, Nil, Typed(Ident("Nil"), Applied(TypeIdent("List"), List(TypeIdent("Int"))))) -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "immutable")), "List"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"))) Inlined(None, Nil, Typed(Apply(Select(New(TypeIdent("Baz")), ""), Nil), Applied(TypeIdent("&"), List(TypeIdent("Foo"), TypeIdent("Bar"))))) -Type.AndType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix()))), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())))) +Type.AndType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "Foo"), Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "Bar")) Inlined(None, Nil, Typed(Literal(Constant(1)), Applied(TypeIdent("|"), List(TypeIdent("Int"), TypeIdent("String"))))) -Type.OrType(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef"))) +Type.OrType(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String")) Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, Nil)), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ValDef("Foo", TypeIdent("Foo$"), Some(Apply(Select(New(TypeIdent("Foo$")), ""), Nil))), ClassDef("Foo$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo")), None)), Nil)), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(TypeDef("Foo", TypeBoundsTree(Inferred(), Inferred()))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(TypeDef("Foo", TypeIdent("Int"))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(TypeDef("Foo", TypeBoundsTree(TypeIdent("Null"), TypeIdent("Object")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), Some(Literal(Constant(0)))), DefDef("a_=", Nil, List(List(ValDef("x$1", Inferred(), None))), Inferred(), Some(Literal(Constant(()))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(DefDef("a", Nil, Nil, Inferred(), Some(Literal(Constant(0))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(DefDef("a", Nil, Nil, Inferred(), Some(Literal(Constant(0))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(DefDef("a", Nil, Nil, Inferred(), Some(Literal(Constant(0))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Product"), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, None, List(DefDef("productElementName", Nil, List(List(ValDef("x$1", TypeSelect(Select(Ident("_root_"), "scala"), "Int"), None))), TypeSelect(Select(Ident("java"), "lang"), "String"), Some(Match(Ident("x$1"), List(CaseDef(Pattern.WildcardPattern(), None, Apply(Ident("throw"), List(Apply(Select(New(TypeSelect(Select(Ident("java"), "lang"), "IndexOutOfBoundsException")), ""), List(Apply(Select(Select(Select(Ident("java"), "lang"), "String"), "valueOf"), List(Ident("x$1")))))))))))), DefDef("copy", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))))), ValDef("Foo", TypeIdent("Foo$"), Some(Apply(Select(New(TypeIdent("Foo$")), ""), Nil))), ClassDef("Foo$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), Applied(Inferred(), List(Inferred())), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo")), None)), List(DefDef("apply", Nil, List(Nil), Inferred(), Some(Apply(Select(New(Inferred()), ""), Nil))), DefDef("unapply", Nil, List(List(ValDef("x$1", Inferred(), None))), Inferred(), Some(Literal(Constant(true))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo1", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None)))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo2", DefDef("", Nil, List(List(ValDef("b", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("b", Inferred(), None)))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo3", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None))), ValDef("Foo3", TypeIdent("Foo3$"), Some(Apply(Select(New(TypeIdent("Foo3$")), ""), Nil))), ClassDef("Foo3$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo3")), None)), List(DefDef("$lessinit$greater$default$1", Nil, Nil, Inferred(), Some(Literal(Constant(5))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo4", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None)), List(ValDef("b", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None), ValDef("b", Inferred(), None)))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo5", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None)), List(ValDef("b", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None), ValDef("b", Inferred(), None))), ValDef("Foo5", TypeIdent("Foo5$"), Some(Apply(Select(New(TypeIdent("Foo5$")), ""), Nil))), ClassDef("Foo5$", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeSelect(Select(Ident("_root_"), "scala"), "Serializable")), Nil, Some(ValDef("_", Singleton(Ident("Foo5")), None)), List(DefDef("$lessinit$greater$default$2", Nil, List(List(ValDef("a", TypeIdent("Int"), None))), Inferred(), Some(Ident("a")))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo6", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None)), List(ValDef("b", Singleton(Ident("a")), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None), ValDef("b", Inferred(), None)))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo7", DefDef("", Nil, List(List(ValDef("a", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), None), DefDef("", Nil, List(Nil), Inferred(), Some(Block(List(Apply(Select(This(Some(Id("Foo7"))), ""), List(Literal(Constant(6))))), Literal(Constant(())))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo8", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(Apply(Ident("println"), List(Literal(Constant(0))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo10", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), Some(Literal(Constant(9))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo11", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), Some(Literal(Constant(10)))), DefDef("a_=", Nil, List(List(ValDef("x$1", Inferred(), None))), Inferred(), Some(Literal(Constant(()))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo12", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("a", Inferred(), Some(Literal(Constant(11))))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, Nil), ClassDef("Bar", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(TypeIdent("Foo")), ""), Nil)), Nil, None, Nil)), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo2", DefDef("", Nil, List(Nil), Inferred(), None), List(Inferred()), Nil, None, Nil), ClassDef("Bar", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil), TypeIdent("Foo2")), Nil, None, Nil)), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(List(ValDef("i", TypeIdent("Int"), None))), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(ValDef("i", Inferred(), None))), ClassDef("Bar", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(TypeIdent("Foo")), ""), List(Literal(Constant(1))))), Nil, None, Nil)), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(TypeDef("X", TypeIdent("Int")))), DefDef("f", Nil, List(List(ValDef("a", TypeIdent("Foo"), None))), TypeSelect(Ident("a"), "X"), Some(Ident("???")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ClassDef("Foo", DefDef("", Nil, List(Nil), Inferred(), None), List(Apply(Select(New(Inferred()), ""), Nil)), Nil, None, List(TypeDef("X", TypeBoundsTree(Inferred(), Inferred())))), DefDef("f", Nil, List(List(ValDef("a", Refined(TypeIdent("Foo"), List(TypeDef("X", TypeIdent("Int")))), None))), TypeSelect(Ident("a"), "X"), Some(Ident("???")))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") Inlined(None, Nil, Block(List(ValDef("lambda", Applied(Inferred(), List(TypeIdent("Int"), TypeIdent("Int"))), Some(Block(List(DefDef("$anonfun", Nil, List(List(ValDef("x", Inferred(), None))), Inferred(), Some(Ident("x")))), Closure(Ident("$anonfun"), None))))), Literal(Constant(())))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") diff --git a/tests/run-macros/tasty-extractors-3.check b/tests/run-macros/tasty-extractors-3.check index d3aa86618f56..05c9f0f2cb4b 100644 --- a/tests/run-macros/tasty-extractors-3.check +++ b/tests/run-macros/tasty-extractors-3.check @@ -1,44 +1,44 @@ -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Int") Type.TermRef(NoPrefix(), "x") -TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +TypeBounds(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Nothing"), Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Any")) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Nothing") -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Any") -Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) +Type.TypeRef(NoPrefix(), "T") -Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) +Type.TypeRef(NoPrefix(), "T") -TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala"))) +TypeBounds(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int")) -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") -Type.TypeRef(IsTypeDefSymbol(), NoPrefix()) +Type.TypeRef(NoPrefix(), "T") -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "lang")), "Object") -TypeBounds(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())))) +TypeBounds(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Nothing"), Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Any")) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Nothing") -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Any") -Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) +Type.Refinement(Type.TypeRef(NoPrefix(), "Foo"), X, TypeBounds(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"))) -Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))) +Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Unit") -Type.TypeRef(IsClassDefSymbol(), NoPrefix()) +Type.TypeRef(NoPrefix(), "Foo") -Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String") -Type.TypeRef(IsClassDefSymbol(), NoPrefix()) +Type.TypeRef(NoPrefix(), "$anon") -Type.Refinement(Type.TypeRef(IsClassDefSymbol(), NoPrefix()), X, TypeBounds(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) +Type.Refinement(Type.TypeRef(NoPrefix(), "Foo"), X, TypeBounds(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"))) diff --git a/tests/run-macros/tasty-extractors-types.check b/tests/run-macros/tasty-extractors-types.check index 48ca1b3f8564..9d5d03b2d628 100644 --- a/tests/run-macros/tasty-extractors-types.check +++ b/tests/run-macros/tasty-extractors-types.check @@ -1,12 +1,12 @@ Inferred() -Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")) +Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int") Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "immutable")), "List"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"))) Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsClassDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(<>), NoPrefix())), "scala")))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "immutable")), "Map"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"), Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "")), "scala"), "Int"))) Inferred() -Type.AppliedType(Type.TypeRef(IsClassDefSymbol(), Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix()))), List(Type.TypeRef(IsTypeDefSymbol(), Type.TermRef(Type.ThisType(Type.TypeRef(IsPackageDefSymbol(), NoPrefix())), "Predef")), Type.TypeRef(IsTypeDefSymbol(), NoPrefix()))) +Type.AppliedType(Type.TypeRef(Type.ThisType(Type.TypeRef(NoPrefix(), "immutable")), "Map"), List(Type.TypeRef(Type.TermRef(Type.ThisType(Type.TypeRef(NoPrefix(), "scala")), "Predef"), "String"), Type.TypeRef(NoPrefix(), "I"))) From 32d7787ac3ca4299fbdbd718171f9d544c29ad31 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 8 Aug 2019 13:49:05 +0200 Subject: [PATCH 3/4] Refactor NamedTypeRef and NamedTermRef extractors Align extractors with TypeRef and TermRef --- .../src/scala/tasty/reflect/Printers.scala | 34 +++++++++---------- .../scala/tasty/reflect/TypeOrBoundsOps.scala | 8 ++--- tests/run-macros/i5941/macro_1.scala | 4 +-- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/library/src/scala/tasty/reflect/Printers.scala b/library/src/scala/tasty/reflect/Printers.scala index b96d9446e911..78bfabd21d15 100644 --- a/library/src/scala/tasty/reflect/Printers.scala +++ b/library/src/scala/tasty/reflect/Printers.scala @@ -312,10 +312,10 @@ trait Printers this += "Type.TermRef(" += qual+= ", \"" += name += "\")" case Type.TypeRef(qual, name) => this += "Type.TypeRef(" += qual += ", \"" += name += "\")" - case Type.NamedTermRef(name, qual) => - this += "Type.NamedTermRef(\"" += name += "\", " += qual += ")" - case Type.NamedTypeRef(name, qual) => - this += "Type.NamedTypeRef(\"" += name += "\", " += qual += ")" + case Type.NamedTermRef(qual, name) => + this += "Type.NamedTermRef(" += qual += ", \"" += name += "\")" + case Type.NamedTypeRef(qual, name) => + this += "Type.NamedTypeRef(" += qual += ", \"" += name += "\")" case Type.Refinement(parent, name, info) => this += "Type.Refinement(" += parent += ", " += name += ", " += info += ")" case Type.AppliedType(tycon, args) => @@ -1555,7 +1555,7 @@ trait Printers this } - case Type.NamedTermRef(name, prefix) => + case Type.NamedTermRef(prefix, name) => prefix match { case Type.ThisType(Types.EmptyPackage()) => this += highlightTypeDef(name) @@ -1568,7 +1568,7 @@ trait Printers this += highlightTypeDef(name) } - case Type.NamedTypeRef(name, prefix) => + case Type.NamedTypeRef(prefix, name) => prefix match { case NoPrefix() | Type.ThisType(Types.EmptyPackage()) => case IsType(prefix) => printType(prefix) += "." @@ -1583,7 +1583,7 @@ trait Printers tp match { case Type.IsTypeLambda(tp) => printType(tpe.dealias) - case Type.NamedTypeRef("", Types.ScalaPackage()) => + case Type.NamedTypeRef(Types.ScalaPackage(), "") => this += "_*" case _ => printType(tp) @@ -1620,7 +1620,7 @@ trait Printers case Type.IsTypeRef(tp) if !tp.typeSymbol.flags.is(Flags.Object) => printFullClassName(tp) this += highlightTypeDef(".this") - case Type.NamedTypeRef(name, prefix) if name.endsWith("$") => + case Type.NamedTypeRef(prefix, name) if name.endsWith("$") => prefix match { case NoPrefix() | Type.ThisType(Types.EmptyPackage() | Types.RootPackage()) => case _ => @@ -1707,9 +1707,9 @@ trait Printers val annots = definition.symbol.annots.filter { case Annotation(annot, _) => annot.tpe match { - case Type.NamedTypeRef(_, Type.IsTermRef(prefix)) if prefix.termSymbol.fullName == "scala.annotation.internal" => false - case Type.NamedTypeRef(_, Type.IsTypeRef(prefix)) if prefix.typeSymbol.fullName == "scala.annotation.internal" => false - case Type.NamedTypeRef("forceInline", Types.ScalaPackage()) => false + case Type.NamedTypeRef(Type.IsTermRef(prefix), _) if prefix.termSymbol.fullName == "scala.annotation.internal" => false + case Type.NamedTypeRef(Type.IsTypeRef(prefix), _) if prefix.typeSymbol.fullName == "scala.annotation.internal" => false + case Type.NamedTypeRef(Types.ScalaPackage(), "forceInline") => false case _ => true } case x => throw new MatchError(x.showExtractors) @@ -1893,30 +1893,30 @@ trait Printers object JavaLangObject { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef("Object", Type.IsTermRef(prefix)) => prefix.typeSymbol.fullName == "java.lang" + case Type.NamedTypeRef(Type.IsTermRef(prefix), "Object") => prefix.typeSymbol.fullName == "java.lang" case _ => false } } object Sequence { def unapply(tpe: Type) given (ctx: Context): Option[Type] = tpe match { - case Type.AppliedType(Type.NamedTypeRef("Seq", Type.IsTermRef(prefix)), IsType(tp) :: Nil) if prefix.termSymbol.fullName == "scala.collection" => Some(tp) - case Type.AppliedType(Type.NamedTypeRef("Seq", Type.IsTypeRef(prefix)), IsType(tp) :: Nil) if prefix.typeSymbol.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.NamedTypeRef(Type.IsTermRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.termSymbol.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.NamedTypeRef(Type.IsTypeRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.typeSymbol.fullName == "scala.collection" => Some(tp) case _ => None } } object RepeatedAnnotation { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef("Repeated", Type.IsTermRef(prefix)) => prefix.termSymbol.fullName == "scala.annotation.internal" - case Type.NamedTypeRef("Repeated", Type.IsTypeRef(prefix)) => prefix.typeSymbol.fullName == "scala.annotation.internal" + case Type.NamedTypeRef(Type.IsTermRef(prefix), "Repeated") => prefix.termSymbol.fullName == "scala.annotation.internal" + case Type.NamedTypeRef(Type.IsTypeRef(prefix), "Repeated") => prefix.typeSymbol.fullName == "scala.annotation.internal" case _ => false } } object Repeated { def unapply(tpe: Type) given (ctx: Context): Option[Type] = tpe match { - case Type.AppliedType(Type.NamedTypeRef("", ScalaPackage()), IsType(tp) :: Nil) => Some(tp) + case Type.AppliedType(Type.NamedTypeRef(ScalaPackage(), ""), IsType(tp) :: Nil) => Some(tp) case _ => None } } diff --git a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala index 1c18048ab8cf..5b6d751f4ee2 100644 --- a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala +++ b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala @@ -110,8 +110,8 @@ trait TypeOrBoundsOps extends Core { // TODO should qual be a Type? def apply(qual: TypeOrBounds, name: String) given (ctx: Context): NamedTermRef = internal.NamedTermRef_apply(qual, name) - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(String, TypeOrBounds /* Type | NoPrefix */)] = - internal.matchNamedTermRef(typeOrBounds).map(x => (x.name, x.qualifier)) + def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = + internal.matchNamedTermRef(typeOrBounds).map(x => (x.qualifier, x.name)) } object IsNameTypeRef { @@ -121,8 +121,8 @@ trait TypeOrBoundsOps extends Core { } object NamedTypeRef { - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(String, TypeOrBounds /* Type | NoPrefix */)] = - internal.matchNamedTypeRef(typeOrBounds).map(x => (x.name, x.qualifier)) + def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = + internal.matchNamedTypeRef(typeOrBounds).map(x => (x.qualifier, x.name)) } object IsSuperType { diff --git a/tests/run-macros/i5941/macro_1.scala b/tests/run-macros/i5941/macro_1.scala index e35b3d2a742b..c5c033e58216 100644 --- a/tests/run-macros/i5941/macro_1.scala +++ b/tests/run-macros/i5941/macro_1.scala @@ -103,7 +103,7 @@ object Iso { val companion = tpS match { case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) - case Type.NamedTypeRef(name, prefix) => Type.NamedTermRef(prefix, name) + case Type.NamedTypeRef(prefix, name) => Type.NamedTermRef(prefix, name) } if (cls.caseFields.size != 1) { @@ -146,7 +146,7 @@ object Iso { val companion = tpS match { case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) - case Type.NamedTypeRef(name, prefix) => Type.NamedTermRef(prefix, name) + case Type.NamedTypeRef(prefix, name) => Type.NamedTermRef(prefix, name) } val obj = Select.overloaded(Ident(companion), "apply", Nil, Nil).seal.cast[S] From ddae49fe608a19d3a4fd98840017d0201f58d1ca Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Thu, 8 Aug 2019 14:07:30 +0200 Subject: [PATCH 4/4] Join TermRef/TypeRef with NamedTermRef/NamedTypeRef --- .../ReflectionCompilerInterface.scala | 34 +++----------- .../tasty/reflect/CompilerInterface.scala | 25 ++-------- library/src/scala/tasty/reflect/Core.scala | 8 ---- .../src/scala/tasty/reflect/Printers.scala | 47 +++++-------------- library/src/scala/tasty/reflect/TreeOps.scala | 2 +- .../scala/tasty/reflect/TypeOrBoundsOps.scala | 37 +-------------- tests/run-macros/i5941/macro_1.scala | 8 ++-- 7 files changed, 26 insertions(+), 135 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala index 2b4926b458bd..b04fcc45bf04 100644 --- a/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala +++ b/compiler/src/dotty/tools/dotc/tastyreflect/ReflectionCompilerInterface.scala @@ -282,7 +282,7 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend def Ident_name(self: Ident) given Context: String = self.name.show - def Ident_apply(tmref: NamedTermRef) given Context: Term = + def Ident_apply(tmref: TermRef) given Context: Term = withDefaultPos(tpd.ref(tmref).asInstanceOf[Term]) def Ident_copy(original: Tree)(name: String) given Context: Ident = @@ -1150,14 +1150,13 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend type TermRef = Types.NamedType def matchTermRef(tpe: TypeOrBounds) given Context: Option[TermRef] = tpe match { - case tp: Types.NamedType => - tp.designator match { - case sym: Symbol if sym.isTerm => Some(tp) - case _ => None - } + case tp: Types.TermRef => Some(tp) case _ => None } + def TermRef_apply(qual: TypeOrBounds, name: String) given Context: TermRef = + Types.TermRef(qual, name.toTermName) + def TermRef_qualifier(self: TermRef) given Context: TypeOrBounds = self.prefix def TermRef_name(self: TermRef) given Context: String = self.name.toString @@ -1165,11 +1164,7 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend type TypeRef = Types.NamedType def matchTypeRef(tpe: TypeOrBounds) given Context: Option[TypeRef] = tpe match { - case tp: Types.NamedType => - tp.designator match { - case sym: Symbol if sym.isType => Some(tp) - case _ => None - } + case tp: Types.TypeRef => Some(tp) case _ => None } @@ -1191,23 +1186,6 @@ class ReflectionCompilerInterface(val rootContext: core.Contexts.Context) extend def NamedTermRef_name(self: NamedTermRef) given Context: String = self.name.toString def NamedTermRef_qualifier(self: NamedTermRef) given Context: TypeOrBounds = self.prefix - def NamedTermRef_apply(qual: TypeOrBounds, name: String) given Context: NamedTermRef = - Types.TermRef(qual, name.toTermName) - - type NamedTypeRef = Types.NamedType - - def matchNamedTypeRef(tpe: TypeOrBounds) given Context: Option[NamedTypeRef] = tpe match { - case tpe: Types.NamedType => - tpe.designator match { - case name: Names.TypeName => Some(tpe) - case _ => None - } - case _ => None - } - - def NamedTypeRef_name(self: NamedTypeRef) given Context: String = self.name.toString - def NamedTypeRef_qualifier(self: NamedTypeRef) given Context: TypeOrBounds = self.prefix - type SuperType = Types.SuperType def matchSuperType(tpe: TypeOrBounds) given Context: Option[SuperType] = tpe match { diff --git a/library/src/scala/tasty/reflect/CompilerInterface.scala b/library/src/scala/tasty/reflect/CompilerInterface.scala index 2fd3411a0ab1..5157df662c30 100644 --- a/library/src/scala/tasty/reflect/CompilerInterface.scala +++ b/library/src/scala/tasty/reflect/CompilerInterface.scala @@ -74,8 +74,6 @@ import scala.runtime.quoted.Unpickler * +- Type -------+- ConstantType * +- TermRef * +- TypeRef - * +- NamedTermRef - * +- NamedTypeRef * +- SuperType * +- Refinement * +- AppliedType @@ -330,7 +328,7 @@ trait CompilerInterface { def Ident_name(self: Ident) given (ctx: Context): String - def Ident_apply(tmref: NamedTermRef) given (ctx: Context): Term + def Ident_apply(tmref: TermRef) given (ctx: Context): Term def Ident_copy(original: Tree)(name: String) given (ctx: Context): Ident /** Tree representing a selection of definition with a given name on a given prefix */ @@ -933,10 +931,11 @@ trait CompilerInterface { def matchTermRef(tpe: TypeOrBounds) given (ctx: Context): Option[TermRef] + def TermRef_apply(qual: TypeOrBounds, name: String) given (ctx: Context): TermRef + def TermRef_qualifier(self: TermRef) given (ctx: Context): TypeOrBounds def TermRef_name(self: TermRef) given (ctx: Context): String - /** Type of a reference to a type symbol */ type TypeRef <: Type @@ -945,24 +944,6 @@ trait CompilerInterface { def TypeRef_qualifier(self: TypeRef) given (ctx: Context): TypeOrBounds def TypeRef_name(self: TypeRef) given Context: String - /** Type of a reference to a term by it's name */ - type NamedTermRef <: Type - - def matchNamedTermRef(tpe: TypeOrBounds) given (ctx: Context): Option[NamedTermRef] - - def NamedTermRef_name(self: NamedTermRef) given (ctx: Context): String - def NamedTermRef_qualifier(self: NamedTermRef) given (ctx: Context): TypeOrBounds - - def NamedTermRef_apply(qual: TypeOrBounds, name: String) given (ctx: Context): NamedTermRef - - /** Type of a reference to a type by it's name */ - type NamedTypeRef <: Type - - def matchNamedTypeRef(tpe: TypeOrBounds) given (ctx: Context): Option[NamedTypeRef] - - def NamedTypeRef_name(self: NamedTypeRef) given (ctx: Context): String - def NamedTypeRef_qualifier(self: NamedTypeRef) given (ctx: Context): TypeOrBounds - /** Type of a `super` refernce */ type SuperType <: Type diff --git a/library/src/scala/tasty/reflect/Core.scala b/library/src/scala/tasty/reflect/Core.scala index 55ceea23b38e..44be03c02a51 100644 --- a/library/src/scala/tasty/reflect/Core.scala +++ b/library/src/scala/tasty/reflect/Core.scala @@ -71,8 +71,6 @@ package scala.tasty.reflect * +- Type -------+- ConstantType * +- TermRef * +- TypeRef - * +- NamedTermRef - * +- NamedTypeRef * +- SuperType * +- Refinement * +- AppliedType @@ -338,12 +336,6 @@ trait Core { /** Type of a reference to a type symbol */ type TypeRef = internal.TypeRef - /** Type of a reference to a term */ - type NamedTermRef = internal.NamedTermRef - - /** Type of a reference to a type */ - type NamedTypeRef = internal.NamedTypeRef - /** Type of a `super` refernce */ type SuperType = internal.SuperType diff --git a/library/src/scala/tasty/reflect/Printers.scala b/library/src/scala/tasty/reflect/Printers.scala index 78bfabd21d15..416cae378a49 100644 --- a/library/src/scala/tasty/reflect/Printers.scala +++ b/library/src/scala/tasty/reflect/Printers.scala @@ -312,10 +312,6 @@ trait Printers this += "Type.TermRef(" += qual+= ", \"" += name += "\")" case Type.TypeRef(qual, name) => this += "Type.TypeRef(" += qual += ", \"" += name += "\")" - case Type.NamedTermRef(qual, name) => - this += "Type.NamedTermRef(" += qual += ", \"" += name += "\")" - case Type.NamedTypeRef(qual, name) => - this += "Type.NamedTypeRef(" += qual += ", \"" += name += "\")" case Type.Refinement(parent, name, info) => this += "Type.Refinement(" += parent += ", " += name += ", " += info += ")" case Type.AppliedType(tycon, args) => @@ -1555,27 +1551,6 @@ trait Printers this } - case Type.NamedTermRef(prefix, name) => - prefix match { - case Type.ThisType(Types.EmptyPackage()) => - this += highlightTypeDef(name) - case IsType(prefix) => - printType(prefix) - if (name != "package") - this += "." += highlightTypeDef(name) - this - case NoPrefix() => - this += highlightTypeDef(name) - } - - case Type.NamedTypeRef(prefix, name) => - prefix match { - case NoPrefix() | Type.ThisType(Types.EmptyPackage()) => - case IsType(prefix) => printType(prefix) += "." - } - if (name.endsWith("$")) this += highlightTypeDef(name.stripSuffix("$")) += ".type" - else this += highlightTypeDef(name) - case tpe @ Type.Refinement(_, _, _) => printRefinement(tpe) @@ -1583,7 +1558,7 @@ trait Printers tp match { case Type.IsTypeLambda(tp) => printType(tpe.dealias) - case Type.NamedTypeRef(Types.ScalaPackage(), "") => + case Type.TypeRef(Types.ScalaPackage(), "") => this += "_*" case _ => printType(tp) @@ -1620,7 +1595,7 @@ trait Printers case Type.IsTypeRef(tp) if !tp.typeSymbol.flags.is(Flags.Object) => printFullClassName(tp) this += highlightTypeDef(".this") - case Type.NamedTypeRef(prefix, name) if name.endsWith("$") => + case Type.TypeRef(prefix, name) if name.endsWith("$") => prefix match { case NoPrefix() | Type.ThisType(Types.EmptyPackage() | Types.RootPackage()) => case _ => @@ -1707,9 +1682,9 @@ trait Printers val annots = definition.symbol.annots.filter { case Annotation(annot, _) => annot.tpe match { - case Type.NamedTypeRef(Type.IsTermRef(prefix), _) if prefix.termSymbol.fullName == "scala.annotation.internal" => false - case Type.NamedTypeRef(Type.IsTypeRef(prefix), _) if prefix.typeSymbol.fullName == "scala.annotation.internal" => false - case Type.NamedTypeRef(Types.ScalaPackage(), "forceInline") => false + case Type.TypeRef(Type.IsTermRef(prefix), _) if prefix.termSymbol.fullName == "scala.annotation.internal" => false + case Type.TypeRef(Type.IsTypeRef(prefix), _) if prefix.typeSymbol.fullName == "scala.annotation.internal" => false + case Type.TypeRef(Types.ScalaPackage(), "forceInline") => false case _ => true } case x => throw new MatchError(x.showExtractors) @@ -1893,30 +1868,30 @@ trait Printers object JavaLangObject { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef(Type.IsTermRef(prefix), "Object") => prefix.typeSymbol.fullName == "java.lang" + case Type.TypeRef(Type.IsTermRef(prefix), "Object") => prefix.typeSymbol.fullName == "java.lang" case _ => false } } object Sequence { def unapply(tpe: Type) given (ctx: Context): Option[Type] = tpe match { - case Type.AppliedType(Type.NamedTypeRef(Type.IsTermRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.termSymbol.fullName == "scala.collection" => Some(tp) - case Type.AppliedType(Type.NamedTypeRef(Type.IsTypeRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.typeSymbol.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.TypeRef(Type.IsTermRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.termSymbol.fullName == "scala.collection" => Some(tp) + case Type.AppliedType(Type.TypeRef(Type.IsTypeRef(prefix), "Seq"), IsType(tp) :: Nil) if prefix.typeSymbol.fullName == "scala.collection" => Some(tp) case _ => None } } object RepeatedAnnotation { def unapply(tpe: Type) given (ctx: Context): Boolean = tpe match { - case Type.NamedTypeRef(Type.IsTermRef(prefix), "Repeated") => prefix.termSymbol.fullName == "scala.annotation.internal" - case Type.NamedTypeRef(Type.IsTypeRef(prefix), "Repeated") => prefix.typeSymbol.fullName == "scala.annotation.internal" + case Type.TypeRef(Type.IsTermRef(prefix), "Repeated") => prefix.termSymbol.fullName == "scala.annotation.internal" + case Type.TypeRef(Type.IsTypeRef(prefix), "Repeated") => prefix.typeSymbol.fullName == "scala.annotation.internal" case _ => false } } object Repeated { def unapply(tpe: Type) given (ctx: Context): Option[Type] = tpe match { - case Type.AppliedType(Type.NamedTypeRef(ScalaPackage(), ""), IsType(tp) :: Nil) => Some(tp) + case Type.AppliedType(Type.TypeRef(ScalaPackage(), ""), IsType(tp) :: Nil) => Some(tp) case _ => None } } diff --git a/library/src/scala/tasty/reflect/TreeOps.scala b/library/src/scala/tasty/reflect/TreeOps.scala index 2c1b92839d67..9976c41c3711 100644 --- a/library/src/scala/tasty/reflect/TreeOps.scala +++ b/library/src/scala/tasty/reflect/TreeOps.scala @@ -250,7 +250,7 @@ trait TreeOps extends Core { /** Scala term identifier */ object Ident { - def apply(tmref: NamedTermRef) given (ctx: Context): Term = + def apply(tmref: TermRef) given (ctx: Context): Term = internal.Ident_apply(tmref) def copy(original: Tree)(name: String) given (ctx: Context): Ident = diff --git a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala index 5b6d751f4ee2..65a0ecd6c034 100644 --- a/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala +++ b/library/src/scala/tasty/reflect/TypeOrBoundsOps.scala @@ -85,6 +85,8 @@ trait TypeOrBoundsOps extends Core { } object TermRef { + def apply(qual: TypeOrBounds, name: String) given (ctx: Context): TermRef = + internal.TermRef_apply(qual, name) def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = internal.matchTermRef(typeOrBounds).map(x => (x.qualifier, x.name)) } @@ -100,31 +102,6 @@ trait TypeOrBoundsOps extends Core { internal.matchTypeRef(typeOrBounds).map(x => (x.qualifier, x.name)) } - object IsNamedTermRef { - /** Matches any NamedTermRef and returns it */ - def unapply(tpe: TypeOrBounds) given (ctx: Context): Option[NamedTermRef] = - internal.matchNamedTermRef(tpe) - } - - object NamedTermRef { - // TODO should qual be a Type? - def apply(qual: TypeOrBounds, name: String) given (ctx: Context): NamedTermRef = - internal.NamedTermRef_apply(qual, name) - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = - internal.matchNamedTermRef(typeOrBounds).map(x => (x.qualifier, x.name)) - } - - object IsNameTypeRef { - /** Matches any TypeRef and returns it */ - def unapply(tpe: TypeOrBounds) given (ctx: Context): Option[NamedTypeRef] = - internal.matchNamedTypeRef(tpe) - } - - object NamedTypeRef { - def unapply(typeOrBounds: TypeOrBounds) given (ctx: Context): Option[(TypeOrBounds /* Type | NoPrefix */, String)] = - internal.matchNamedTypeRef(typeOrBounds).map(x => (x.qualifier, x.name)) - } - object IsSuperType { /** Matches any SuperType and returns it */ def unapply(tpe: TypeOrBounds) given (ctx: Context): Option[SuperType] = @@ -308,16 +285,6 @@ trait TypeOrBoundsOps extends Core { def name given (ctx: Context): String = internal.TypeRef_name(self) } - implicit class Type_NamedTermRefAPI(self: NamedTermRef) { - def name given (ctx: Context): String = internal.NamedTermRef_name(self) - def qualifier given (ctx: Context): TypeOrBounds /* Type | NoPrefix */ = internal.NamedTermRef_qualifier(self) - } - - implicit class Type_NamedTypeRefAPI(self: NamedTypeRef) { - def name given (ctx: Context): String = internal.NamedTypeRef_name(self) - def qualifier given (ctx: Context): TypeOrBounds /* Type | NoPrefix */ = internal.NamedTypeRef_qualifier(self) - } - implicit class Type_SuperTypeAPI(self: SuperType) { def thistpe given (ctx: Context): Type = internal.SuperType_thistpe(self) def supertpe given (ctx: Context): Type = internal.SuperType_supertpe(self) diff --git a/tests/run-macros/i5941/macro_1.scala b/tests/run-macros/i5941/macro_1.scala index c5c033e58216..a4821cf7d424 100644 --- a/tests/run-macros/i5941/macro_1.scala +++ b/tests/run-macros/i5941/macro_1.scala @@ -102,8 +102,7 @@ object Iso { val cls = tpS.classSymbol.get val companion = tpS match { - case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) - case Type.NamedTypeRef(prefix, name) => Type.NamedTermRef(prefix, name) + case Type.TypeRef(prefix, name) => Type.TermRef(prefix, name) } if (cls.caseFields.size != 1) { @@ -131,7 +130,7 @@ object Iso { val tpS = typeOf[S] if (tpS.isSingleton) { - val ident = Ident(tpS.asInstanceOf[NamedTermRef]).seal.cast[S] + val ident = Ident(tpS.asInstanceOf[TermRef]).seal.cast[S] '{ Iso[S, 1](Function.const($ident))(Function.const(1)) } @@ -145,8 +144,7 @@ object Iso { } val companion = tpS match { - case Type.TypeRef(prefix, name) => Type.NamedTermRef(prefix, name) - case Type.NamedTypeRef(prefix, name) => Type.NamedTermRef(prefix, name) + case Type.TypeRef(prefix, name) => Type.TermRef(prefix, name) } val obj = Select.overloaded(Ident(companion), "apply", Nil, Nil).seal.cast[S]