diff --git a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java index 704b8f5a3c1b..866bc0a8fff1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java @@ -11,7 +11,6 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.NullableComputable; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; @@ -47,9 +46,6 @@ public class ExpectedTypesProvider { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.ExpectedTypesProvider"); - private ExpectedTypesProvider() { - } - public static ExpectedTypesProvider getInstance(@NotNull Project project) { return ServiceManager.getService(project, ExpectedTypesProvider.class); } @@ -629,7 +625,7 @@ public class ExpectedTypesProvider { if (parent instanceof PsiMethodCallExpression) { PsiMethodCallExpression methodCall = (PsiMethodCallExpression)parent; CandidateInfo[] candidates = helper.getReferencedMethodCandidates(methodCall, false, true); - Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates, list, myExpr, myForCompletion, methodCall.resolveMethod())); + Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates, list, myExpr, myForCompletion)); } else if (parent instanceof PsiEnumConstant) { getExpectedArgumentsTypesForEnumConstant((PsiEnumConstant)parent, list); @@ -659,7 +655,7 @@ public class ExpectedTypesProvider { final PsiClass aClass = enumConstant.getContainingClass(); if (aClass != null) { LOG.assertTrue(aClass.isEnum()); - getExpectedTypesForConstructorCall(aClass, list, PsiSubstitutor.EMPTY, enumConstant.resolveMethod()); + getExpectedTypesForConstructorCall(aClass, list, PsiSubstitutor.EMPTY); } } @@ -669,8 +665,7 @@ public class ExpectedTypesProvider { final List candidates = PsiDiamondTypeImpl.collectStaticFactories(newExpr); if (candidates != null) { final PsiExpressionList argumentList = Objects.requireNonNull(newExpr.getArgumentList()); - Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates.toArray(CandidateInfo.EMPTY_ARRAY), argumentList, myExpr, myForCompletion, - newExpr.resolveMethod())); + Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates.toArray(CandidateInfo.EMPTY_ARRAY), argumentList, myExpr, myForCompletion)); } return; } @@ -691,19 +686,19 @@ public class ExpectedTypesProvider { else { return; } - getExpectedTypesForConstructorCall(newClass, list, substitutor, newExpr.resolveMethod()); + getExpectedTypesForConstructorCall(newClass, list, substitutor); } } - private void getExpectedTypesForConstructorCall(@NotNull final PsiClass referencedClass, - @NotNull final PsiExpressionList argumentList, - @NotNull PsiSubstitutor substitutor, PsiMethod method) { + private void getExpectedTypesForConstructorCall(@NotNull PsiClass referencedClass, + @NotNull PsiExpressionList argumentList, + @NotNull PsiSubstitutor substitutor) { List array = new ArrayList<>(); for (PsiMethod constructor : referencedClass.getConstructors()) { array.add(new MethodCandidateInfo(constructor, substitutor, false, false, argumentList, null, argumentList.getExpressionTypes(), null)); } CandidateInfo[] candidates = array.toArray(CandidateInfo.EMPTY_ARRAY); - Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates, argumentList, myExpr, myForCompletion, method)); + Collections.addAll(myResult, getExpectedArgumentTypesForMethodCall(candidates, argumentList, myExpr, myForCompletion)); } @Override @@ -1010,8 +1005,7 @@ public class ExpectedTypesProvider { private ExpectedTypeInfo[] getExpectedArgumentTypesForMethodCall(@NotNull CandidateInfo[] allCandidates, @NotNull PsiExpressionList argumentList, @NotNull PsiExpression argument, - boolean forCompletion, - @Nullable PsiMethod targetMethod) { + boolean forCompletion) { if (allCandidates.length == 0) { return ExpectedTypeInfo.EMPTY_ARRAY; } @@ -1033,7 +1027,6 @@ public class ExpectedTypesProvider { } if (methodCandidates.isEmpty()) { Collections.addAll(methodCandidates, allCandidates); - methodCandidates.remove(toExclude); } final PsiExpression[] args = argumentList.getExpressions().clone(); @@ -1059,9 +1052,8 @@ public class ExpectedTypesProvider { PsiMethod method = (PsiMethod)candidateInfo.getElement(); PsiSubstitutor substitutor; if (candidateInfo instanceof MethodCandidateInfo) { - final MethodCandidateInfo info = (MethodCandidateInfo)candidateInfo; - Computable computable = () -> info.inferSubstitutorFromArgs(policy, args); - substitutor = computable.compute(); + MethodCandidateInfo info = (MethodCandidateInfo)candidateInfo; + substitutor = info.inferSubstitutorFromArgs(policy, args); if (!info.isStaticsScopeCorrect() && !method.hasModifierProperty(PsiModifier.STATIC) || info.getInferenceErrorMessage() != null) continue; } else { @@ -1074,8 +1066,7 @@ public class ExpectedTypesProvider { if (set.size() >= myMaxCandidates) break; if (leftArgs != null && candidateInfo instanceof MethodCandidateInfo) { - Computable computable = () -> ((MethodCandidateInfo)candidateInfo).inferSubstitutorFromArgs(policy, leftArgs); - substitutor = computable.compute(); + substitutor = ((MethodCandidateInfo)candidateInfo).inferSubstitutorFromArgs(policy, leftArgs); if (substitutor != null) { inferMethodCallArgumentTypes(argument, forCompletion, leftArgs, index, method, substitutor, set); if (set.size() >= myMaxCandidates) break; @@ -1289,7 +1280,7 @@ public class ExpectedTypesProvider { } final PsiManager manager = methodCallExpr.getManager(); final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject()); - Set psiMethods = mapToDeepestSuperMethods(myClassProvider.findDeclaredMethods(manager, reference.getReferenceName())); + Set psiMethods = mapToDeepestSuperMethods(myClassProvider.findDeclaredMethods(manager, Objects.requireNonNull(reference.getReferenceName()))); Set types = new THashSet<>(); for (PsiMethod method : psiMethods) { final PsiClass aClass = method.getContainingClass(); @@ -1332,7 +1323,7 @@ public class ExpectedTypesProvider { @NotNull private ExpectedTypeInfo[] findClassesWithDeclaredField(@NotNull PsiReferenceExpression expression) { final JavaPsiFacade facade = JavaPsiFacade.getInstance(expression.getProject()); - PsiField[] fields = myClassProvider.findDeclaredFields(expression.getManager(), expression.getReferenceName()); + PsiField[] fields = myClassProvider.findDeclaredFields(expression.getManager(), Objects.requireNonNull(expression.getReferenceName())); List types = new ArrayList<>(); for (PsiField field : fields) { final PsiClass aClass = field.getContainingClass();