diff --git a/annotations/com/intellij/codeInsight/annotations.xml b/annotations/com/intellij/codeInsight/annotations.xml index 0ef0480992d..e727956aafa 100644 --- a/annotations/com/intellij/codeInsight/annotations.xml +++ b/annotations/com/intellij/codeInsight/annotations.xml @@ -2,4 +2,8 @@ + + + \ No newline at end of file diff --git a/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt b/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt index 1bbae9ac64b..3c0a6b1f4fe 100644 --- a/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/TypeConverter.kt @@ -28,6 +28,7 @@ import org.jetbrains.jet.j2k.ast.assignPrototype import com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT import org.jetbrains.jet.j2k.ast.assignNoPrototype import org.jetbrains.jet.j2k.ast.ErrorType +import com.intellij.codeInsight.NullableNotNullManager class TypeConverter(val settings: ConverterSettings, val conversionScope: ConversionScope) { private val nullabilityCache = HashMap() @@ -274,4 +275,14 @@ class TypeConverter(val settings: ConverterSettings, val conversionScope: Conver else -> false } } + + private fun PsiModifierListOwner.nullabilityFromAnnotations(): Nullability { + val manager = NullableNotNullManager.getInstance(getProject()) + return if (manager.isNotNull(this, false/* we do not check bases because they are checked by callers of this method*/)) + Nullability.NotNull + else if (manager.isNullable(this, false)) + Nullability.Nullable + else + Nullability.Default + } } diff --git a/j2k/src/org/jetbrains/jet/j2k/Utils.kt b/j2k/src/org/jetbrains/jet/j2k/Utils.kt index b866f27c523..322e6998ca5 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Utils.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Utils.kt @@ -22,6 +22,8 @@ import com.intellij.psi.util.PsiUtil import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.jet.j2k.ast.* +import com.intellij.codeInsight.AnnotationUtil +import com.intellij.codeInsight.NullableNotNullManager fun quoteKeywords(packageName: String): String = packageName.split("\\.").map { Identifier.toKotlin(it) }.makeString(".") @@ -47,16 +49,6 @@ fun PsiVariable.countWriteAccesses(scope: PsiElement?): Int fun PsiVariable.hasWriteAccesses(scope: PsiElement?): Boolean = if (scope != null) findVariableUsages(this, scope).any { PsiUtil.isAccessedForWriting(it) } else false -fun PsiModifierListOwner.nullabilityFromAnnotations(): Nullability { - val annotations = getModifierList()?.getAnnotations() ?: return Nullability.Default - return if (annotations.any { NOT_NULL_ANNOTATIONS.contains(it.getQualifiedName()) }) - Nullability.NotNull - else if (annotations.any { NULLABLE_ANNOTATIONS.contains(it.getQualifiedName()) }) - Nullability.Nullable - else - Nullability.Default -} - fun getDefaultInitializer(field: Field): Expression { val t = field.`type` val result = if (t.isNullable) { diff --git a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator.kt b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator.kt index 97687578f5e..f79f1671b27 100644 --- a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator.kt +++ b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator.kt @@ -1,7 +1,7 @@ package demo class Test() : Iterable { - override fun iterator(): Iterator? { + override fun iterator(): Iterator { return null } @@ -12,7 +12,7 @@ class Test() : Iterable { } class FullTest() : Iterable { - override fun iterator(): Iterator? { + override fun iterator(): Iterator { return null } diff --git a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator2.kt b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator2.kt index 868627c5061..8b67cc579ff 100644 --- a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator2.kt +++ b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator2.kt @@ -4,7 +4,7 @@ import java.util.* import kotlin.Iterator class Test() : Iterable { - override fun iterator(): Iterator? { + override fun iterator(): Iterator { return null } @@ -15,7 +15,7 @@ class Test() : Iterable { } class FullTest() : Iterable { - override fun iterator(): Iterator? { + override fun iterator(): Iterator { return null } diff --git a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator3.kt b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator3.kt index c741d5c583c..aa403e69e79 100644 --- a/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator3.kt +++ b/j2k/tests/testData/ast/toKotlinClasses/iterableAndIterator3.kt @@ -1,7 +1,7 @@ package demo class Test() : Iterable { - override fun iterator(): Iterator? { + override fun iterator(): Iterator { return null }