New J2K: Clear nullability for methods

This commit is contained in:
Ilya Kirillov
2019-02-13 13:08:08 +03:00
committed by Ilya Kirillov
parent 5ae1a819bc
commit b94ff8af36
2 changed files with 16 additions and 19 deletions
@@ -16,13 +16,15 @@
package org.jetbrains.kotlin.nj2k.conversions
import org.jetbrains.kotlin.nj2k.ConversionContext
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.nj2k.ConversionContext
import org.jetbrains.kotlin.nj2k.throwAnnotation
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.JKClassBody
import org.jetbrains.kotlin.nj2k.tree.JKJavaMethod
import org.jetbrains.kotlin.nj2k.tree.JKTreeElement
import org.jetbrains.kotlin.nj2k.tree.impl.JKKtFunctionImpl
import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeElementImpl
import org.jetbrains.kotlin.nj2k.tree.impl.psi
import org.jetbrains.kotlin.nj2k.tree.updateNullabilityRecursively
class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() {
override fun visitTreeElement(element: JKTreeElement) {
@@ -37,11 +39,7 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex
declaration.invalidate()
JKKtFunctionImpl(
if (declaration.returnType.type.nullability != Nullability.NotNull)
JKTypeElementImpl(
declaration.returnType.type
.updateNullability(declaration.returnTypeNullability(context))
) else declaration.returnType,
declaration.returnType,
declaration.name,
declaration.parameters,
declaration.block,
@@ -49,10 +47,10 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex
declaration.annotationList.also {
if (declaration.throwsList.isNotEmpty()) {
it.annotations +=
throwAnnotation(
declaration.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
context.symbolProvider
)
throwAnnotation(
declaration.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
context.symbolProvider
)
}
},
declaration.extraModifiers,
@@ -9,16 +9,16 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiVariable
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.PrimitiveType
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.j2k.*
import org.jetbrains.kotlin.nj2k.*
import org.jetbrains.kotlin.j2k.ast.Mutability
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.*
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.nj2k.ConversionContext
import org.jetbrains.kotlin.nj2k.kotlinTypeByName
import org.jetbrains.kotlin.nj2k.tree.*
import org.jetbrains.kotlin.nj2k.tree.impl.*
class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() {
private val typeFlavorCalculator = TypeFlavorCalculator(object : TypeFlavorConverterFacade {
@@ -163,9 +163,8 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
val psi = parent.psi
return when (parent) {
is JKMethod ->
parent.nullabilityBySuperMethod(context.symbolProvider).defaultToNull()
?: psi?.let { typeFlavorCalculator.methodNullability(it as PsiMethod) }
.nullToDefault()
psi?.let { typeFlavorCalculator.methodNullability(it as PsiMethod) }
.nullToDefault()
is JKVariable -> psi?.let {
typeFlavorCalculator.variableNullability(psi as PsiVariable)