New J2K: Clear nullability for methods
This commit is contained in:
committed by
Ilya Kirillov
parent
5ae1a819bc
commit
b94ff8af36
+10
-12
@@ -16,13 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.nj2k.conversions
|
package org.jetbrains.kotlin.nj2k.conversions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.nj2k.ConversionContext
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
import org.jetbrains.kotlin.j2k.ast.Nullability
|
||||||
|
import org.jetbrains.kotlin.nj2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.nj2k.throwAnnotation
|
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.JKKtFunctionImpl
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.JKTypeElementImpl
|
|
||||||
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
import org.jetbrains.kotlin.nj2k.tree.impl.psi
|
||||||
|
import org.jetbrains.kotlin.nj2k.tree.updateNullabilityRecursively
|
||||||
|
|
||||||
class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() {
|
class JavaMethodToKotlinFunctionConversion(private val context: ConversionContext) : TransformerBasedConversion() {
|
||||||
override fun visitTreeElement(element: JKTreeElement) {
|
override fun visitTreeElement(element: JKTreeElement) {
|
||||||
@@ -37,11 +39,7 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex
|
|||||||
declaration.invalidate()
|
declaration.invalidate()
|
||||||
|
|
||||||
JKKtFunctionImpl(
|
JKKtFunctionImpl(
|
||||||
if (declaration.returnType.type.nullability != Nullability.NotNull)
|
declaration.returnType,
|
||||||
JKTypeElementImpl(
|
|
||||||
declaration.returnType.type
|
|
||||||
.updateNullability(declaration.returnTypeNullability(context))
|
|
||||||
) else declaration.returnType,
|
|
||||||
declaration.name,
|
declaration.name,
|
||||||
declaration.parameters,
|
declaration.parameters,
|
||||||
declaration.block,
|
declaration.block,
|
||||||
@@ -49,10 +47,10 @@ class JavaMethodToKotlinFunctionConversion(private val context: ConversionContex
|
|||||||
declaration.annotationList.also {
|
declaration.annotationList.also {
|
||||||
if (declaration.throwsList.isNotEmpty()) {
|
if (declaration.throwsList.isNotEmpty()) {
|
||||||
it.annotations +=
|
it.annotations +=
|
||||||
throwAnnotation(
|
throwAnnotation(
|
||||||
declaration.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
|
declaration.throwsList.map { it.type.updateNullabilityRecursively(Nullability.NotNull) },
|
||||||
context.symbolProvider
|
context.symbolProvider
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
declaration.extraModifiers,
|
declaration.extraModifiers,
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.PsiMethod
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.psi.PsiVariable
|
import com.intellij.psi.PsiVariable
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.j2k.*
|
import org.jetbrains.kotlin.j2k.*
|
||||||
import org.jetbrains.kotlin.nj2k.*
|
|
||||||
import org.jetbrains.kotlin.j2k.ast.Mutability
|
import org.jetbrains.kotlin.j2k.ast.Mutability
|
||||||
import org.jetbrains.kotlin.j2k.ast.Nullability
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
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() {
|
class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
private val typeFlavorCalculator = TypeFlavorCalculator(object : TypeFlavorConverterFacade {
|
private val typeFlavorCalculator = TypeFlavorCalculator(object : TypeFlavorConverterFacade {
|
||||||
@@ -163,9 +163,8 @@ class TypeMappingConversion(val context: ConversionContext) : RecursiveApplicabl
|
|||||||
val psi = parent.psi
|
val psi = parent.psi
|
||||||
return when (parent) {
|
return when (parent) {
|
||||||
is JKMethod ->
|
is JKMethod ->
|
||||||
parent.nullabilityBySuperMethod(context.symbolProvider).defaultToNull()
|
psi?.let { typeFlavorCalculator.methodNullability(it as PsiMethod) }
|
||||||
?: psi?.let { typeFlavorCalculator.methodNullability(it as PsiMethod) }
|
.nullToDefault()
|
||||||
.nullToDefault()
|
|
||||||
|
|
||||||
is JKVariable -> psi?.let {
|
is JKVariable -> psi?.let {
|
||||||
typeFlavorCalculator.variableNullability(psi as PsiVariable)
|
typeFlavorCalculator.variableNullability(psi as PsiVariable)
|
||||||
|
|||||||
Reference in New Issue
Block a user