redundant lambda param types: take site subst into account

This commit is contained in:
Anna Kozlova
2014-02-25 22:03:27 +01:00
parent 994eb2c467
commit e967a04b4b
4 changed files with 31 additions and 2 deletions
@@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.DefaultParameterTypeInferencePolicy;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.Function;
@@ -64,7 +65,8 @@ public class RedundantLambdaParameterTypeIntention extends PsiElementBaseIntenti
if (lambdaParent instanceof PsiExpressionList) {
final PsiElement gParent = lambdaParent.getParent();
if (gParent instanceof PsiCallExpression && ((PsiCallExpression)gParent).getTypeArguments().length == 0) {
final PsiMethod method = ((PsiCallExpression)gParent).resolveMethod();
final JavaResolveResult resolveResult = ((PsiCallExpression)gParent).resolveMethodGenerics();
final PsiMethod method = (PsiMethod)resolveResult.getElement();
if (method == null) return false;
final int idx = LambdaUtil.getLambdaIdx((PsiExpressionList)lambdaParent, expression);
if (idx < 0) return false;
@@ -80,7 +82,7 @@ public class RedundantLambdaParameterTypeIntention extends PsiElementBaseIntenti
}
}, ", ") + ") -> {}", expression);
final PsiSubstitutor substitutor = javaPsiFacade.getResolveHelper()
.inferTypeArguments(typeParameters, method.getParameterList().getParameters(), arguments, PsiSubstitutor.EMPTY,
.inferTypeArguments(typeParameters, method.getParameterList().getParameters(), arguments, ((MethodCandidateInfo)resolveResult).getSiteSubstitutor(),
gParent, DefaultParameterTypeInferencePolicy.INSTANCE);
for (PsiTypeParameter parameter : typeParameters) {
@@ -0,0 +1,10 @@
// "Remove redundant types" "true"
import java.util.*;
public class Sample {
List<String> foo = new ArrayList<>();
{
foo.forEach(s -> {});
}
}
@@ -0,0 +1,10 @@
// "Remove redundant types" "true"
import java.util.*;
public class Sample {
List<String> foo = new ArrayList<>();
{
foo.forEach((Str<caret>ing s) -> {});
}
}
@@ -15,6 +15,9 @@
*/
package com.intellij.codeInsight.daemon.quickFix;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.testFramework.IdeaTestUtil;
public class RedundantLambdaParameterTypeIntentionTest extends LightQuickFixParameterizedTestCase {
public void test() throws Exception { doAllTests(); }
@@ -23,4 +26,8 @@ public class RedundantLambdaParameterTypeIntentionTest extends LightQuickFixPara
return "/codeInsight/daemonCodeAnalyzer/quickFix/redundantLambdaParameterType";
}
@Override
protected Sdk getProjectJDK() {
return IdeaTestUtil.getMockJdk18();
}
}