diff options
author | Hubert Plociniczak <hubert.plociniczak@epfl.ch> | 2010-01-26 23:01:41 +0000 |
---|---|---|
committer | Hubert Plociniczak <hubert.plociniczak@epfl.ch> | 2010-01-26 23:01:41 +0000 |
commit | 06c765755580b69c6ad4e5351634a0073f5707a7 (patch) | |
tree | 477759b8c9c52e3eb5a18e28c06834a40dce08b4 | |
parent | f6183b63f28a199b7888949963a8d6984d54c3b1 (diff) | |
download | scala-06c765755580b69c6ad4e5351634a0073f5707a7.tar.gz scala-06c765755580b69c6ad4e5351634a0073f5707a7.tar.bz2 scala-06c765755580b69c6ad4e5351634a0073f5707a7.zip |
Refactored some of the code from r20624 thanks ...
Refactored some of the code from r20624 thanks to Iulian's review.
-rw-r--r-- | src/compiler/scala/tools/nsc/dependencies/DependencyAnalysis.scala | 13 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala | 33 |
2 files changed, 12 insertions, 34 deletions
diff --git a/src/compiler/scala/tools/nsc/dependencies/DependencyAnalysis.scala b/src/compiler/scala/tools/nsc/dependencies/DependencyAnalysis.scala index 40198fbadd..95115dc68e 100644 --- a/src/compiler/scala/tools/nsc/dependencies/DependencyAnalysis.scala +++ b/src/compiler/scala/tools/nsc/dependencies/DependencyAnalysis.scala @@ -112,7 +112,7 @@ trait DependencyAnalysis extends SubComponent with Files { filtered } - case class Inherited(q: String, name: Name) + case class Inherited(qualifier: String, member: Name) class AnalysisPhase(prev : Phase) extends StdPhase(prev){ def apply(unit : global.CompilationUnit) { @@ -182,13 +182,10 @@ trait DependencyAnalysis extends SubComponent with Files { } super.traverse(tree) case a @ Select(q, n) if (q.symbol != null) => // #2556 - if (!a.symbol.isConstructor && !a.symbol.owner.isPackage) { - val tpe1 = q.symbol.tpe match { - case MethodType(_, t) => t // Constructor - case t => t - } - if (!isSameType(tpe1, a.symbol.owner.tpe)) - inherited += file -> (inherited(file) + Inherited(tpe1.safeToString, n)) + if (!a.symbol.isConstructor && !a.symbol.owner.isPackageClass) { + if (!isSameType(q.tpe, a.symbol.owner.tpe)) + inherited += file -> + (inherited(file) + Inherited(q.symbol.tpe.resultType.safeToString, n)) } super.traverse(tree) case _ => diff --git a/src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala b/src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala index d07f34421f..5df264752e 100644 --- a/src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala +++ b/src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala @@ -288,19 +288,15 @@ class RefinedBuildManager(val settings: Settings) extends Changes with BuildMana def checkInheritedReferences(file: AbstractFile) { val refs = inherited(file) - if (!inherited.isEmpty) + if (!refs.isEmpty) change match { case ParentChanged(Class(name)) => - refs.find(p => (p != null && p.q == name)) match { - case Some(Inherited(q, member)) => - findSymbol(q) match { - case Some(s) => - if (s.tpe.nonPrivateMember(member) == compiler.NoSymbol) - invalidate(file, "it references invalid (no longer inherited) defintion", change) - case None => // TODO: log/throw error? - } - case None => - } + for (Inherited(q, member) <- refs.find(p => (p != null && p.qualifier == name)); + classFile <- classes.get(q); + defs <- definitions.get(classFile); + s <- defs.find(p => p.sym.fullNameString == q) + if ((s.sym).tpe.nonPrivateMember(member) == compiler.NoSymbol)) + invalidate(file, "it references invalid (no longer inherited) defintion", change) () case _ => () } @@ -321,21 +317,6 @@ class RefinedBuildManager(val settings: Settings) extends Changes with BuildMana invalidated(buf.clone() --= processed, newChangesOf, processed ++ buf) } - private def findSymbol(classFullName: String): Option[Symbol] = { - classes.get(classFullName) match { - case Some(file) => - definitions.get(file) match { - case Some(defs) => - defs.find(p => (p.sym.fullNameString == classFullName)) match { - case Some(s) => Some(s.sym) - case _ => None - } - case None => None - } - case None => None - } - } - /** Update the map of definitions per source file */ private def updateDefinitions(files: Set[AbstractFile]) { for (src <- files; val localDefs = compiler.dependencyAnalysis.definitions(src)) { |