summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-01-26 23:01:41 +0000
committerHubert Plociniczak <hubert.plociniczak@epfl.ch>2010-01-26 23:01:41 +0000
commit06c765755580b69c6ad4e5351634a0073f5707a7 (patch)
tree477759b8c9c52e3eb5a18e28c06834a40dce08b4
parentf6183b63f28a199b7888949963a8d6984d54c3b1 (diff)
downloadscala-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.scala13
-rw-r--r--src/compiler/scala/tools/nsc/interactive/RefinedBuildManager.scala33
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)) {