don't generate nullable type for val with not-null initializer
This commit is contained in:
committed by
Pavel V. Talanov
parent
58cf1d47be
commit
47293918fc
@@ -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,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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user