mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
insert instance of|cast when condition contains intersection with instanceof (IDEA-64776)
This commit is contained in:
@@ -119,18 +119,40 @@ public class CreateLocalVarFromInstanceofAction extends BaseIntentionAction {
|
||||
}
|
||||
PsiStatement statement = PsiTreeUtil.getParentOfType(element, PsiIfStatement.class, PsiWhileStatement.class);
|
||||
if (statement instanceof PsiIfStatement) {
|
||||
PsiExpression condition = ((PsiIfStatement)statement).getCondition();
|
||||
if (condition instanceof PsiInstanceOfExpression) {
|
||||
if (atSameLine(condition, editor) || insideEmptyBlockOfStatement(statement, element)) {
|
||||
return (PsiInstanceOfExpression)condition;
|
||||
}
|
||||
}
|
||||
final PsiExpression condition = ((PsiIfStatement)statement).getCondition();
|
||||
return retrieveInstanceOfFromCondition(editor, element, statement, condition);
|
||||
}
|
||||
else if (statement instanceof PsiWhileStatement) {
|
||||
PsiExpression condition = ((PsiWhileStatement)statement).getCondition();
|
||||
if (condition instanceof PsiInstanceOfExpression) {
|
||||
if (atSameLine(condition, editor) || insideEmptyBlockOfStatement(statement, element)) {
|
||||
return (PsiInstanceOfExpression)condition;
|
||||
final PsiExpression condition = ((PsiWhileStatement)statement).getCondition();
|
||||
return retrieveInstanceOfFromCondition(editor, element, statement, condition);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiInstanceOfExpression retrieveInstanceOfFromCondition(Editor editor,
|
||||
PsiElement element,
|
||||
PsiStatement statement,
|
||||
PsiExpression condition) {
|
||||
if (condition instanceof PsiInstanceOfExpression) {
|
||||
if (atSameLine(condition, editor) || insideEmptyBlockOfStatement(statement, element)) {
|
||||
return (PsiInstanceOfExpression)condition;
|
||||
}
|
||||
} else if (condition instanceof PsiPolyadicExpression) {
|
||||
final PsiExpression[] operands = ((PsiPolyadicExpression)condition).getOperands();
|
||||
if (((PsiPolyadicExpression)condition).getOperationTokenType() == JavaTokenType.ANDAND) {
|
||||
PsiInstanceOfExpression expr = null;
|
||||
for (PsiExpression operand : operands) {
|
||||
if (operand instanceof PsiInstanceOfExpression) {
|
||||
if (expr != null) {
|
||||
expr = null;
|
||||
break;
|
||||
}
|
||||
expr = (PsiInstanceOfExpression)operand;
|
||||
}
|
||||
}
|
||||
if (expr != null && insideEmptyBlockOfStatement(statement, element)) {
|
||||
return expr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Insert '(String)o' declaration" "true"
|
||||
class C {
|
||||
void f(Object o, Object f) {
|
||||
if (o instanceof String && f == null) {
|
||||
String s = (String) o;
|
||||
<caret>
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Insert '(String)o' declaration" "true"
|
||||
class C {
|
||||
void f(Object o, Object f) {
|
||||
if (o instanceof String && f == null) {
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Insert '(String)o' declaration" "false"
|
||||
class C {
|
||||
void f(Object o, Object f) {
|
||||
if (o instanceof String || f == null) {
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Insert '(String)o' declaration" "false"
|
||||
class C {
|
||||
void f(Object o, Object f) {
|
||||
if (o instanceof String && f instanceof String) {
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user