Closed
Description
Scala 2.10.0 compiles without reporting an error the following classes:
// test/JavaClass.java
package test;
public class JavaClass {
protected static int STATIC_PROTECTED_FIELD= 4;
}
// test2/ScalaMain.scala
package test2
object ScalaMain {
def main(args: Array[String]) {
val a = test.JavaClass.STATIC_PROTECTED_FIELD
}
}
But it fails during execution:
$ scalac -version
Scala compiler version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL
$ scalac test*/*
$ javac test/*
$ scala test2.ScalaMain
java.lang.IllegalAccessError: tried to access field test.JavaClass.STATIC_PROTECTED_FIELD from class test2.ScalaMain$
at test2.ScalaMain$.main(ScalaMain.scala:6)
at test2.ScalaMain.main(ScalaMain.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:71)
at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:139)
at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:71)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:139)
at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45)
at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:35)
at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:45)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:74)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:105)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Compilation correctly fails when using Scala 2.9.2
$ ~/opt/scala-2.9.2/bin/scalac -version
Scala compiler version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL
$ ~/opt/scala-2.9.2/bin/scalac test*/*
test2/ScalaMain.scala:6: error: variable STATIC_PROTECTED_FIELD in object JavaClass cannot be accessed in object test.JavaClass
Access to protected variable STATIC_PROTECTED_FIELD not permitted because
enclosing class object ScalaMain in package test2 is not a subclass of
object JavaClass in package test where target is defined
val a = test.JavaClass.STATIC_PROTECTED_FIELD
^
one error found
Compilation also correctly fails on 2.10.0 for non-static protected fields.