java 8 diamonds: include constructor's type parameters in inference constraints (IDEA-160918)

This commit is contained in:
Anna Kozlova
2016-09-19 17:19:19 +03:00
parent dbc3854f69
commit b8f0e626b9
3 changed files with 26 additions and 0 deletions

View File

@@ -21,6 +21,7 @@ import com.intellij.psi.impl.source.resolve.graphInference.InferenceVariable;
import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil;
import com.intellij.psi.infos.MethodCandidateInfo;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -142,6 +143,9 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm
if (psiClass != null) {
returnType = JavaPsiFacade.getElementFactory(argumentList.getProject()).createType(psiClass, PsiSubstitutor.EMPTY);
typeParams = psiClass.getTypeParameters();
if (method != null && method.hasTypeParameters()) {
typeParams = ArrayUtil.mergeArrays(typeParams, method.getTypeParameters());
}
}
}

View File

@@ -0,0 +1,18 @@
import java.util.List;
import java.util.function.Function;
public class RunnableGroup<R extends Runnable> implements Runnable {
public <T> RunnableGroup(List<T> list, Function<T, R> function) {}
@Override public void run() {}
}
class Usage {
public static void m(List<Integer> list,
Function<Integer, Runnable> function) {
run(new RunnableGroup<>(list, function));
}
static <K extends Runnable> K run(K runnable) { return runnable; }
}

View File

@@ -73,6 +73,10 @@ public class Diamond8HighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testParameterizedConstructorWithDiamonds() throws Exception {
doTest();
}
private void doTest() throws Exception {
doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false);
}