mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
convert to atomic/thread local: array initializer aware (IDEA-128625)
This commit is contained in:
+8
-2
@@ -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);
|
||||
}
|
||||
|
||||
+7
-1
@@ -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);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import java.util.concurrent.atomic.AtomicReferenceArray;
|
||||
|
||||
// "Convert to atomic" "true"
|
||||
class Test {
|
||||
final AtomicReferenceArray<String> field= new AtomicReferenceArray<>(new String[]{});
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Convert to atomic" "true"
|
||||
class Test {
|
||||
String[] <caret>field={};
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// "Convert to ThreadLocal" "true"
|
||||
class Test {
|
||||
final ThreadLocal<String[]> field = new ThreadLocal<String[]>() {
|
||||
@Override
|
||||
protected String[] initialValue() {
|
||||
return new String[]{};
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// "Convert to ThreadLocal" "true"
|
||||
class Test {
|
||||
String[] <caret>field={};
|
||||
}
|
||||
Reference in New Issue
Block a user