File tree 5 files changed +57
-9
lines changed
compiler/src/dotty/tools/dotc/printing
sbt-test/pipelining/Yjava-tasty-fromjavaobject 5 files changed +57
-9
lines changed Original file line number Diff line number Diff line change @@ -22,9 +22,11 @@ class OutlinePrinter private (_ctx: Context) extends RefinedPrinter(_ctx) {
22
22
23
23
/* Typical patterns seen in output of typer for Java code, plus the output of unpickling an ELIDED tree */
24
24
def isElidableExpr [T <: Untyped ](tree : Tree [T ]): Boolean = tree match {
25
- case tree : Ident [T ] if tree.name == nme.WILDCARD => true
26
- case tree : Select [T ] if tree.symbol == defn.Predef_undefined => true
27
- case Apply (Select (tree : New [T ], nme.CONSTRUCTOR ), Nil ) if tree.tpt.typeOpt.typeSymbol.is(Module ) => true
25
+ case tree : Ident [T ] if tree.name == nme.WILDCARD => true // `ELIDED exprType`
26
+ case tree : Literal [T ] => true // e.g. `()`
27
+ case tree : Select [T ] if tree.symbol == defn.Predef_undefined => true // e.g. `Predef.???`
28
+ case Apply (Select (tree : New [T ], nme.CONSTRUCTOR ), Nil )
29
+ if tree.tpt.typeOpt.typeSymbol.is(Module ) => true // e.g. `new foo.Foo$()` (rhs of a module val)
28
30
case _ => false
29
31
}
30
32
Original file line number Diff line number Diff line change 5
5
public class A {
6
6
7
7
public static class Inner <T > extends Object {
8
- public Inner () {}
8
+ public T field1 ;
9
+ public T getter1 () { return field1 ; }
10
+ public Object field2 ;
11
+ public Object getter2 () { return field2 ; }
12
+
13
+ public Inner (T param1 , Object param2 ) {
14
+ this .field1 = param1 ;
15
+ this .field2 = param2 ;
16
+ }
9
17
10
18
public void meth1 (T arg ) {}
11
19
public <U extends T > void meth2 (U arg ) {}
12
20
}
13
21
14
22
public static class Inner_sel <T > extends java .lang .Object {
15
- public Inner_sel () {}
23
+ public T field1 ;
24
+ public T getter1 () { return field1 ; }
25
+ public java .lang .Object field2 ;
26
+ public java .lang .Object getter2 () { return field2 ; }
27
+
28
+ public Inner_sel (T param1 , java .lang .Object param2 ) {
29
+ this .field1 = param1 ;
30
+ this .field2 = param2 ;
31
+ }
16
32
17
33
public void meth1 (T arg ) {}
18
34
public <U extends T > void meth2 (U arg ) {}
Original file line number Diff line number Diff line change 8
8
public class AImport {
9
9
10
10
public static class Inner <T > extends Object {
11
- public Inner () {}
11
+ public T field1 ;
12
+ public T getter1 () { return field1 ; }
13
+ public Object field2 ;
14
+ public Object getter2 () { return field2 ; }
15
+
16
+ public Inner (T param1 , Object param2 ) {
17
+ this .field1 = param1 ;
18
+ this .field2 = param2 ;
19
+ }
12
20
13
21
public void meth1 (T arg ) {}
14
22
}
Original file line number Diff line number Diff line change @@ -7,8 +7,8 @@ object B {
7
7
8
8
val newA = new A
9
9
10
- val newAInner = new A .Inner [Int ]()
11
- val newAInner_sel = new A .Inner_sel [Int ]()
10
+ val newAInner = new A .Inner [Int ](23 , true )
11
+ val newAInner_sel = new A .Inner_sel [Int ](23 , true )
12
12
13
13
@ main
14
14
def test = {
@@ -36,6 +36,20 @@ object B {
36
36
newAInner_sel.meth1(1 ) // OK
37
37
newAInner_sel.meth2(1 ) // OK
38
38
39
+ assert((newAInner.field1: Int ) == 23 ) // OK
40
+ newAInner.field1 = 31 // OK
41
+ assert((newAInner.getter1: Int ) == 31 ) // OK
42
+ assert(newAInner.field2 == true ) // OK
43
+ newAInner.field2 = false // OK
44
+ assert(newAInner.getter2 == false ) // OK
45
+
46
+ assert((newAInner_sel.field1: Int ) == 23 ) // OK
47
+ newAInner_sel.field1 = 31 // OK
48
+ assert((newAInner_sel.getter1: Int ) == 31 ) // OK
49
+ assert(newAInner_sel.field2 == true ) // OK
50
+ newAInner_sel.field2 = false // OK
51
+ assert(newAInner_sel.getter2 == false ) // OK
52
+
39
53
BImport .testImport() // OK
40
54
}
41
55
}
Original file line number Diff line number Diff line change @@ -6,7 +6,7 @@ object BImport {
6
6
7
7
val newA = new AImport
8
8
9
- val newAInner = new AImport .Inner [Int ]()
9
+ val newAInner = new AImport .Inner [Int ](23 , true )
10
10
11
11
def testImport () = {
12
12
newA.meth1(1 ) // OK
@@ -18,6 +18,14 @@ object BImport {
18
18
newA.meth7(ai : _* ) // OK (will copy the array at Erasure)
19
19
20
20
newAInner.meth1(1 ) // OK
21
+
22
+ assert((newAInner.field1: Int ) == 23 ) // OK
23
+ newAInner.field1 = 31 // OK
24
+ assert((newAInner.getter1: Int ) == 31 ) // OK
25
+
26
+ assert(newAInner.field2 == true ) // OK
27
+ newAInner.field2 = false // OK
28
+ assert(newAInner.getter2 == false ) // OK
21
29
}
22
30
}
23
31
You can’t perform that action at this time.
0 commit comments