Skip to content

protect[something] on trait doesn't work #4845

Closed
@scabug

Description

@scabug

As reported in the Scala-User mailing list (~2011-07-26T13:09), protected[packagename] on trait doesn't work, ie. the trait seems to be public.
I paste here my observations:

  • file T1.scala
    package c.d

protected[d] trait MyTrait
{
def doFoo() { println("Foo") }
}

  • file T2.scala

package a.b

import c.d.MyTrait

class MyClass extends MyTrait
{
def doBar() { doFoo(); println("Bar") }
}

object X
{
def main(args: Array[String])
{
val mc = new MyClass
mc.doBar()
}
}

D:\Temp\Scala

C:\Java\scala-2.8.1.final\bin\scalac.bat T1.scala

D:\Temp\Scala

C:\Java\scala-2.8.1.final\bin\scalac.bat T2.scala
T2.scala:5: error: trait MyTrait cannot be accessed in package c.d
class MyClass extends MyTrait
^
T2.scala:7: error: not found: value doFoo
def doBar() { doFoo(); println("Bar") }
^
two errors found

D:\Temp\Scala

C:\Java\scala-2.9.0.final\bin\scalac.bat T1.scala

D:\Temp\Scala

C:\Java\scala-2.9.0.final\bin\scalac.bat T2.scala

D:\Temp\Scala

C:\Java\scala-2.9.0.final\bin\scala.bat a.b.X
Foo
Bar

I took a code snippet from the online Programming in Scala [1] to activate the protection, ie. to get a compilation error:

package bobsrockets
{
package navigation
{
private[navigation] class Navigator
{
protected[navigation] def useStarChart() {}
class LegOfJourney
{
private[Navigator] val distance = 100
}
private[this] var speed = 200
}
}
package launch
{
import navigation._
object Vehicle
{
private[launch] val guide = new Navigator
def vroom() = guide.useStarChart
}
}
}

D:\Temp\Scala

C:\Java\scala-2.8.1.final\bin\scalac.bat T3.scala
T3.scala:20: error: class Navigator cannot be accessed in package bobsrockets.navigation
private[launch] val guide = new Navigator
^
one error found

D:\Temp\Scala

C:\Java\scala-2.9.0.final\bin\scalac.bat T3.scala
error: scala.MatchError: <unknown tree of class class scala.tools.nsc.typechecker.Infer$Inferencer$AccessError> (of class scala.tools.nsc.typechecker.Infer$Inferencer$AccessError)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:754)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:53)
at scala.tools.nsc.typechecker.SuperAccessors$SuperAccTransformer.transform(SuperAccessors.scala:243)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:831)
[...] (long stack trace)

[1] http://www.artima.com/pins1ed/packages-and-imports.html "Public members" (no anchors, alas)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions