summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/PrivateWithin.scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-01-31 11:49:19 +0100
committerEugene Burmako <xeno.by@gmail.com>2013-02-04 22:41:39 +0100
commit02ed5fb3bc8d792872223ceecfd8fd0ae089d923 (patch)
tree9cffc064d77e94b1d3a577ade5ace0e1e4a6cc7f /src/reflect/scala/reflect/internal/PrivateWithin.scala
parent2fa859e1b3eb2ac57058feaba87d96adfbac9209 (diff)
downloadscala-02ed5fb3bc8d792872223ceecfd8fd0ae089d923.tar.gz
scala-02ed5fb3bc8d792872223ceecfd8fd0ae089d923.tar.bz2
scala-02ed5fb3bc8d792872223ceecfd8fd0ae089d923.zip
SI-6989 privateWithin is now populated in reflect
Runtime reflection in JavaMirrors previously forgot to fill in privateWithin when importing Java reflection artifacts. Now this is fixed.
Diffstat (limited to 'src/reflect/scala/reflect/internal/PrivateWithin.scala')
-rw-r--r--src/reflect/scala/reflect/internal/PrivateWithin.scala23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/PrivateWithin.scala b/src/reflect/scala/reflect/internal/PrivateWithin.scala
new file mode 100644
index 0000000000..9b99b94b41
--- /dev/null
+++ b/src/reflect/scala/reflect/internal/PrivateWithin.scala
@@ -0,0 +1,23 @@
+package scala.reflect
+package internal
+
+import ClassfileConstants._
+
+trait PrivateWithin {
+ self: SymbolTable =>
+
+ def importPrivateWithinFromJavaFlags(sym: Symbol, jflags: Int): Symbol = {
+ if ((jflags & (JAVA_ACC_PRIVATE | JAVA_ACC_PROTECTED | JAVA_ACC_PUBLIC)) == 0)
+ // See ticket #1687 for an example of when topLevelClass is NoSymbol: it
+ // apparently occurs when processing v45.3 bytecode.
+ if (sym.enclosingTopLevelClass != NoSymbol)
+ sym.privateWithin = sym.enclosingTopLevelClass.owner
+
+ // protected in java means package protected. #3946
+ if ((jflags & JAVA_ACC_PROTECTED) != 0)
+ if (sym.enclosingTopLevelClass != NoSymbol)
+ sym.privateWithin = sym.enclosingTopLevelClass.owner
+
+ sym
+ }
+} \ No newline at end of file