fixed exception in renderer for type inference error

This commit is contained in:
Svetlana Isakova
2012-10-16 17:28:24 +04:00
parent 73020fbebf
commit 0d4d576fed
4 changed files with 31 additions and 4 deletions
@@ -196,9 +196,10 @@ public class Renderers {
JetType receiverType = substitutedDescriptor.getReceiverParameter().exists() ? substitutedDescriptor.getReceiverParameter().getType() : null;
final Collection<ConstraintPosition> errorPositions = Sets.newHashSet();
List<JetType> valueArgumentTypes = Lists.newArrayList();
List<JetType> parameterTypes = Lists.newArrayList();
for (ValueParameterDescriptor valueParameterDescriptor : substitutedDescriptor.getValueParameters()) {
valueArgumentTypes.add(valueParameterDescriptor.getType());
parameterTypes.add(valueParameterDescriptor.getType());
if (valueParameterDescriptor.getIndex() >= inferenceErrorData.valueArgumentsTypes.size()) continue;
JetType actualType = inferenceErrorData.valueArgumentsTypes.get(valueParameterDescriptor.getIndex());
if (!JetTypeChecker.INSTANCE.isSubtypeOf(actualType, valueParameterDescriptor.getType())) {
errorPositions.add(ConstraintPosition.getValueParameterPosition(valueParameterDescriptor.getIndex()));
@@ -216,7 +217,7 @@ public class Renderers {
return errorPositions.contains(constraintPosition);
}
};
table.functionArgumentTypeList(receiverType, valueArgumentTypes, isErrorPosition);
table.functionArgumentTypeList(receiverType, parameterTypes, isErrorPosition);
}
table.text("can be applied to")
@@ -0,0 +1,11 @@
fun <K, V> testMutableMapEntry(<warning>map</warning>: MutableMap<K, V>, <warning>k1</warning>: K, <warning>v</warning>: V) {
}
fun foo() {
<error>testMutableMapEntry</error><error>(hashMap(1 to 'a'), 'b')</error>
}
//extract from library
fun <K, V> hashMap(<warning>p</warning>: Pair<K, V>): MutableMap<K, V> {<error>}</error>
fun <K, V> K.to(<warning>v</warning>: V): Pair<K, V> {<error>}</error>
data class Pair<K, V> {}
@@ -60,6 +60,7 @@ public abstract class AbstractJetPsiCheckerTest extends LightDaemonAnalyzerTestC
Arrays.asList(
new SimpleTestClassModel(new File("idea/testData/checker"), false, "jet", "doTest"),
new SimpleTestClassModel(new File("idea/testData/checker/regression"), true, "jet", "doTest"),
new SimpleTestClassModel(new File("idea/testData/checker/rendering"), true, "kt", "doTest"),
new SimpleTestClassModel(new File("idea/testData/checker/infos"), true, "jet", "doTestWithInfos")
),
thisClass
@@ -27,7 +27,7 @@ import org.jetbrains.jet.test.TestMetadata;
import org.jetbrains.jet.checkers.AbstractJetPsiCheckerTest;
/** This class is generated by {@link org.jetbrains.jet.checkers.AbstractJetPsiCheckerTest}. DO NOT MODIFY MANUALLY */
@InnerTestClasses({JetPsiCheckerTestGenerated.Checker.class, JetPsiCheckerTestGenerated.Regression.class, JetPsiCheckerTestGenerated.Infos.class})
@InnerTestClasses({JetPsiCheckerTestGenerated.Checker.class, JetPsiCheckerTestGenerated.Regression.class, JetPsiCheckerTestGenerated.Rendering.class, JetPsiCheckerTestGenerated.Infos.class})
public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
@TestMetadata("idea/testData/checker")
public static class Checker extends AbstractJetPsiCheckerTest {
@@ -385,6 +385,19 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
}
@TestMetadata("idea/testData/checker/rendering")
public static class Rendering extends AbstractJetPsiCheckerTest {
public void testAllFilesPresentInRendering() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.checkers.AbstractJetPsiCheckerTest", new File("idea/testData/checker/rendering"), "kt", true);
}
@TestMetadata("TypeInferenceError.kt")
public void testTypeInferenceError() throws Exception {
doTest("idea/testData/checker/rendering/TypeInferenceError.kt");
}
}
@TestMetadata("idea/testData/checker/infos")
public static class Infos extends AbstractJetPsiCheckerTest {
public void testAllFilesPresentInInfos() throws Exception {
@@ -412,6 +425,7 @@ public class JetPsiCheckerTestGenerated extends AbstractJetPsiCheckerTest {
TestSuite suite = new TestSuite("JetPsiCheckerTestGenerated");
suite.addTestSuite(Checker.class);
suite.addTestSuite(Regression.class);
suite.addTestSuite(Rendering.class);
suite.addTestSuite(Infos.class);
return suite;
}