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()))
|
elementToElement(field.getArgumentList()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var kType = typeToType(field.getType())
|
||||||
|
if (field.hasModifierProperty(PsiModifier.FINAL) && isDefinitelyNotNull(field.getInitializer())) {
|
||||||
|
kType = kType.convertedToNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
return Field(Identifier(field.getName()!!),
|
return Field(Identifier(field.getName()!!),
|
||||||
docComments,
|
docComments,
|
||||||
modifiers,
|
modifiers,
|
||||||
typeToType(field.getType()),
|
kType,
|
||||||
expressionToExpression(field.getInitializer(), field.getType()),
|
expressionToExpression(field.getInitializer(), field.getType()),
|
||||||
countWritingAccesses(field, psiClass))
|
countWritingAccesses(field, psiClass))
|
||||||
}
|
}
|
||||||
@@ -834,3 +839,9 @@ public open fun isAnnotatedAsNotNull(modifierList: PsiModifierList?): Boolean {
|
|||||||
}
|
}
|
||||||
return false
|
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 org.jetbrains.jet.j2k.ast.types.Type
|
||||||
import java.util.List
|
import java.util.List
|
||||||
import org.jetbrains.jet.j2k.isAnnotatedAsNotNull
|
import org.jetbrains.jet.j2k.isAnnotatedAsNotNull
|
||||||
|
import org.jetbrains.jet.j2k.isDefinitelyNotNull
|
||||||
|
|
||||||
public open class ElementVisitor(val myConverter : Converter) : JavaElementVisitor() {
|
public open class ElementVisitor(val myConverter : Converter) : JavaElementVisitor() {
|
||||||
protected var myResult : Element = Element.EMPTY_ELEMENT
|
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 {
|
public override fun visitLocalVariable(variable : PsiLocalVariable?) : Unit {
|
||||||
val theVariable = variable!!
|
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()!!),
|
myResult = LocalVariable(Identifier(theVariable.getName()!!),
|
||||||
Converter.modifiersListToModifiersSet(theVariable.getModifierList()),
|
Converter.modifiersListToModifiersSet(theVariable.getModifierList()),
|
||||||
myConverter.typeToType(theVariable.getType(), isAnnotatedAsNotNull(theVariable.getModifierList())),
|
kType,
|
||||||
myConverter.expressionToExpression(theVariable.getInitializer(), theVariable.getType()))
|
myConverter.expressionToExpression(theVariable.getInitializer(), theVariable.getType()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
open class C() {
|
open class C() {
|
||||||
val f : Foo? = Foo(1, 2)
|
val f : Foo = Foo(1, 2)
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
trait INode {
|
trait INode {
|
||||||
class object {
|
class object {
|
||||||
val IN : String? = "in"
|
val IN : String = "in"
|
||||||
val AT : String? = "@"
|
val AT : String = "@"
|
||||||
val COMMA_WITH_SPACE : String? = COMMA + SPACE
|
val COMMA_WITH_SPACE : String? = COMMA + SPACE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
public trait INode {
|
public trait INode {
|
||||||
class object {
|
class object {
|
||||||
public val IN : String? = "in"
|
public val IN : String = "in"
|
||||||
public val AT : String? = "@"
|
public val AT : String = "@"
|
||||||
public val COMMA_WITH_SPACE : String? = COMMA + SPACE
|
public val COMMA_WITH_SPACE : String? = COMMA + SPACE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user