summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-02-10 20:46:14 +0100
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-02-10 20:46:14 +0100
commitc611f7b91414831e4de86e07c6310865b075b98d (patch)
tree8f2412d785281c144632aaf7b58eaa1d4edd71a8 /src/reflect
parent90aa12ee9cca5d433459f0a825d510c8fb1c17be (diff)
parent894aee1347600201dd2decbd07bcf7820cbbee3d (diff)
downloadscala-c611f7b91414831e4de86e07c6310865b075b98d.tar.gz
scala-c611f7b91414831e4de86e07c6310865b075b98d.tar.bz2
scala-c611f7b91414831e4de86e07c6310865b075b98d.zip
Merge pull request #3502 from retronym/ticket/8258
Fix regression for using Scala IDE on scala-library
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/TreeInfo.scala22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/TreeInfo.scala b/src/reflect/scala/reflect/internal/TreeInfo.scala
index 7bab15b0f4..8cad2497c1 100644
--- a/src/reflect/scala/reflect/internal/TreeInfo.scala
+++ b/src/reflect/scala/reflect/internal/TreeInfo.scala
@@ -735,6 +735,17 @@ abstract class TreeInfo {
unapply(dissectApplied(tree))
}
+ /** Does list of trees start with a definition of
+ * a class of module with given name (ignoring imports)
+ */
+ def firstDefinesClassOrObject(trees: List[Tree], name: Name): Boolean = trees match {
+ case Import(_, _) :: xs => firstDefinesClassOrObject(xs, name)
+ case Annotated(_, tree1) :: _ => firstDefinesClassOrObject(List(tree1), name)
+ case ModuleDef(_, `name`, _) :: _ => true
+ case ClassDef(_, `name`, _, _) :: _ => true
+ case _ => false
+ }
+
/** Locates the synthetic Apply node corresponding to an extractor's call to
* unapply (unwrapping nested Applies) and returns the fun part of that Apply.
*/
@@ -750,8 +761,7 @@ abstract class TreeInfo {
}
/** Is this file the body of a compilation unit which should not
- * have Predef imported? This is the case iff the first import in the
- * unit explicitly refers to Predef.
+ * have Predef imported?
*/
def noPredefImportForUnit(body: Tree) = {
// Top-level definition whose leading imports include Predef.
@@ -760,7 +770,13 @@ abstract class TreeInfo {
case Import(expr, _) => isReferenceToPredef(expr)
case _ => false
}
- isLeadingPredefImport(body)
+ // Compilation unit is class or object 'name' in package 'scala'
+ def isUnitInScala(tree: Tree, name: Name) = tree match {
+ case PackageDef(Ident(nme.scala_), defs) => firstDefinesClassOrObject(defs, name)
+ case _ => false
+ }
+
+ isUnitInScala(body, nme.Predef) || isLeadingPredefImport(body)
}
def isAbsTypeDef(tree: Tree) = tree match {