File tree Expand file tree Collapse file tree 5 files changed +57
-9
lines changed
compiler/src/dotty/tools/dotc/printing
sbt-test/pipelining/Yjava-tasty-fromjavaobject Expand file tree Collapse file tree 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) {
2222
2323 /* Typical patterns seen in output of typer for Java code, plus the output of unpickling an ELIDED tree */
2424 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)
2830 case _ => false
2931 }
3032
Original file line number Diff line number Diff line change 55public class A {
66
77 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+ }
917
1018 public void meth1 (T arg ) {}
1119 public <U extends T > void meth2 (U arg ) {}
1220 }
1321
1422 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+ }
1632
1733 public void meth1 (T arg ) {}
1834 public <U extends T > void meth2 (U arg ) {}
Original file line number Diff line number Diff line change 88public class AImport {
99
1010 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+ }
1220
1321 public void meth1 (T arg ) {}
1422 }
Original file line number Diff line number Diff line change @@ -7,8 +7,8 @@ object B {
77
88 val newA = new A
99
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 )
1212
1313 @ main
1414 def test = {
@@ -36,6 +36,20 @@ object B {
3636 newAInner_sel.meth1(1 ) // OK
3737 newAInner_sel.meth2(1 ) // OK
3838
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+
3953 BImport .testImport() // OK
4054 }
4155}
Original file line number Diff line number Diff line change @@ -6,7 +6,7 @@ object BImport {
66
77 val newA = new AImport
88
9- val newAInner = new AImport .Inner [Int ]()
9+ val newAInner = new AImport .Inner [Int ](23 , true )
1010
1111 def testImport () = {
1212 newA.meth1(1 ) // OK
@@ -18,6 +18,14 @@ object BImport {
1818 newA.meth7(ai : _* ) // OK (will copy the array at Erasure)
1919
2020 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
2129 }
2230}
2331
You can’t perform that action at this time.
0 commit comments