summaryrefslogtreecommitdiff
path: root/plugins/typeMigration/test/com/intellij/refactoring/WildcardTypeMigrationTest.java
blob: d66320623f836fb4b1b906c91e99c626d007a20d (plain)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*
 * User: anna
 * Date: 19-Aug-2009
 */
package com.intellij.refactoring;

import com.intellij.psi.CommonClassNames;
import org.jetbrains.annotations.NotNull;

public class WildcardTypeMigrationTest extends TypeMigrationTestBase{
  @NotNull
  @Override
  protected String getTestRoot() {
    return "/refactoring/wildcard/";
  }

  public void testProducerExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Number>", null));
  }

  public void testProducerSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Integer>", null));
  }

  public void testProducerUnbounded() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<?>", null));
  }

  public void testProducerCollectionChanged() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.Set<? super java.lang.Integer>", null));
  }

  public void testProducerExtendsCollectionChanged() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.Set<? extends java.lang.Object>", null));
  }

  public void testProducerStopAtWildcard() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<? super java.lang.Number>", null));
  }

  public void testProducerFailToStopAtWildcard() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<? super java.lang.Integer>", null));
  }

  public void testProducerExtendsFailToStopAtWildcard() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<? super java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<? extends java.lang.Number>", null));
  }


  public void testConsumerExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Number>", null));
  }

  public void testConsumerSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Number>", null));
  }

  public void testConsumerUnbounded() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<?>", null));
  }

  // array -> list
  public void testAssignmentExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Integer>", null));
  }

  public void testAssignmentSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Integer>", null));
  }

  public void testAssignmentUnbounded() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<?>", null));
  }

  public void testGetExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Integer>", null));
  }

  public void testGetSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? super java.lang.Integer>", null));
  }

  public void testGetUnbounded() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<?>", null));

  }

  public void testLengthSize() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType(),
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<?>", null));

  }

  //list -> array
  public void testGetAssignmentExtendsToType() throws Exception {
    doTestFirstParamType("method", myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Number", null).createArrayType());
  }

  public void testGetAssignmentExtendsToSuperType() throws Exception {
    doTestFirstParamType("method", myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText(CommonClassNames.JAVA_LANG_OBJECT, null).createArrayType());
  }

  public void testGetAssignmentExtendsToChildType() throws Exception {
    doTestFirstParamType("method", myJavaFacade.getElementFactory().createTypeFromText("java.util.ArrayList<? extends java.lang.Number>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.Integer", null).createArrayType());
  }

  // -> threadlocal with wildcard
  public void testThreadLocalProducerExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<java.lang.String>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.ThreadLocal<java.util.List<? extends String>>", null));
  }

  //List<? super String> is not assignable to List<String> though it is possible to pass string where ? super String was   
  public void _testThreadLocalProducerSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.util.List<java.lang.String>", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.ThreadLocal<java.util.List<? super String>>", null));
  }

  public void testThreadLocalConsumerSuper() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.String", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.ThreadLocal<? super String>", null));
  }

  public void testThreadLocalConsumerExtends() throws Exception {
    doTestFirstParamType("method",
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.String", null),
                         myJavaFacade.getElementFactory().createTypeFromText("java.lang.ThreadLocal<? extends String>", null));
  }
}