Skip to content

scalac compiles without error access to static protected (not visible) field #6934

Closed
@scabug

Description

@scabug

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.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions