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);
|
||||
}
|
||||
|
||||
@@ -96,7 +96,9 @@ public class MemberMatching {
|
||||
|
||||
@Override
|
||||
public String visitNullableType(@NotNull JetNullableType nullableType, Void data) {
|
||||
return nullableType.getInnerType().accept(this, null);
|
||||
JetTypeElement innerType = nullableType.getInnerType();
|
||||
assert innerType != null : "No inner type: " + nullableType;
|
||||
return innerType.accept(this, null);
|
||||
}
|
||||
}, null);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ public class RemoveNullableFix extends JetIntentionAction<JetNullableType> {
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
|
||||
JetTypeElement type = super.element.getInnerType();
|
||||
assert type != null : "No inner type " + element.getText() + ", should have been rejected in createFactory()";
|
||||
super.element.replace(type);
|
||||
}
|
||||
|
||||
@@ -67,7 +68,7 @@ public class RemoveNullableFix extends JetIntentionAction<JetNullableType> {
|
||||
@Override
|
||||
public JetIntentionAction<JetNullableType> createAction(Diagnostic diagnostic) {
|
||||
JetNullableType nullType = QuickFixUtil.getParentElementOfType(diagnostic, JetNullableType.class);
|
||||
if (nullType == null) return null;
|
||||
if (nullType == null || nullType.getInnerType() == null) return null;
|
||||
return new RemoveNullableFix(nullType, typeOfError);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -16,11 +16,17 @@
|
||||
|
||||
package org.jetbrains.jet.plugin.refactoring.move;
|
||||
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.test.TestMetadata;
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.test.InnerTestClasses;
|
||||
import org.jetbrains.jet.test.TestMetadata;
|
||||
|
||||
import org.jetbrains.jet.plugin.refactoring.move.AbstractJetMoveTest;
|
||||
|
||||
/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
|
||||
Reference in New Issue
Block a user