Fix PSI behavior for "val x : ()?' case
This commit is contained in:
+3
-1
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
val x: ()? = 1
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user