package com.intellij.refactoring.typeMigration.rules; import com.intellij.openapi.util.Comparing; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.typeMigration.TypeConversionDescriptor; import com.intellij.refactoring.typeMigration.TypeConversionDescriptorBase; import com.intellij.refactoring.typeMigration.TypeMigrationLabeler; public class BoxingTypeConversionRule extends TypeConversionRule { public TypeConversionDescriptorBase findConversion(final PsiType from, final PsiType to, final PsiMember member, final PsiExpression context, final TypeMigrationLabeler labeler) { if (to instanceof PsiClassType && from instanceof PsiPrimitiveType) { if (!PsiUtil.isLanguageLevel5OrHigher(context)) { final String boxedTypeName = ((PsiPrimitiveType)from).getBoxedTypeName(); if (Comparing.strEqual(boxedTypeName, to.getCanonicalText())) { return new TypeConversionDescriptor("$qualifier$", boxedTypeName + ".valueOf($qualifier$)"); } } } else if (from instanceof PsiClassType && to instanceof PsiPrimitiveType) { if (!PsiUtil.isLanguageLevel5OrHigher(context)) { final String boxedTypeName = ((PsiPrimitiveType)to).getBoxedTypeName(); if (Comparing.strEqual(boxedTypeName, from.getCanonicalText())) { return new TypeConversionDescriptor("$qualifier$", "($qualifier$)." + to.getCanonicalText() + "Value()"); } } } return null; } }