mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
java: disable heavy weight add type cast for lambda bodies with failed inference on top
for long chained calls with many type errors, DFA checks may be too slow GitOrigin-RevId: 851604a1252743c92d8c33973845cdda7bbb996a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b2e0f2a958
commit
c1b79848e1
+15
@@ -28,6 +28,8 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.infos.MethodCandidateInfo;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiTypesUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -138,6 +140,19 @@ public class AddTypeCastFix extends LocalQuickFixAndIntentionActionOnPsiElement
|
||||
TextRange fixRange) {
|
||||
String referenceName = ref.getReferenceName();
|
||||
if (referenceName == null) return;
|
||||
if (qualifier instanceof PsiReferenceExpression) {
|
||||
PsiElement resolve = ((PsiReferenceExpression)qualifier).resolve();
|
||||
if (resolve == null) return;
|
||||
if (resolve instanceof PsiParameter && ((PsiParameter)resolve).getTypeElement() == null) {
|
||||
PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(resolve, PsiMethodCallExpression.class);
|
||||
if (callExpression != null) {
|
||||
JavaResolveResult result = callExpression.resolveMethodGenerics();
|
||||
if (result instanceof MethodCandidateInfo && ((MethodCandidateInfo)result).getInferenceErrorMessage() != null) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
PsiElement gParent = ref.getParent();
|
||||
List<PsiType> conjuncts = GuessManager.getInstance(qualifier.getProject()).getControlFlowExpressionTypeConjuncts(qualifier);
|
||||
for (PsiType conjunct : conjuncts) {
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// "Cast qualifier to 'java.lang.String'" "false"
|
||||
class A {
|
||||
interface I<T> {
|
||||
void m(T t);
|
||||
}
|
||||
|
||||
void method() {
|
||||
CharSequence cs = "";
|
||||
int p = foo(s -> {
|
||||
if (s instanceof String) {
|
||||
s.subs<caret>tring(1);
|
||||
}
|
||||
}, cs);
|
||||
}
|
||||
|
||||
<K> K foo(I<K> i, K k) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user