summaryrefslogtreecommitdiff
path: root/test/files/pos/attributes.scala
blob: 60e00bff7d7c34a3e74a1215a628f96217ceb263 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
class serializable extends annotation.StaticAnnotation

@serializable  class C1;
@serializable @volatile  class C2;
@serializable @volatile  class C3;
@serializable @volatile @serializable class C4;

@serializable  trait T1;
@serializable @volatile trait T2;
@serializable @volatile  trait T3;
@serializable @volatile @serializable trait T4;

@serializable  object O1 extends C1;
@serializable @volatile object O2 extends C2;
@serializable @volatile  object O3 extends C3;
@serializable @volatile @serializable object O4 extends C4;

object O5 {
  final val n = 2;
  @SerialVersionUID(0)  class C1;
  @SerialVersionUID(n)  class C2;
  @SerialVersionUID(0) @SerialVersionUID(n)  class C3;
  @SerialVersionUID(0) @SerialVersionUID(n)  class C4;
}

abstract class A1 {
  @serializable  var y1: C1;
  @serializable @volatile  var y2: C2;
  @serializable @volatile  var y3: C3;
  @serializable @volatile @serializable  var y4: C4;

  @serializable  def foo1: C1;
  @serializable @volatile  def foo2: C2;
  @serializable @volatile  def foo3: C3;
  @serializable @volatile @serializable  def foo4: C4;
}

object O6 {
  @serializable  val x1 = new C1;
  // volatile val sensibly disallowed as of r18645
  @serializable val x2 = new C2;
  @serializable val x3 = new C3;
  @serializable val x4 = new C4;

  @serializable  var y1: C1 = _;
  @serializable @volatile  var y2: C2 = _;
  @serializable @volatile  var y3: C3 = _;
  @serializable @volatile @serializable  var y4: C4 = _;

  @serializable  private def foo1 = x1;
  @serializable @volatile  private def foo2 = x2;
  @serializable @volatile  protected def foo3 = x3;
  @serializable @volatile @serializable  protected def foo4 = x4;
}

object myAttrs {
  class a1 extends scala.annotation.Annotation;
  class a2(x: Int) extends scala.annotation.Annotation;
  class a3(x: a1) extends scala.annotation.Annotation;
}
class a4(ns: Array[Int]) extends scala.annotation.Annotation;
object O7 {
  class a1 extends scala.annotation.Annotation;
  class a2(x: Int) extends scala.annotation.Annotation;
  class a3(x: a1) extends scala.annotation.Annotation;

  final val x = new a1;
  @a1  class C1;
  @a1 @a2(77)  class C2;
  @a1 @a2(88)  class C3;
  @a1 @a2(88) @a3(null)  class C4;

  @myAttrs.a1  class A1;
  @myAttrs.a1 @myAttrs.a2(99)  class A2;
  @myAttrs.a1 @myAttrs.a2(99)  class A3;
  @myAttrs.a1 @myAttrs.a2(99) @myAttrs.a3(null)  class A4;
  @a4(Array(1,2,3)) class A5;
  @a4(Array()) class A6;

  val zero = 0 : @myAttrs.a1
}