summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-02-04 02:45:56 -0800
committerEugene Burmako <xeno.by@gmail.com>2013-02-04 02:45:56 -0800
commit8d25d05e9bf848d763e7b657d9c7e96ea5cb8daf (patch)
treedcbfc7c323e13b1aeca47c8181a1623dc30faee1
parent5aa225f3a57238ed90f8f60cf139043a23bd9f4f (diff)
parent2403d1ddcaa1bd76c1f376a32ec03a36d4dab48b (diff)
downloadscala-8d25d05e9bf848d763e7b657d9c7e96ea5cb8daf.tar.gz
scala-8d25d05e9bf848d763e7b657d9c7e96ea5cb8daf.tar.bz2
scala-8d25d05e9bf848d763e7b657d9c7e96ea5cb8daf.zip
Merge pull request #2039 from scalamacros/ticket/7046
SI-7046 reflection now auto-initializes knownDirectSubclasses
-rw-r--r--src/reflect/scala/reflect/internal/Symbols.scala6
-rw-r--r--test/files/run/t7046.check2
-rw-r--r--test/files/run/t7046.scala13
3 files changed, 20 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala
index 5be479add0..72ad84edec 100644
--- a/src/reflect/scala/reflect/internal/Symbols.scala
+++ b/src/reflect/scala/reflect/internal/Symbols.scala
@@ -86,7 +86,11 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
case n: TypeName => if (isClass) newClassSymbol(n, pos, newFlags) else newNonClassSymbol(n, pos, newFlags)
}
- def knownDirectSubclasses = children
+ def knownDirectSubclasses = {
+ if (!isCompilerUniverse && needsInitialize(isFlagRelated = false, mask = 0)) initialize
+ children
+ }
+
def baseClasses = info.baseClasses
def module = sourceModule
def thisPrefix: Type = thisType
diff --git a/test/files/run/t7046.check b/test/files/run/t7046.check
new file mode 100644
index 0000000000..427f1ce610
--- /dev/null
+++ b/test/files/run/t7046.check
@@ -0,0 +1,2 @@
+Set(class D, class E)
+Set(class D, class E)
diff --git a/test/files/run/t7046.scala b/test/files/run/t7046.scala
new file mode 100644
index 0000000000..647a15cd18
--- /dev/null
+++ b/test/files/run/t7046.scala
@@ -0,0 +1,13 @@
+import scala.reflect.runtime.universe._
+import scala.reflect.runtime.{currentMirror => cm}
+
+sealed class C
+class D extends C
+class E extends C
+
+object Test extends App {
+ val c = cm.staticClass("C")
+ println(c.knownDirectSubclasses)
+ c.typeSignature
+ println(c.knownDirectSubclasses)
+} \ No newline at end of file