1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
import java.io.PrintWriter;
import scala.tools.partest.BytecodeTest
import scala.tools.asm.util._
import scala.tools.nsc.util.stringFromWriter
object Test extends BytecodeTest {
def annotationsForClass(className: String): Option[String] = {
val classNode = loadClassNode(className, skipDebugInfo = false)
val textifier = new Textifier
classNode.accept(new TraceClassVisitor(null, textifier, null))
val classString = stringFromWriter(w => textifier.print(w))
classString
.split('\n')
.filterNot(_.contains("@Lscala/reflect/ScalaSignature"))
.find(_.contains("@L"))
.map(_.trim)
}
def show {
// It seems like @java.lang.Deprecated shows up in both the
// Deprecated attribute and RuntimeVisibleAnnotation attribute,
// while @scala.deprecated only shows up in the Deprecated attribute.
// The check file just documents status quo, not sure if Scala
// should brought in line with Java or not...
// See the commit message and SI-8883 for more info.
println(annotationsForClass("DJava"))
println(annotationsForClass("DScala"))
println(annotationsForClass("S"))
println(annotationsForClass("C"))
println(annotationsForClass("R"))
}
}
|