summaryrefslogtreecommitdiff
path: root/java/typeMigration/testData/refactoring/wildcard
diff options
context:
space:
mode:
Diffstat (limited to 'java/typeMigration/testData/refactoring/wildcard')
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentExtends/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentSuper/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerExtends/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/Test.items12
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerSuper/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/Test.items12
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getExtends/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getExtends/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getExtends/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getSuper/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getSuper/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getSuper/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/getUnbounded/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/lengthSize/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/lengthSize/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/lengthSize/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtends/after/Test.items11
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtends/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtends/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/Test.items11
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/Test.items11
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/Test.items11
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerSuper/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerSuper/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerSuper/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/Test.items11
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/producerUnbounded/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/test.java5
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/before/test.java5
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/test.java5
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/before/test.java5
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/Test.items9
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/before/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/Test.items10
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/test.java7
-rw-r--r--java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/before/test.java7
75 files changed, 594 insertions, 0 deletions
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/Test.items
new file mode 100644
index 000000000000..b39d716277ba
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:p : java.util.ArrayList<? extends java.lang.Integer>
+PsiReferenceExpression:p : java.util.ArrayList<? extends java.lang.Integer>
+
+Conversions:
+
+New expression type changes:
+Fails:
+p[0]->java.util.ArrayList<? extends java.lang.Integer>
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/test.java
new file mode 100644
index 000000000000..16a620ef2e6d
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Integer> p) {
+ p[0] = new Integer(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/before/test.java
new file mode 100644
index 000000000000..4a148c3bd6fe
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentExtends/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ p[0] = new Integer(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/Test.items
new file mode 100644
index 000000000000..8ee86c529545
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiArrayAccessExpression:p[0] : java.lang.Integer
+PsiParameter:p : java.util.ArrayList<? super java.lang.Integer>
+PsiReferenceExpression:p : java.util.ArrayList<? super java.lang.Integer>
+
+Conversions:
+p[0] -> $qualifier$.set($idx$, $expr$) $qualifier$[$idx$] = $expr$ p[0] = new Integer(0)
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/test.java
new file mode 100644
index 000000000000..25cab7a9d34c
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Integer> p) {
+ p.set(0, new Integer(0));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/before/test.java
new file mode 100644
index 000000000000..4a148c3bd6fe
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentSuper/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ p[0] = new Integer(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/Test.items
new file mode 100644
index 000000000000..e2bbfc48b834
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:p : java.util.ArrayList<?>
+PsiReferenceExpression:p : java.util.ArrayList<?>
+
+Conversions:
+
+New expression type changes:
+Fails:
+p[0]->java.util.ArrayList<?>
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/test.java
new file mode 100644
index 000000000000..4804293a696e
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<?> p) {
+ p[0] = new Integer(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/before/test.java b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/before/test.java
new file mode 100644
index 000000000000..4a148c3bd6fe
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/assignmentUnbounded/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ p[0] = new Integer(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/Test.items
new file mode 100644
index 000000000000..455ebca21125
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p.get(0) : java.lang.Number
+PsiParameter:p : java.util.ArrayList<? extends java.lang.Number>
+PsiReferenceExpression:p : java.util.ArrayList<? extends java.lang.Number>
+
+Conversions:
+p.get(0) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/test.java
new file mode 100644
index 000000000000..b403162051ad
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Number> p, Number p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/before/test.java
new file mode 100644
index 000000000000..649da301cc82
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerExtends/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<Number> p, Number p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/Test.items
new file mode 100644
index 000000000000..e4f5c3fc2088
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/Test.items
@@ -0,0 +1,12 @@
+Types:
+PsiMethodCallExpression:p.get(0) : java.lang.Object
+PsiParameter:p : java.util.ArrayList<? super java.lang.Number>
+PsiParameter:p2 : java.lang.Object
+PsiReferenceExpression:p : java.util.ArrayList<? super java.lang.Number>
+PsiReferenceExpression:p2 : java.lang.Object
+
+Conversions:
+p.get(0) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/test.java
new file mode 100644
index 000000000000..2c315ea3a723
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p, Object p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/before/test.java
new file mode 100644
index 000000000000..649da301cc82
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerSuper/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<Number> p, Number p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/Test.items
new file mode 100644
index 000000000000..a0b14b30985e
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/Test.items
@@ -0,0 +1,12 @@
+Types:
+PsiMethodCallExpression:p.get(0) : java.lang.Object
+PsiParameter:p : java.util.ArrayList<?>
+PsiParameter:p2 : java.lang.Object
+PsiReferenceExpression:p : java.util.ArrayList<?>
+PsiReferenceExpression:p2 : java.lang.Object
+
+Conversions:
+p.get(0) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/test.java
new file mode 100644
index 000000000000..f10b5e2ae860
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<?> p, Object p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/before/test.java b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/before/test.java
new file mode 100644
index 000000000000..649da301cc82
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/consumerUnbounded/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<Number> p, Number p2) {
+ p2 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/Test.items
new file mode 100644
index 000000000000..1ac8dc86d9ca
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p.get(0) : java.lang.Number
+PsiParameter:p : java.lang.Integer[]
+PsiReferenceExpression:p : java.lang.Integer[]
+
+Conversions:
+p.get(0) -> $qualifier$[$i$] $qualifier$.get($i$) p.get(0)
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/test.java
new file mode 100644
index 000000000000..bfe5eb68baba
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ Number n = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/before/test.java
new file mode 100644
index 000000000000..bbddcc1a4d79
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToChildType/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Number> p) {
+ Number n = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/Test.items
new file mode 100644
index 000000000000..a4ea13d41b29
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:p : java.lang.Object[]
+PsiReferenceExpression:p : java.lang.Object[]
+
+Conversions:
+
+New expression type changes:
+Fails:
+p->java.lang.Object[]
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/test.java
new file mode 100644
index 000000000000..96208756fe87
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Object[] p) {
+ Number n = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/before/test.java
new file mode 100644
index 000000000000..bbddcc1a4d79
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToSuperType/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Number> p) {
+ Number n = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/Test.items
new file mode 100644
index 000000000000..a0fd8df506c4
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p.get(0) : java.lang.Number
+PsiParameter:p : java.lang.Number[]
+PsiReferenceExpression:p : java.lang.Number[]
+
+Conversions:
+p.get(0) -> $qualifier$[$i$] $qualifier$.get($i$) p.get(0)
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/test.java
new file mode 100644
index 000000000000..33a962b96171
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Number[] p) {
+ Number n = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/before/test.java
new file mode 100644
index 000000000000..bbddcc1a4d79
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getAssignmentExtendsToType/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Number> p) {
+ Number n = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getExtends/after/Test.items
new file mode 100644
index 000000000000..d68b720f5d5b
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getExtends/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiArrayAccessExpression:p[0] : java.lang.Integer
+PsiParameter:p : java.util.ArrayList<? extends java.lang.Integer>
+PsiReferenceExpression:p : java.util.ArrayList<? extends java.lang.Integer>
+
+Conversions:
+p[0] -> $qualifier$.get($idx$) $qualifier$[$idx$]
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/getExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getExtends/after/test.java
new file mode 100644
index 000000000000..529d4942a2ce
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getExtends/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Integer> p) {
+ Integer p1 = p.get(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getExtends/before/test.java
new file mode 100644
index 000000000000..685d78f23f3d
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getExtends/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ Integer p1 = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getSuper/after/Test.items
new file mode 100644
index 000000000000..5300a386dc23
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getSuper/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:p : java.util.ArrayList<? super java.lang.Integer>
+PsiReferenceExpression:p : java.util.ArrayList<? super java.lang.Integer>
+
+Conversions:
+
+New expression type changes:
+Fails:
+p[0]->java.util.ArrayList<? super java.lang.Integer>
diff --git a/java/typeMigration/testData/refactoring/wildcard/getSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getSuper/after/test.java
new file mode 100644
index 000000000000..eebb4c1f2dbb
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getSuper/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Integer> p) {
+ Integer p1 = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getSuper/before/test.java
new file mode 100644
index 000000000000..685d78f23f3d
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getSuper/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ Integer p1 = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/Test.items
new file mode 100644
index 000000000000..e2bbfc48b834
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:p : java.util.ArrayList<?>
+PsiReferenceExpression:p : java.util.ArrayList<?>
+
+Conversions:
+
+New expression type changes:
+Fails:
+p[0]->java.util.ArrayList<?>
diff --git a/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/test.java b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/test.java
new file mode 100644
index 000000000000..9ab43aa01dbe
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<?> p) {
+ Integer p1 = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/getUnbounded/before/test.java b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/before/test.java
new file mode 100644
index 000000000000..685d78f23f3d
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/getUnbounded/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ Integer p1 = p[0];
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/Test.items
new file mode 100644
index 000000000000..bf63b11ab5b2
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiParameter:p : java.util.ArrayList<?>
+PsiReferenceExpression:p : java.util.ArrayList<?>
+PsiReferenceExpression:p.length : int
+
+Conversions:
+p.length -> $qualifier$.size() $qualifier$.length
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/test.java b/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/test.java
new file mode 100644
index 000000000000..4f0770adbfb5
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/lengthSize/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<?> p) {
+ System.out.println(p.size());
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/lengthSize/before/test.java b/java/typeMigration/testData/refactoring/wildcard/lengthSize/before/test.java
new file mode 100644
index 000000000000..e8758383dd0a
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/lengthSize/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Integer[] p) {
+ System.out.println(p.length);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/Test.items
new file mode 100644
index 000000000000..fe9d55b37cda
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p.add(new Integer(8)) : boolean
+PsiParameter:p : java.util.Set<? super java.lang.Integer>
+PsiReferenceExpression:p : java.util.Set<? super java.lang.Integer>
+
+Conversions:
+p.add(new Integer(8)) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/test.java
new file mode 100644
index 000000000000..25825f1f78c0
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Set<? super Integer> p) {
+ p.add(new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/before/test.java
new file mode 100644
index 000000000000..d8cf544f6fde
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerCollectionChanged/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p) {
+ p.add(new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/Test.items
new file mode 100644
index 000000000000..8b996f4d00e1
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/Test.items
@@ -0,0 +1,11 @@
+Types:
+PsiMethodCallExpression:p.set(0, new Integer(8)) : java.lang.Number
+PsiParameter:p : java.util.ArrayList<? extends java.lang.Number>
+PsiReferenceExpression:p : java.util.ArrayList<? extends java.lang.Number>
+
+Conversions:
+p.set(0, new Integer(8)) -> $
+
+New expression type changes:
+Fails:
+new Integer(8)->? extends java.lang.Number
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/test.java
new file mode 100644
index 000000000000..f8f4f761d73a
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtends/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? extends Number> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtends/before/test.java
new file mode 100644
index 000000000000..b5e9a24ad373
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtends/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/Test.items
new file mode 100644
index 000000000000..88976428ea99
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/Test.items
@@ -0,0 +1,11 @@
+Types:
+PsiMethodCallExpression:p.add(new Integer(8)) : boolean
+PsiParameter:p : java.util.Set<? extends java.lang.Object>
+PsiReferenceExpression:p : java.util.Set<? extends java.lang.Object>
+
+Conversions:
+p.add(new Integer(8)) -> $
+
+New expression type changes:
+Fails:
+new Integer(8)->? extends java.lang.Object
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/test.java
new file mode 100644
index 000000000000..0c24d5791d14
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(Set<? extends Object> p) {
+ p.add(new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/before/test.java
new file mode 100644
index 000000000000..d8cf544f6fde
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsCollectionChanged/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p) {
+ p.add(new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/Test.items
new file mode 100644
index 000000000000..f2f5bb75a60f
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/Test.items
@@ -0,0 +1,11 @@
+Types:
+PsiMethodCallExpression:p1.add(p2) : boolean
+PsiParameter:p1 : java.util.List<? extends java.lang.Number>
+PsiReferenceExpression:p1 : java.util.List<? extends java.lang.Number>
+
+Conversions:
+p1.add(p2) -> $
+
+New expression type changes:
+Fails:
+p2->? extends java.lang.Number
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/test.java
new file mode 100644
index 000000000000..5d4d6fda25a2
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<? extends Number> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/before/test.java
new file mode 100644
index 000000000000..a2e2cb2ae329
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerExtendsFailToStopAtWildcard/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<Number> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/Test.items
new file mode 100644
index 000000000000..9d9b2e2a447f
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/Test.items
@@ -0,0 +1,11 @@
+Types:
+PsiMethodCallExpression:p1.add(p2) : boolean
+PsiParameter:p1 : java.util.List<? super java.lang.Integer>
+PsiReferenceExpression:p1 : java.util.List<? super java.lang.Integer>
+
+Conversions:
+p1.add(p2) -> $
+
+New expression type changes:
+Fails:
+p2->? super java.lang.Integer
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/test.java
new file mode 100644
index 000000000000..bbc30114137e
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<? super Integer> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/before/test.java
new file mode 100644
index 000000000000..a2e2cb2ae329
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerFailToStopAtWildcard/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<Number> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/Test.items
new file mode 100644
index 000000000000..2f3689b42ba5
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p1.add(p2) : boolean
+PsiParameter:p1 : java.util.List<? super java.lang.Number>
+PsiReferenceExpression:p1 : java.util.List<? super java.lang.Number>
+
+Conversions:
+p1.add(p2) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/test.java
new file mode 100644
index 000000000000..353f0432f59d
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<? super Number> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/before/test.java
new file mode 100644
index 000000000000..a2e2cb2ae329
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerStopAtWildcard/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<Number> p1, Number p2){
+ p1.add(p2);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/Test.items
new file mode 100644
index 000000000000..b0c91006b9d1
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:p.set(0, new Integer(8)) : java.lang.Object
+PsiParameter:p : java.util.ArrayList<? super java.lang.Integer>
+PsiReferenceExpression:p : java.util.ArrayList<? super java.lang.Integer>
+
+Conversions:
+p.set(0, new Integer(8)) -> $
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/test.java
new file mode 100644
index 000000000000..0769f09a7b7a
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerSuper/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Integer> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerSuper/before/test.java
new file mode 100644
index 000000000000..b5e9a24ad373
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerSuper/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/Test.items
new file mode 100644
index 000000000000..e2b8ee35fcd2
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/Test.items
@@ -0,0 +1,11 @@
+Types:
+PsiMethodCallExpression:p.set(0, new Integer(8)) : java.lang.Object
+PsiParameter:p : java.util.ArrayList<?>
+PsiReferenceExpression:p : java.util.ArrayList<?>
+
+Conversions:
+p.set(0, new Integer(8)) -> $
+
+New expression type changes:
+Fails:
+new Integer(8)->?
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/test.java b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/test.java
new file mode 100644
index 000000000000..37a2f8fcac83
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<?> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/before/test.java b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/before/test.java
new file mode 100644
index 000000000000..b5e9a24ad373
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/producerUnbounded/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ArrayList<? super Number> p) {
+ p.set(0, new Integer(8));
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/Test.items
new file mode 100644
index 000000000000..7ae170499472
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:l.substring(0) : java.lang.String
+PsiParameter:l : java.lang.ThreadLocal<? extends java.lang.String>
+PsiReferenceExpression:l : java.lang.ThreadLocal<? extends java.lang.String>
+
+Conversions:
+l.substring(0) -> $qualifier$.get() $qualifier$ l
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/test.java
new file mode 100644
index 000000000000..5275db851a70
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/after/test.java
@@ -0,0 +1,5 @@
+class Test {
+ void method(ThreadLocal<? extends String> l) {
+ l.get().substring(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/before/test.java
new file mode 100644
index 000000000000..8805129f7191
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerExtends/before/test.java
@@ -0,0 +1,5 @@
+class Test {
+ void method(String l) {
+ l.substring(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/Test.items
new file mode 100644
index 000000000000..d05d101463c7
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:l : java.lang.ThreadLocal<? super java.lang.String>
+PsiReferenceExpression:l : java.lang.ThreadLocal<? super java.lang.String>
+
+Conversions:
+
+New expression type changes:
+Fails:
+l->java.lang.ThreadLocal<? super java.lang.String>
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/test.java
new file mode 100644
index 000000000000..beb0d0ebef46
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/after/test.java
@@ -0,0 +1,5 @@
+class Test {
+ void method(ThreadLocal<? super String> l) {
+ l.substring(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/before/test.java
new file mode 100644
index 000000000000..8805129f7191
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalConsumerSuper/before/test.java
@@ -0,0 +1,5 @@
+class Test {
+ void method(String l) {
+ l.substring(0);
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/Test.items
new file mode 100644
index 000000000000..47a89e441962
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/Test.items
@@ -0,0 +1,9 @@
+Types:
+PsiParameter:l : java.lang.ThreadLocal<java.util.List<? extends java.lang.String>>
+PsiReferenceExpression:l : java.lang.ThreadLocal<java.util.List<? extends java.lang.String>>
+
+Conversions:
+
+New expression type changes:
+Fails:
+l->java.lang.ThreadLocal<java.util.List<? extends java.lang.String>>
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/test.java
new file mode 100644
index 000000000000..93724be5c0dd
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ThreadLocal<List<? extends String>> l) {
+ l.add("");
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/before/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/before/test.java
new file mode 100644
index 000000000000..8df669c77899
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerExtends/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<String> l) {
+ l.add("");
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/Test.items b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/Test.items
new file mode 100644
index 000000000000..736189db2585
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/Test.items
@@ -0,0 +1,10 @@
+Types:
+PsiMethodCallExpression:l.add("") : boolean
+PsiParameter:l : java.lang.ThreadLocal<java.util.List<? super java.lang.String>>
+PsiReferenceExpression:l : java.lang.ThreadLocal<java.util.List<? super java.lang.String>>
+
+Conversions:
+l.add("") -> $qualifier$.get() $qualifier$ l
+
+New expression type changes:
+Fails:
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/test.java
new file mode 100644
index 000000000000..fb3b568ca1b0
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/after/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(ThreadLocal<List<? super String>> l) {
+ l.get().add("");
+ }
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/before/test.java b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/before/test.java
new file mode 100644
index 000000000000..8df669c77899
--- /dev/null
+++ b/java/typeMigration/testData/refactoring/wildcard/threadLocalProducerSuper/before/test.java
@@ -0,0 +1,7 @@
+import java.util.*;
+
+class Test {
+ void method(List<String> l) {
+ l.add("");
+ }
+} \ No newline at end of file