diff options
Diffstat (limited to 'compiler/test/dotty/tools/DottyTypeStealer.scala')
-rw-r--r-- | compiler/test/dotty/tools/DottyTypeStealer.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/compiler/test/dotty/tools/DottyTypeStealer.scala b/compiler/test/dotty/tools/DottyTypeStealer.scala new file mode 100644 index 000000000..819f19d25 --- /dev/null +++ b/compiler/test/dotty/tools/DottyTypeStealer.scala @@ -0,0 +1,32 @@ +package dotty.tools + +import dotc.ast.tpd +import dotc.core.Names._ +import dotc.ast.tpd._ +import dotc.core.Contexts.Context +import dotc.core.Decorators._ +import dotc.core.Types.Type + +object DottyTypeStealer { + def stealType(source: String, typeStrings: String*): (Context, List[Type]) = { + val dummyName = "x_x_x" + val vals = typeStrings.zipWithIndex.map{case (s, x)=> s"val ${dummyName}$x: $s = ???"}.mkString("\n") + val gatheredSource = s" ${source}\n object A$dummyName {$vals}" + var scontext : Context = null + var tp: List[Type] = null + new DottyTest().checkCompile("frontend",gatheredSource) { + (tree, context) => + implicit val ctx = context + val findValDef: (List[ValDef], tpd.Tree) => List[ValDef] = + (acc , tree) => { tree match { + case t: ValDef if t.name.startsWith(dummyName.toTermName) => t :: acc + case _ => acc + } + } + val d = new DeepFolder[List[ValDef]](findValDef).foldOver(Nil, tree) + tp = d.map(_.tpe.widen).reverse + scontext = context + } + (scontext, tp) + } +} |