Skip to content

Commit 1f8c48f

Browse files
committed
Add corner case tests for protected constructor access
Neg tests: new in constructor body, lambda in super args, transitive parent in super args, direct parent in super args, mixed visibility constructors. Pos tests: super calls, inner class super calls, public secondary constructor in super args.
1 parent 8005760 commit 1f8c48f

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

tests/neg/i25442/protected-constructors.scala

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package protectedCtors
2+
13
class A protected (x: Int)
24

35
// Protected constructor in super call arguments (transitive parent)
@@ -15,3 +17,12 @@ class F protected (x: Int) {
1517
class G(f: F) extends F(f.hashCode)
1618
class H extends G(new F()) // ok: public secondary in super args
1719
class J extends G(new F(1)) // error: protected primary in super args
20+
21+
// new in primary constructor body
22+
class K extends A(42) {
23+
val k = new A(1) // error
24+
}
25+
26+
// Lambda in super call arguments
27+
class M(f: () => A) extends A(1)
28+
class N extends M(() => new A(2)) // error

tests/pos/i25442.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package protectedCtorsPos
2+
3+
class A protected (x: Int)
4+
5+
// Super calls are allowed
6+
class B extends A(42)
7+
8+
// Inner class extending protected parent
9+
class C extends A(42) {
10+
class Inner extends A(1)
11+
}
12+
13+
// Mixed visibility: public secondary constructor is accessible
14+
class D protected (x: Int) {
15+
def this() = this(0)
16+
}
17+
class E(d: D) extends D(d.hashCode)
18+
class F extends E(new D())

0 commit comments

Comments
 (0)