summaryrefslogtreecommitdiff
path: root/java/typeMigration
diff options
context:
space:
mode:
Diffstat (limited to 'java/typeMigration')
-rw-r--r--java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java10
-rw-r--r--java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToThreadLocalIntention.java8
-rw-r--r--java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java7
-rw-r--r--java/typeMigration/testData/intentions/atomic/afterArrayInitializer.java6
-rw-r--r--java/typeMigration/testData/intentions/atomic/beforeArrayInitializer.java4
-rw-r--r--java/typeMigration/testData/intentions/threadLocal/afterArrayInitializer.java9
-rw-r--r--java/typeMigration/testData/intentions/threadLocal/beforeArrayInitializer.java4
7 files changed, 45 insertions, 3 deletions
diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java
index e983453a11c6..430f2182e516 100644
--- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java
+++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToAtomicIntention.java
@@ -19,6 +19,7 @@ import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.refactoring.typeMigration.TypeConversionDescriptor;
import com.intellij.refactoring.typeMigration.TypeMigrationReplacementUtil;
import com.intellij.refactoring.typeMigration.rules.AtomicConversionRule;
+import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
import com.intellij.util.containers.ContainerUtil;
@@ -180,9 +181,14 @@ public class ConvertFieldToAtomicIntention extends PsiElementBaseIntentionAction
}
}
- final PsiExpression initializer = psiVariable.getInitializer();
+ PsiExpression initializer = psiVariable.getInitializer();
if (initializer != null) {
- final TypeConversionDescriptor directConversion = AtomicConversionRule.wrapWithNewExpression(toType, fromType, null, element);
+ if (initializer instanceof PsiArrayInitializerExpression) {
+ PsiExpression normalizedExpr =
+ RefactoringUtil.createNewExpressionFromArrayInitializer((PsiArrayInitializerExpression)initializer, psiVariable.getType());
+ initializer = (PsiExpression)initializer.replace(normalizedExpr);
+ }
+ final TypeConversionDescriptor directConversion = AtomicConversionRule.wrapWithNewExpression(toType, fromType, initializer, element);
if (directConversion != null) {
TypeMigrationReplacementUtil.replaceExpression(initializer, project, directConversion);
}
diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToThreadLocalIntention.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToThreadLocalIntention.java
index 38ff0ef466ae..8bdce8435be8 100644
--- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToThreadLocalIntention.java
+++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/intentions/ConvertFieldToThreadLocalIntention.java
@@ -25,6 +25,7 @@ import com.intellij.refactoring.typeMigration.TypeMigrationLabeler;
import com.intellij.refactoring.typeMigration.TypeMigrationReplacementUtil;
import com.intellij.refactoring.typeMigration.TypeMigrationRules;
import com.intellij.refactoring.typeMigration.rules.ThreadLocalConversionRule;
+import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.Query;
import com.intellij.util.containers.ContainerUtil;
@@ -116,8 +117,13 @@ public class ConvertFieldToThreadLocalIntention extends PsiElementBaseIntentionA
}
}
- final PsiExpression initializer = psiField.getInitializer();
+ PsiExpression initializer = psiField.getInitializer();
if (initializer != null) {
+ if (initializer instanceof PsiArrayInitializerExpression) {
+ PsiExpression normalizedExpr =
+ RefactoringUtil.createNewExpressionFromArrayInitializer((PsiArrayInitializerExpression)initializer, psiField.getType());
+ initializer = (PsiExpression)initializer.replace(normalizedExpr);
+ }
final TypeConversionDescriptor conversion = ThreadLocalConversionRule.wrapWithNewExpression(toType, fromType, initializer);
TypeMigrationReplacementUtil.replaceExpression(initializer, project, conversion);
CodeStyleManager.getInstance(project).reformat(psiField);
diff --git a/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java b/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java
index b3c36dca19f2..7cf1de7b16bc 100644
--- a/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java
+++ b/java/typeMigration/test/com/intellij/refactoring/TypeMigrationTest.java
@@ -28,6 +28,13 @@ public class TypeMigrationTest extends TypeMigrationTestBase {
myFactory = myJavaFacade.getElementFactory();
}
+ @Override
+ public void tearDown() throws Exception {
+ myFactory = null;
+
+ super.tearDown();
+ }
+
public void testT07() {
doTestFieldType("f",
PsiType.INT.createArrayType(),
diff --git a/java/typeMigration/testData/intentions/atomic/afterArrayInitializer.java b/java/typeMigration/testData/intentions/atomic/afterArrayInitializer.java
new file mode 100644
index 000000000000..f2b51fa36440
--- /dev/null
+++ b/java/typeMigration/testData/intentions/atomic/afterArrayInitializer.java
@@ -0,0 +1,6 @@
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+// "Convert to atomic" "true"
+class Test {
+ final AtomicReferenceArray<String> field= new AtomicReferenceArray<>(new String[]{});
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/intentions/atomic/beforeArrayInitializer.java b/java/typeMigration/testData/intentions/atomic/beforeArrayInitializer.java
new file mode 100644
index 000000000000..6ef272b130e7
--- /dev/null
+++ b/java/typeMigration/testData/intentions/atomic/beforeArrayInitializer.java
@@ -0,0 +1,4 @@
+// "Convert to atomic" "true"
+class Test {
+ String[] <caret>field={};
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/intentions/threadLocal/afterArrayInitializer.java b/java/typeMigration/testData/intentions/threadLocal/afterArrayInitializer.java
new file mode 100644
index 000000000000..59323f18e0e5
--- /dev/null
+++ b/java/typeMigration/testData/intentions/threadLocal/afterArrayInitializer.java
@@ -0,0 +1,9 @@
+// "Convert to ThreadLocal" "true"
+class Test {
+ final ThreadLocal<String[]> field = new ThreadLocal<String[]>() {
+ @Override
+ protected String[] initialValue() {
+ return new String[]{};
+ }
+ };
+} \ No newline at end of file
diff --git a/java/typeMigration/testData/intentions/threadLocal/beforeArrayInitializer.java b/java/typeMigration/testData/intentions/threadLocal/beforeArrayInitializer.java
new file mode 100644
index 000000000000..c2564a9cf266
--- /dev/null
+++ b/java/typeMigration/testData/intentions/threadLocal/beforeArrayInitializer.java
@@ -0,0 +1,4 @@
+// "Convert to ThreadLocal" "true"
+class Test {
+ String[] <caret>field={};
+} \ No newline at end of file