summaryrefslogtreecommitdiff
path: root/test/files/run
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2014-10-14 16:35:35 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2014-10-15 08:15:01 +0200
commite96d1a4d346b1ebac46796307a0887d7b7c4fccf (patch)
tree591ac2ba479c358b2913d1bf5d5f912934cb1833 /test/files/run
parent2b5df373638d08204b71258928289f6b39e25d5f (diff)
downloadscala-e96d1a4d346b1ebac46796307a0887d7b7c4fccf.tar.gz
scala-e96d1a4d346b1ebac46796307a0887d7b7c4fccf.tar.bz2
scala-e96d1a4d346b1ebac46796307a0887d7b7c4fccf.zip
SI-8907 Don't force symbol info in isModuleNotMethod
Test case by Jason. RefChecks adds the lateMETHOD flag lazily in its info transformer. This means that forcing the `sym.info` may change the value of `sym.isMethod`. 0ccdb151f introduced a check to force the info in isModuleNotMethod, but it turns out this leads to errors on stub symbols (SI-8907). The responsibility to force info is transferred to callers, which is the case for other operations on symbols, too.
Diffstat (limited to 'test/files/run')
-rw-r--r--test/files/run/t8907.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/files/run/t8907.scala b/test/files/run/t8907.scala
new file mode 100644
index 0000000000..7952ac82d9
--- /dev/null
+++ b/test/files/run/t8907.scala
@@ -0,0 +1,39 @@
+import scala.tools.partest._
+import java.io.File
+
+object Test extends StoreReporterDirectTest {
+ def code = ???
+
+ def compileCode(code: String) = {
+ val classpath = List(sys.props("partest.lib"), testOutput.path) mkString sys.props("path.separator")
+ compileString(newCompiler("-cp", classpath, "-d", testOutput.path))(code)
+ }
+
+ def show(): Unit = {
+ compileCode("""
+ class C { class Inner }
+
+ class D {
+ object O {
+ def foo(c: C)(i: c.Inner): c.Inner = ???
+ }
+ }
+ """)
+ assert(filteredInfos.isEmpty, filteredInfos)
+ deleteClass("C")
+ compileCode("""
+ class E {
+ def foo = {
+ (null: D).toString
+ }
+ }
+ """)
+ assert(storeReporter.infos.isEmpty, storeReporter.infos.mkString("\n")) // Included a MissingRequirementError before.
+ }
+
+ def deleteClass(name: String) {
+ val classFile = new File(testOutput.path, name + ".class")
+ assert(classFile.exists)
+ assert(classFile.delete())
+ }
+}