diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2014-10-14 16:35:35 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@gmail.com> | 2014-10-15 08:15:01 +0200 |
commit | e96d1a4d346b1ebac46796307a0887d7b7c4fccf (patch) | |
tree | 591ac2ba479c358b2913d1bf5d5f912934cb1833 /test/files/run | |
parent | 2b5df373638d08204b71258928289f6b39e25d5f (diff) | |
download | scala-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.scala | 39 |
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()) + } +} |