CreateLocalVarFromInstanceofAction: use EquivalenceChecker which is more robust (in particular against parentheses)

This commit is contained in:
Tagir Valeev
2018-07-05 17:58:53 +07:00
parent 79ab032b1b
commit c3778b8706
2 changed files with 11 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ import com.intellij.refactoring.JavaRefactoringSettings;
import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.siyeh.ig.psiutils.EquivalenceChecker;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -105,7 +106,8 @@ public class CreateLocalVarFromInstanceofAction extends BaseIntentionAction {
final PsiTypeCastExpression typeCastExpression = (PsiTypeCastExpression)initializer;
final PsiExpression operand = typeCastExpression.getOperand();
if (operand != null && !PsiEquivalenceUtil.areElementsEquivalent(operand, instanceOfExpression.getOperand())) continue;
if (operand != null &&
!EquivalenceChecker.getCanonicalPsiEquivalence().expressionsAreEquivalent(operand, instanceOfExpression.getOperand())) continue;
PsiTypeElement castTypeElement = typeCastExpression.getCastType();
if (castTypeElement == null) continue;
PsiType castType = castTypeElement.getType();

View File

@@ -0,0 +1,8 @@
// "Insert '(Runnable)this' declaration" "false"
class C {
void f() {
if ((this) instanceof Runnable<caret>) {
Object o = (Runnable)this;
}
}
}