mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
introduce variable: remove redundant type cast (IDEA-153665)
This commit is contained in:
+1
-1
@@ -713,7 +713,7 @@ public abstract class BaseExpressionToFieldHandler extends IntroduceHandlerBase
|
||||
}
|
||||
|
||||
final SmartTypePointer type = SmartTypePointerManager.getInstance(myProject).createSmartTypePointer(myType);
|
||||
initializer = IntroduceVariableBase.replaceExplicitWithDiamondWhenApplicable(initializer, myType);
|
||||
initializer = IntroduceVariableBase.simplifyVariableInitializer(initializer, myType);
|
||||
|
||||
final PsiMethod enclosingConstructor = getEnclosingConstructor(myParentClass, myAnchorElement);
|
||||
PsiClass destClass = mySettings.getDestinationClass() == null ? myParentClass : mySettings.getDestinationClass();
|
||||
|
||||
+26
-20
@@ -881,13 +881,7 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase {
|
||||
PsiExpression initializer = RefactoringUtil.unparenthesizeExpression(expr1);
|
||||
final SmartTypePointer selectedType = SmartTypePointerManager.getInstance(project).createSmartTypePointer(
|
||||
settings.getSelectedType());
|
||||
if (expr1 instanceof PsiNewExpression) {
|
||||
final PsiNewExpression newExpression = (PsiNewExpression)expr1;
|
||||
if (newExpression.getArrayInitializer() != null) {
|
||||
initializer = newExpression.getArrayInitializer();
|
||||
}
|
||||
initializer = replaceExplicitWithDiamondWhenApplicable(initializer, selectedType.getType());
|
||||
}
|
||||
initializer = simplifyVariableInitializer(initializer, selectedType.getType());
|
||||
|
||||
PsiDeclarationStatement declaration = JavaPsiFacade.getInstance(project).getElementFactory()
|
||||
.createVariableDeclarationStatement(settings.getEnteredName(), selectedType.getType(), initializer, container);
|
||||
@@ -991,20 +985,32 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static PsiExpression replaceExplicitWithDiamondWhenApplicable(final PsiExpression initializer,
|
||||
final PsiType expectedType) {
|
||||
if (initializer instanceof PsiNewExpression) {
|
||||
public static PsiExpression simplifyVariableInitializer(final PsiExpression initializer,
|
||||
final PsiType expectedType) {
|
||||
|
||||
if (initializer instanceof PsiTypeCastExpression) {
|
||||
PsiTypeElement castType = ((PsiTypeCastExpression)initializer).getCastType();
|
||||
if (castType != null && TypeConversionUtil.isAssignable(expectedType, castType.getType())) {
|
||||
return ((PsiTypeCastExpression)initializer).getOperand();
|
||||
}
|
||||
}
|
||||
else if (initializer instanceof PsiNewExpression) {
|
||||
final PsiNewExpression newExpression = (PsiNewExpression)initializer;
|
||||
final PsiExpression tryToDetectDiamondNewExpr = ((PsiVariable)JavaPsiFacade.getElementFactory(initializer.getProject())
|
||||
.createVariableDeclarationStatement("x", expectedType, initializer, initializer).getDeclaredElements()[0])
|
||||
.getInitializer();
|
||||
if (tryToDetectDiamondNewExpr instanceof PsiNewExpression &&
|
||||
PsiDiamondTypeUtil.canCollapseToDiamond((PsiNewExpression)tryToDetectDiamondNewExpr,
|
||||
(PsiNewExpression)tryToDetectDiamondNewExpr,
|
||||
expectedType)) {
|
||||
final PsiElement paramList = PsiDiamondTypeUtil
|
||||
.replaceExplicitWithDiamond(newExpression.getClassOrAnonymousClassReference().getParameterList());
|
||||
return PsiTreeUtil.getParentOfType(paramList, PsiNewExpression.class);
|
||||
if (newExpression.getArrayInitializer() != null) {
|
||||
return newExpression.getArrayInitializer();
|
||||
}
|
||||
else {
|
||||
final PsiExpression tryToDetectDiamondNewExpr = ((PsiVariable)JavaPsiFacade.getElementFactory(initializer.getProject())
|
||||
.createVariableDeclarationStatement("x", expectedType, initializer, initializer).getDeclaredElements()[0])
|
||||
.getInitializer();
|
||||
if (tryToDetectDiamondNewExpr instanceof PsiNewExpression &&
|
||||
PsiDiamondTypeUtil.canCollapseToDiamond((PsiNewExpression)tryToDetectDiamondNewExpr,
|
||||
(PsiNewExpression)tryToDetectDiamondNewExpr,
|
||||
expectedType)) {
|
||||
final PsiElement paramList = PsiDiamondTypeUtil
|
||||
.replaceExplicitWithDiamond(newExpression.getClassOrAnonymousClassReference().getParameterList());
|
||||
return PsiTreeUtil.getParentOfType(paramList, PsiNewExpression.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
return initializer;
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
public class Introduce {
|
||||
void foo(String str) {
|
||||
final String s = (String) str;
|
||||
final String s = str;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user