summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-01-31 19:46:51 +0100
committerEugene Burmako <xeno.by@gmail.com>2013-01-31 19:46:51 +0100
commit2403d1ddcaa1bd76c1f376a32ec03a36d4dab48b (patch)
tree109d952673e43bbd279111b18d5446f5935b9132
parent42c4cc7a1eed222a1593c6ac2652cd5357c2897a (diff)
downloadscala-2403d1ddcaa1bd76c1f376a32ec03a36d4dab48b.tar.gz
scala-2403d1ddcaa1bd76c1f376a32ec03a36d4dab48b.tar.bz2
scala-2403d1ddcaa1bd76c1f376a32ec03a36d4dab48b.zip
SI-7046 reflection now auto-initializes knownDirectSubclasses
knownDirectSubclasses joins the happy family of flags, annotations and privateWithin, which automatically trigger initialization, when used within runtime reflection.
-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 c1b868f3cb..f4d70a991c 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