fix: find key expression recursively
This commit is contained in:
@@ -382,11 +382,16 @@ public class CandidateResolver {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private JetExpression getDeferredComputationKeyExpression(@NotNull JetExpression expression) {
|
private JetExpression getDeferredComputationKeyExpression(@NotNull JetExpression expression) {
|
||||||
JetVisitor<JetExpression, Void> selectorExpressionFinder = new JetVisitor<JetExpression, Void>() {
|
return expression.accept(new JetVisitor<JetExpression, Void>() {
|
||||||
|
@Nullable
|
||||||
|
private JetExpression visitInnerExpression(@Nullable JetElement expression) {
|
||||||
|
if (expression == null) return null;
|
||||||
|
return expression.accept(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetExpression visitQualifiedExpression(JetQualifiedExpression expression, Void data) {
|
public JetExpression visitQualifiedExpression(JetQualifiedExpression expression, Void data) {
|
||||||
JetExpression selector = expression.getSelectorExpression();
|
return visitInnerExpression(expression.getSelectorExpression());
|
||||||
return selector != null ? selector.accept(this, null) : null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -396,20 +401,19 @@ public class CandidateResolver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetExpression visitParenthesizedExpression(JetParenthesizedExpression expression, Void data) {
|
public JetExpression visitParenthesizedExpression(JetParenthesizedExpression expression, Void data) {
|
||||||
return expression.getExpression();
|
return visitInnerExpression(expression.getExpression());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetExpression visitPrefixExpression(JetPrefixExpression expression, Void data) {
|
public JetExpression visitPrefixExpression(JetPrefixExpression expression, Void data) {
|
||||||
JetExpression baseExpression = JetPsiUtil.getBaseExpressionIfLabeledExpression(expression);
|
return visitInnerExpression(JetPsiUtil.getBaseExpressionIfLabeledExpression(expression));
|
||||||
return baseExpression != null ? baseExpression : expression;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetExpression visitBlockExpression(JetBlockExpression expression, Void data) {
|
public JetExpression visitBlockExpression(JetBlockExpression expression, Void data) {
|
||||||
JetElement lastStatement = JetPsiUtil.getLastStatementInABlock(expression);
|
JetElement lastStatement = JetPsiUtil.getLastStatementInABlock(expression);
|
||||||
if (lastStatement != null) {
|
if (lastStatement != null) {
|
||||||
return lastStatement.accept(this, data);
|
return visitInnerExpression(lastStatement);
|
||||||
}
|
}
|
||||||
return expression;
|
return expression;
|
||||||
}
|
}
|
||||||
@@ -418,8 +422,7 @@ public class CandidateResolver {
|
|||||||
public JetExpression visitBinaryExpression(JetBinaryExpression expression, Void data) {
|
public JetExpression visitBinaryExpression(JetBinaryExpression expression, Void data) {
|
||||||
return ExpressionTypingUtils.isBinaryExpressionDependentOnExpectedType(expression) ? expression : null;
|
return ExpressionTypingUtils.isBinaryExpressionDependentOnExpectedType(expression) ? expression : null;
|
||||||
}
|
}
|
||||||
};
|
}, null);
|
||||||
return expression.accept(selectorExpressionFinder, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isFairSafeCallExpression(@NotNull JetExpression expression, @NotNull BindingTrace trace) {
|
private boolean isFairSafeCallExpression(@NotNull JetExpression expression, @NotNull BindingTrace trace) {
|
||||||
|
|||||||
Reference in New Issue
Block a user