summaryrefslogtreecommitdiff
path: root/src/compiler/scala/reflect/runtime/SymbolTable.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/reflect/runtime/SymbolTable.scala')
-rw-r--r--src/compiler/scala/reflect/runtime/SymbolTable.scala19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/compiler/scala/reflect/runtime/SymbolTable.scala b/src/compiler/scala/reflect/runtime/SymbolTable.scala
index 9e560e0d20..eb4026f7ef 100644
--- a/src/compiler/scala/reflect/runtime/SymbolTable.scala
+++ b/src/compiler/scala/reflect/runtime/SymbolTable.scala
@@ -6,4 +6,21 @@ package runtime
* It can be used either from the reflexive mirror itself (class Universe), or else from
* a runtime compiler that uses reflection to get a class information (class scala.tools.nsc.ReflectGlobal)
*/
-trait SymbolTable extends internal.SymbolTable with JavaToScala with ScalaToJava with Loaders
+trait SymbolTable extends internal.SymbolTable with JavaToScala with ScalaToJava with Loaders {
+
+ /** If `owner` is a package class and `name` is a term name, make a new package
+ * <owner>.<name>, otherwise return NoSymbol
+ */
+ override def missingHook(owner: Symbol, name: Name): Symbol =
+ if (name.isTermName && owner.hasPackageFlag)
+ makeScalaPackage(if (owner.isRoot) name.toString else owner.fullName+"."+name).sourceModule
+ else {
+ println(name+"/"+name.isTermName+"/"+owner+"/"+owner.hasPackageFlag+"/"+owner.info.decls.getClass)
+ super.missingHook(owner, name)
+ }
+
+ /** Assert that packages have package scopes */
+ override def validateClassInfo(tp: ClassInfoType) {
+ assert(!tp.typeSymbol.isPackageClass || tp.decls.isInstanceOf[PackageScope])
+ }
+}