Navigation Menu

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
scabug opened this issue Jul 27, 2011 · 2 comments
Open

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

scabug opened this issue Jul 27, 2011 · 2 comments
Labels
Milestone

Comments

@scabug
Copy link

scabug commented Jul 27, 2011

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)

@scabug
Copy link
Author

scabug commented Jul 27, 2011

Imported From: https://issues.scala-lang.org/browse/SI-4845?orig=1
Reporter: Philippe Lhoste (philho)
Affected Versions: 2.9.0

@scabug
Copy link
Author

scabug commented Jul 10, 2013

@adriaanm said:
Unassigning as milestone deadline was reached.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants