diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-06-29 13:59:46 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-06-29 13:59:46 -0700 |
commit | 12f92b7f0566a9557dbb8d73bba21b72764eed68 (patch) | |
tree | 7a7a5325db9ea4a3386b1e76520714568e19d2e8 /test/files | |
parent | 21387d61ec8935e684ca934afa5fc9ba89199da0 (diff) | |
parent | b17a291c2edf28aca1713aa4a30d8bba3886bc8d (diff) | |
download | scala-12f92b7f0566a9557dbb8d73bba21b72764eed68.tar.gz scala-12f92b7f0566a9557dbb8d73bba21b72764eed68.tar.bz2 scala-12f92b7f0566a9557dbb8d73bba21b72764eed68.zip |
Merge pull request #4588 from retronym/topic/icodish
GenBCode: fix incrementatal compilation by mimicing GenASM
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/run/sbt-icode-interface.scala | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/files/run/sbt-icode-interface.scala b/test/files/run/sbt-icode-interface.scala new file mode 100644 index 0000000000..84d38cc65a --- /dev/null +++ b/test/files/run/sbt-icode-interface.scala @@ -0,0 +1,42 @@ +import scala.tools.partest._ +import scala.tools.nsc._ + +object Test extends DirectTest { + + def code = """ + class C { class D } + object O + """.trim + + def show() { + for (b <- List("GenASM", "GenBCode")) { + val global = newCompiler("-usejavacp", s"-Ybackend:$b") + import global._ + val r = new Run + r.compileSources(newSourceFile(code) :: Nil) + + val results = collection.mutable.Buffer[(Boolean, String)]() + + // Nailing down defacto compiler API from SBT's usage + // https://github.com/sbt/sbt/blob/adb41611cf73260938274915d8462d924df200c8/compile/interface/src/main/scala/xsbt/Analyzer.scala#L29-L41 + def isTopLevelModule(sym: Symbol) = sym.isTopLevel && sym.isModule + for (unit <- currentRun.units if !unit.isJava) { + val sourceFile = unit.source.file.file + for (iclass <- unit.icode) { + val sym = iclass.symbol + def addGenerated(separatorRequired: Boolean) { + results += (separatorRequired -> sym.fullName) + } + if (sym.isModuleClass && !sym.isImplClass) { + if (isTopLevelModule(sym) && sym.companionClass == NoSymbol) + addGenerated(false) + addGenerated(true) + } else + addGenerated(false) + } + } + val expected = List((false, "C"), (true, "O"), (false, "C$D")) + assert(results.toList == expected, b + ": " + results.toList) + } + } +} |