mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
java 8 diamonds: include constructor's type parameters in inference constraints (IDEA-160918)
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user