diff options
Diffstat (limited to 'java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/ElementToArrayConversionRule.java')
-rw-r--r-- | java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/ElementToArrayConversionRule.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/ElementToArrayConversionRule.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/ElementToArrayConversionRule.java new file mode 100644 index 000000000000..0d25df778bcc --- /dev/null +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/ElementToArrayConversionRule.java @@ -0,0 +1,36 @@ +/* + * User: anna + * Date: 25-Aug-2008 + */ +package com.intellij.refactoring.typeMigration.rules; + +import com.intellij.psi.*; +import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.refactoring.typeMigration.TypeConversionDescriptor; +import com.intellij.refactoring.typeMigration.TypeConversionDescriptorBase; +import com.intellij.refactoring.typeMigration.TypeMigrationLabeler; + +public class ElementToArrayConversionRule extends TypeConversionRule{ + public TypeConversionDescriptorBase findConversion(final PsiType from, final PsiType to, final PsiMember member, final PsiExpression context, + final TypeMigrationLabeler labeler) { + if (member == null && to instanceof PsiArrayType && TypeConversionUtil.isAssignable(((PsiArrayType)to).getComponentType(), from)) { + TypeConversionDescriptor wrapDescription = + new TypeConversionDescriptor("$qualifier$", "new " + from.getCanonicalText() + "[]{$qualifier$}", context); + if (((PsiArrayType)to).getComponentType() instanceof PsiClassType && from instanceof PsiPrimitiveType) { + final String boxedTypeName = ((PsiPrimitiveType)from).getBoxedTypeName(); + final String normalizedArrayInitializer = + PsiUtil.isLanguageLevel5OrHigher(context) ? "$qualifier$" : boxedTypeName + ".valueOf($qualifier$)"; + wrapDescription = new TypeConversionDescriptor("$qualifier$", "new " + boxedTypeName + "[]{" + normalizedArrayInitializer + "}", context); + } + final PsiElement parent = context.getParent(); + if ((context instanceof PsiLiteralExpression || context instanceof PsiReferenceExpression) && parent instanceof PsiStatement) { + return wrapDescription; + } + if (parent instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)parent).getRExpression() == context) { + return wrapDescription; + } + } + return null; + } +}
\ No newline at end of file |