summaryrefslogtreecommitdiff
path: root/test/files/jvm/innerClassAttribute/Classes_1.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2015-02-02 15:37:24 +0100
committerLukas Rytz <lukas.rytz@gmail.com>2015-02-07 07:45:51 +0100
commitcd8f2f327106c7e2944afa7ac8b7675262626c1e (patch)
treec4d820e34fd0a975655d7b30f0975e30fe990fdd /test/files/jvm/innerClassAttribute/Classes_1.scala
parent1437aa88241d5e99900a86b25c6ce385c2708570 (diff)
downloadscala-cd8f2f327106c7e2944afa7ac8b7675262626c1e.tar.gz
scala-cd8f2f327106c7e2944afa7ac8b7675262626c1e.tar.bz2
scala-cd8f2f327106c7e2944afa7ac8b7675262626c1e.zip
Fix InnerClass/EnclosingMethod for trait impl and specialized classes
Trait implementation classes and specialized classes are always considered top-level in terms of the InnerClass / EnclosingMethod attributes. These attributes describe source-level properties, and such classes are a compilation artifact. Note that the same is true for delambdafy:method closure classes (they are always top-level).
Diffstat (limited to 'test/files/jvm/innerClassAttribute/Classes_1.scala')
-rw-r--r--test/files/jvm/innerClassAttribute/Classes_1.scala37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/files/jvm/innerClassAttribute/Classes_1.scala b/test/files/jvm/innerClassAttribute/Classes_1.scala
index 7b5f5d93b9..e58fd6e26f 100644
--- a/test/files/jvm/innerClassAttribute/Classes_1.scala
+++ b/test/files/jvm/innerClassAttribute/Classes_1.scala
@@ -240,3 +240,40 @@ trait SI_9124 {
val f1 = { new A { def f5 = 0 }; 1 } // encl class SI_9124, no encl meth
private val f2 = { new A { def f6 = 0 }; 1 } // like above
}
+
+trait ImplClassesAreTopLevel {
+ // all impl classes are top-level, so they don't appear in any InnerClass entry, and none of them have an EnclosingMethod attr
+ trait B1 { def f = 1 }
+ { trait B2 { def f = 1 }; new B2 {} }
+ val m = {
+ trait B3 { def f = 1 }
+ new B3 {}
+ }
+ def n = {
+ trait B4 { def f = 1 }
+ new B4 {}
+ }
+}
+
+class SpecializedClassesAreTopLevel {
+ // all specialized classes are top-level
+ class A[@specialized(Int) T]; new A[Int]
+
+ object T {
+ class B[@specialized(Int) T]; new B[Int]
+ }
+
+ // these crash the compiler, SI-7625
+
+ // { class B[@specialized(Int) T]; new B[Int] }
+
+ // val m: Object = {
+ // class C[@specialized(Int) T]
+ // new C[Int]
+ // }
+
+ // def n: Object = {
+ // class D[@specialized(Int) T]
+ // new D[Int]
+ // }
+}