don't generate nullable type for val with not-null initializer

This commit is contained in:
Dmitry Jemerov
2012-06-01 18:56:03 +02:00
committed by Pavel V. Talanov
parent 58cf1d47be
commit 47293918fc
5 changed files with 23 additions and 7 deletions
+12 -1
View File
@@ -224,10 +224,15 @@ public open class Converter() {
elementToElement(field.getArgumentList()))
}
var kType = typeToType(field.getType())
if (field.hasModifierProperty(PsiModifier.FINAL) && isDefinitelyNotNull(field.getInitializer())) {
kType = kType.convertedToNotNull();
}
return Field(Identifier(field.getName()!!),
docComments,
modifiers,
typeToType(field.getType()),
kType,
expressionToExpression(field.getInitializer(), field.getType()),
countWritingAccesses(field, psiClass))
}
@@ -834,3 +839,9 @@ public open fun isAnnotatedAsNotNull(modifierList: PsiModifierList?): Boolean {
}
return false
}
public fun isDefinitelyNotNull(element: PsiElement?): Boolean = when(element) {
is PsiLiteralExpression -> element.getValue() != null
is PsiNewExpression -> true
else -> false
}
@@ -6,6 +6,7 @@ import org.jetbrains.jet.j2k.ast.*
import org.jetbrains.jet.j2k.ast.types.Type
import java.util.List
import org.jetbrains.jet.j2k.isAnnotatedAsNotNull
import org.jetbrains.jet.j2k.isDefinitelyNotNull
public open class ElementVisitor(val myConverter : Converter) : JavaElementVisitor() {
protected var myResult : Element = Element.EMPTY_ELEMENT
@@ -20,9 +21,13 @@ public open class ElementVisitor(val myConverter : Converter) : JavaElementVisit
public override fun visitLocalVariable(variable : PsiLocalVariable?) : Unit {
val theVariable = variable!!
var kType = myConverter.typeToType(theVariable.getType(), isAnnotatedAsNotNull(theVariable.getModifierList()))
if (theVariable.hasModifierProperty(PsiModifier.FINAL) && isDefinitelyNotNull(theVariable.getInitializer())) {
kType = kType.convertedToNotNull();
}
myResult = LocalVariable(Identifier(theVariable.getName()!!),
Converter.modifiersListToModifiersSet(theVariable.getModifierList()),
myConverter.typeToType(theVariable.getType(), isAnnotatedAsNotNull(theVariable.getModifierList())),
kType,
myConverter.expressionToExpression(theVariable.getInitializer(), theVariable.getType()))
}
+1 -1
View File
@@ -1,3 +1,3 @@
open class C() {
val f : Foo? = Foo(1, 2)
val f : Foo = Foo(1, 2)
}
@@ -1,7 +1,7 @@
trait INode {
class object {
val IN : String? = "in"
val AT : String? = "@"
val IN : String = "in"
val AT : String = "@"
val COMMA_WITH_SPACE : String? = COMMA + SPACE
}
}
@@ -1,7 +1,7 @@
public trait INode {
class object {
public val IN : String? = "in"
public val AT : String? = "@"
public val IN : String = "in"
public val AT : String = "@"
public val COMMA_WITH_SPACE : String? = COMMA + SPACE
}
}