KT-2739 Error type inferred for hashSet(Pair, Pair, Pair)
#KT-2739 Fixed
This commit is contained in:
@@ -798,9 +798,12 @@ public class CallResolver {
|
|||||||
JetType effectiveExpectedType = getEffectiveExpectedType(valueParameterDescriptor, valueArgument);
|
JetType effectiveExpectedType = getEffectiveExpectedType(valueParameterDescriptor, valueArgument);
|
||||||
TemporaryBindingTrace traceForUnknown = TemporaryBindingTrace.create(context.trace);
|
TemporaryBindingTrace traceForUnknown = TemporaryBindingTrace.create(context.trace);
|
||||||
JetExpression argumentExpression = valueArgument.getArgumentExpression();
|
JetExpression argumentExpression = valueArgument.getArgumentExpression();
|
||||||
JetType type = argumentExpression != null ? expressionTypingServices.getType(
|
JetType type = argumentExpression != null
|
||||||
context.scope, argumentExpression, substitutor.substitute(valueParameterDescriptor.getType(), Variance.INVARIANT),
|
? expressionTypingServices.getType(
|
||||||
context.dataFlowInfo, traceForUnknown) : null;
|
context.scope, argumentExpression,
|
||||||
|
substitutor.substitute(effectiveExpectedType, Variance.INVARIANT),
|
||||||
|
context.dataFlowInfo, traceForUnknown)
|
||||||
|
: null;
|
||||||
constraintSystem.addSupertypeConstraint(effectiveExpectedType, type, ConstraintPosition.getValueParameterPosition(
|
constraintSystem.addSupertypeConstraint(effectiveExpectedType, type, ConstraintPosition.getValueParameterPosition(
|
||||||
valueParameterDescriptor.getIndex()));
|
valueParameterDescriptor.getIndex()));
|
||||||
//todo no return
|
//todo no return
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
// KT-2739 Error type inferred for hashSet(Pair, Pair, Pair)
|
||||||
|
|
||||||
|
fun foo<T>(vararg ts: T): T? = null
|
||||||
|
|
||||||
|
class Pair<A>(a: A)
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val v = foo(Pair(1))
|
||||||
|
return if (v == null) "OK" else "fail"
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun foo<T>(vararg <!UNUSED_PARAMETER!>ts<!>: T): T? = null
|
||||||
|
|
||||||
|
class Pair<A>(a: A)
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
val v = foo(Pair(1))
|
||||||
|
<!TYPE_MISMATCH!>v<!>: Int // check that it is not error type
|
||||||
|
}
|
||||||
@@ -15,16 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.jet.checkers;
|
package org.jetbrains.jet.checkers;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
|
||||||
import junit.framework.Test;
|
import junit.framework.Test;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.test.InnerTestClasses;
|
import org.jetbrains.jet.test.InnerTestClasses;
|
||||||
import org.jetbrains.jet.test.TestMetadata;
|
import org.jetbrains.jet.test.TestMetadata;
|
||||||
|
|
||||||
import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve;
|
import java.io.File;
|
||||||
|
|
||||||
/** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */
|
/** This class is generated by {@link org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve}. DO NOT MODIFY MANUALLY */
|
||||||
@InnerTestClasses({JetDiagnosticsTestGenerated.Tests.class, JetDiagnosticsTestGenerated.Script.class})
|
@InnerTestClasses({JetDiagnosticsTestGenerated.Tests.class, JetDiagnosticsTestGenerated.Script.class})
|
||||||
@@ -1471,7 +1468,7 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
|
|||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/diagnostics/tests/inference")
|
@TestMetadata("compiler/testData/diagnostics/tests/inference")
|
||||||
@InnerTestClasses({Inference.Regressions.class})
|
@InnerTestClasses({Inference.Regressions.class, Inference.Varargs.class})
|
||||||
public static class Inference extends AbstractDiagnosticsTestWithEagerResolve {
|
public static class Inference extends AbstractDiagnosticsTestWithEagerResolve {
|
||||||
public void testAllFilesPresentInInference() throws Exception {
|
public void testAllFilesPresentInInference() throws Exception {
|
||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/inference"), "kt", true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/inference"), "kt", true);
|
||||||
@@ -1715,10 +1712,24 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/tests/inference/varargs")
|
||||||
|
public static class Varargs extends AbstractDiagnosticsTestWithEagerResolve {
|
||||||
|
public void testAllFilesPresentInVarargs() throws Exception {
|
||||||
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve", new File("compiler/testData/diagnostics/tests/inference/varargs"), "kt", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsAndPair.kt")
|
||||||
|
public void testVarargsAndPair() throws Exception {
|
||||||
|
doTest("compiler/testData/diagnostics/tests/inference/varargs/varargsAndPair.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static Test innerSuite() {
|
public static Test innerSuite() {
|
||||||
TestSuite suite = new TestSuite("Inference");
|
TestSuite suite = new TestSuite("Inference");
|
||||||
suite.addTestSuite(Inference.class);
|
suite.addTestSuite(Inference.class);
|
||||||
suite.addTestSuite(Regressions.class);
|
suite.addTestSuite(Regressions.class);
|
||||||
|
suite.addTestSuite(Varargs.class);
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,6 +171,9 @@ public class FunctionGenTest extends CodegenTestCase {
|
|||||||
blackBoxFile("regressions/kt1038.kt");
|
blackBoxFile("regressions/kt1038.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKt2739() {
|
||||||
|
blackBoxFile("regressions/kt2739.kt");
|
||||||
|
}
|
||||||
|
|
||||||
public void testReferencesStaticInnerClassMethod() throws Exception {
|
public void testReferencesStaticInnerClassMethod() throws Exception {
|
||||||
blackBoxFileWithJava("functions/referencesStaticInnerClassMethod.kt");
|
blackBoxFileWithJava("functions/referencesStaticInnerClassMethod.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user