blob: 41d5a3b0b1be407792f8b74a4b2ce3f30fd49e3c [file] [log] [blame]
J. Dukef57b87e2007-12-01 00:00:00 +00001/*
Sonali Goeld15c9842014-06-05 10:44:38 -07002 * @test /nodynamiccopyright/
3 * @bug 5044626
J. Dukef57b87e2007-12-01 00:00:00 +00004 * @summary type system loophole in wildcard substitution
5 * @author Gilad Bracha
6 *
Sonali Goeld15c9842014-06-05 10:44:38 -07007 * @compile/fail/ref=CaptureInSubtype.out -XDrawDiagnostics CaptureInSubtype.java
J. Dukef57b87e2007-12-01 00:00:00 +00008 */
9
10import java.util.List;
11import java.util.ArrayList;
12
13public class CaptureInSubtype {
14
15 static class SuperOfFlaw<S>{
16 S s;
17 S get() { return s;}
18 void put(S a) { s = a;}
19
20 SuperOfFlaw(S a) { s = a;}
21 }
22
23 static class Flaw<T> extends SuperOfFlaw<List<T>> {
24 List<T> fetch(){return s;}
25
26 Flaw(T t){super(new ArrayList<T>()); s.add(t);}
27 }
28
29 static class SuperOfShowFlaw {
30
31 SuperOfFlaw<List<?>> m(){return null;}
32 }
33
34
35 public static class ShowFlaw extends SuperOfShowFlaw {
36 static Flaw<Number> fn = new Flaw<Number>(new Integer(3));
37
38 Flaw<?> m(){return fn;}
39 }
40
41 public static void main(String[] args) {
42 SuperOfShowFlaw sosf = new ShowFlaw();
43 SuperOfFlaw<List<?>> sof = sosf.m();
44 List<String> ls = new ArrayList<String>();
45 ls.add("Smalltalk rules!");
46 sof.put(ls);
47 Number n = ShowFlaw.fn.get().get(0);
48 }
49
50}