mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 04:51:24 +07:00
inference: ensure to distinguish new fresh variables of the same node
This commit is contained in:
@@ -34,6 +34,7 @@ import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.UniqueNameGenerator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -1111,10 +1112,11 @@ public class InferenceSession {
|
||||
final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(getManager().getProject());
|
||||
PsiSubstitutor ySubstitutor = PsiSubstitutor.EMPTY;
|
||||
final PsiTypeParameter[] yVars = new PsiTypeParameter[vars.size()];
|
||||
UniqueNameGenerator nameGenerator = new UniqueNameGenerator();
|
||||
for (int i = 0; i < vars.size(); i++) {
|
||||
InferenceVariable var = vars.get(i);
|
||||
final PsiTypeParameter parameter = var.getParameter();
|
||||
yVars[i] = elementFactory.createTypeParameterFromText(parameter.getName(), parameter);
|
||||
yVars[i] = elementFactory.createTypeParameterFromText(nameGenerator.generateUniqueName(parameter.getName()), parameter);
|
||||
ySubstitutor = ySubstitutor.put(var, elementFactory.createType(yVars[i]));
|
||||
}
|
||||
for (int i = 0; i < yVars.length; i++) {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
class MyTest<T> {
|
||||
{
|
||||
create<error descr="'create(java.util.Comparator<T>)' in 'MyTest' cannot be applied to '(java.util.Comparator<T>)'">(Comparator.naturalOrder())</error>;
|
||||
}
|
||||
|
||||
static <T> void create(Comparator<T> c) {}
|
||||
}
|
||||
@@ -186,6 +186,7 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase
|
||||
public void testRestoreCapturedWildcardsInReturnTypesWhenNoAdditionalConstraintsDetected() { doTest(); }
|
||||
public void testIntersectionWithSameInterfaceButDifferentTypeArgument() { doTest(); }
|
||||
public void testVarargsMethodPreferred() { doTest(); }
|
||||
public void testSameNamedFreshVariables() { doTest(); }
|
||||
|
||||
public void testApplicabilityCheckFailsExpressionTypeCheckPasses() {
|
||||
doTest();
|
||||
|
||||
Reference in New Issue
Block a user