diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-01-31 11:49:19 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-02-04 22:41:39 +0100 |
commit | 02ed5fb3bc8d792872223ceecfd8fd0ae089d923 (patch) | |
tree | 9cffc064d77e94b1d3a577ade5ace0e1e4a6cc7f /src/reflect/scala/reflect/internal/PrivateWithin.scala | |
parent | 2fa859e1b3eb2ac57058feaba87d96adfbac9209 (diff) | |
download | scala-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.scala | 23 |
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 |