Fix PSI behavior for "val x : ()?' case

This commit is contained in:
Andrey Breslav
2014-03-25 14:04:23 +04:00
parent 6725b4f1b0
commit 80737bdfcf
9 changed files with 50 additions and 8 deletions
@@ -76,7 +76,9 @@ public class TypeTransformingVisitor extends JetVisitor<JetType, Void> {
throw new AlternativeSignatureMismatchException("Auto type '%s' is not-null, while type in alternative signature is nullable: '%s'",
DescriptorRenderer.TEXT.renderType(originalType), nullableType.getText());
}
return TypeUtils.makeNullable(computeType(nullableType.getInnerType(), originalType, originalToAltTypeParameters, typeUsage));
JetTypeElement innerType = nullableType.getInnerType();
assert innerType != null : "Syntax error: " + nullableType.getText();
return TypeUtils.makeNullable(computeType(innerType, originalType, originalToAltTypeParameters, typeUsage));
}
@Override
@@ -18,8 +18,10 @@ package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections;
import java.util.List;
public class JetNullableType extends JetTypeElement {
@@ -35,7 +37,8 @@ public class JetNullableType extends JetTypeElement {
@NotNull
@Override
public List<JetTypeReference> getTypeArgumentsAsTypes() {
return getInnerType().getTypeArgumentsAsTypes();
JetTypeElement innerType = getInnerType();
return innerType == null ? Collections.<JetTypeReference>emptyList() : innerType.getTypeArgumentsAsTypes();
}
@Override
@@ -43,7 +46,8 @@ public class JetNullableType extends JetTypeElement {
return visitor.visitNullableType(this, data);
}
@NotNull
@Nullable
@IfNotParsed
public JetTypeElement getInnerType() {
return findChildByClass(JetTypeElement.class);
}
@@ -241,7 +241,7 @@ public class DescriptorResolver {
JetNullableType nullableType = (JetNullableType) typeElement;
typeElement = nullableType.getInnerType();
// report only for innermost '?', the rest gets a 'redundant' warning
if (!(typeElement instanceof JetNullableType)) {
if (!(typeElement instanceof JetNullableType) && typeElement != null) {
trace.report(NULLABLE_SUPERTYPE.on(nullableType));
}
}
+1
View File
@@ -0,0 +1 @@
val x: ()? = 1
+21
View File
@@ -0,0 +1,21 @@
JetFile: AbsentInnerType.kt
PACKAGE_DIRECTIVE
<empty list>
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('x')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
NULLABLE_TYPE
PsiElement(LPAR)('(')
PsiErrorElement:Type expected
<empty list>
PsiElement(RPAR)(')')
PsiElement(QUEST)('?')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
@@ -33,6 +33,11 @@ import org.jetbrains.jet.parsing.AbstractJetParsingTest;
@TestMetadata("compiler/testData/psi")
@InnerTestClasses({JetParsingTestGenerated.Examples.class, JetParsingTestGenerated.FunctionReceivers.class, JetParsingTestGenerated.GreatSyntacticShift.class, JetParsingTestGenerated.Kdoc.class, JetParsingTestGenerated.PropertyDelegate.class, JetParsingTestGenerated.Recovery.class, JetParsingTestGenerated.StringTemplates.class})
public class JetParsingTestGenerated extends AbstractJetParsingTest {
@TestMetadata("AbsentInnerType.kt")
public void testAbsentInnerType() throws Exception {
doParsingTest("compiler/testData/psi/AbsentInnerType.kt");
}
public void testAllFilesPresentInPsi() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/psi"), Pattern.compile("^(.+)\\.kt$"), true);
}