summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
diff options
context:
space:
mode:
authorSeth Tisue <seth@tisue.net>2016-10-05 11:35:53 -0500
committerGitHub <noreply@github.com>2016-10-05 11:35:53 -0500
commit9d3f0777ff883a7c59da3fa7fee156890f51701e (patch)
tree571d67a2b815db2c7b32c36160629dabfa7dba48 /src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
parent388053544829c53c95cb6f9bf24ac366e950bac0 (diff)
parentfb53465ca7df23aa996f4bd3c03367f98f37d283 (diff)
downloadscala-9d3f0777ff883a7c59da3fa7fee156890f51701e.tar.gz
scala-9d3f0777ff883a7c59da3fa7fee156890f51701e.tar.bz2
scala-9d3f0777ff883a7c59da3fa7fee156890f51701e.zip
Merge pull request #5416 from SethTisue/merge-2.12.0-to-2.12.x-sep-24
merge 2.12.0 onto 2.12.x [ci: last-only]
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/RefChecks.scala')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/RefChecks.scala11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
index 8034d056d7..106b076eef 100644
--- a/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/RefChecks.scala
@@ -95,6 +95,15 @@ abstract class RefChecks extends Transform {
)
}
+ private val separatelyCompiledScalaSuperclass = perRunCaches.newAnyRefMap[Symbol, Unit]()
+ final def isSeparatelyCompiledScalaSuperclass(sym: Symbol) = if (globalPhase.refChecked){
+ separatelyCompiledScalaSuperclass.contains(sym)
+ } else {
+ // conservative approximation in case someone in pre-refchecks phase asks for `exitingFields(someClass.info)`
+ // and we haven't run the refchecks tree transform which populates `separatelyCompiledScalaSuperclass`
+ false
+ }
+
class RefCheckTransformer(unit: CompilationUnit) extends Transformer {
var localTyper: analyzer.Typer = typer
@@ -854,6 +863,8 @@ abstract class RefChecks extends Transform {
// println("validate base type "+tp)
val baseClass = tp.typeSymbol
if (baseClass.isClass) {
+ if (!baseClass.isTrait && !baseClass.isJavaDefined && !currentRun.compiles(baseClass) && !separatelyCompiledScalaSuperclass.contains(baseClass))
+ separatelyCompiledScalaSuperclass.update(baseClass, ())
val index = clazz.info.baseTypeIndex(baseClass)
if (index >= 0) {
if (seenTypes(index) forall (tp1 => !(tp1 <:< tp)))