diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml
index d0b4339f4d1..ef9215759da 100644
--- a/.idea/inspectionProfiles/idea_default.xml
+++ b/.idea/inspectionProfiles/idea_default.xml
@@ -119,6 +119,7 @@
+
diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaJavaToKotlinServices.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaJavaToKotlinServices.kt
index b44288eca88..6b6564790c5 100644
--- a/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaJavaToKotlinServices.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaJavaToKotlinServices.kt
@@ -16,13 +16,14 @@
package org.jetbrains.kotlin.idea.j2k
-import com.intellij.codeInspection.dataFlow.DfaUtil
-import com.intellij.codeInspection.dataFlow.Nullness
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiVariable
+import org.jetbrains.kotlin.idea.util.compat.dfaCheckNullability
+import org.jetbrains.kotlin.idea.util.compat.dfaInferMethodNullability
import org.jetbrains.kotlin.j2k.*
import org.jetbrains.kotlin.j2k.ast.Nullability
+import org.jetbrains.kotlin.idea.util.compat.Nullability as IntellijNullability
object IdeaJavaToKotlinServices : JavaToKotlinConverterServices {
override val referenceSearcher: ReferenceSearcher
@@ -47,14 +48,14 @@ object IdeaSuperMethodSearcher : SuperMethodsSearcher {
private object IdeaJavaDataFlowAnalyzerFacade : JavaDataFlowAnalyzerFacade {
override fun variableNullability(variable: PsiVariable, context: PsiElement): Nullability =
- DfaUtil.checkNullness(variable, context).toJ2KNullability()
+ dfaCheckNullability(variable, context).toJ2KNullability()
override fun methodNullability(method: PsiMethod): Nullability =
- DfaUtil.inferMethodNullity(method).toJ2KNullability()
+ dfaInferMethodNullability(method).toJ2KNullability()
- private fun Nullness.toJ2KNullability() = when (this) {
- Nullness.UNKNOWN -> Nullability.Default
- Nullness.NOT_NULL -> Nullability.NotNull
- Nullness.NULLABLE -> Nullability.Nullable
+ private fun IntellijNullability.toJ2KNullability() = when (this) {
+ IntellijNullability.UNKNOWN -> Nullability.Default
+ IntellijNullability.NOT_NULL -> Nullability.NotNull
+ IntellijNullability.NULLABLE -> Nullability.Nullable
}
}
\ No newline at end of file
diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceProvider.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceProvider.kt
index 7b0d969102a..260f5425c44 100644
--- a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceProvider.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceProvider.kt
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.idea.slicer
-import com.intellij.codeInspection.dataFlow.Nullness
import com.intellij.ide.util.treeView.AbstractTreeStructure
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.psi.PsiElement
@@ -24,12 +23,12 @@ import com.intellij.slicer.*
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
-import org.jetbrains.kotlin.idea.caches.resolve.analyzeAndGetResult
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
-import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessTypes
import org.jetbrains.kotlin.idea.references.KtReference
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.slicer.compat.PsiElement_N183_NN191
+import org.jetbrains.kotlin.idea.util.compat.Nullability
+import org.jetbrains.kotlin.idea.util.compat.SliceNullnessAnalyzerBaseEx
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.isPlainWithEscapes
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
@@ -51,8 +50,8 @@ class KotlinSliceProvider : SliceLanguageSupportProvider, SliceUsageTransformer
val leafAnalyzer by lazy { SliceLeafAnalyzer(LEAF_ELEMENT_EQUALITY, this) }
val nullnessAnalyzer: SliceNullnessAnalyzerBase by lazy {
- object : SliceNullnessAnalyzerBase(LEAF_ELEMENT_EQUALITY, this) {
- override fun checkNullness(element: PsiElement?): Nullness {
+ object : SliceNullnessAnalyzerBaseEx(LEAF_ELEMENT_EQUALITY, this) {
+ override fun checkNullabilityEx(element: PsiElement?): Nullability {
val types = when (element) {
is KtCallableDeclaration -> listOfNotNull((element.resolveToDescriptorIfAny() as? CallableDescriptor)?.returnType)
is KtDeclaration -> emptyList()
@@ -60,10 +59,10 @@ class KotlinSliceProvider : SliceLanguageSupportProvider, SliceUsageTransformer
else -> emptyList()
}
return when {
- types.isEmpty() -> return Nullness.UNKNOWN
- types.all { KotlinBuiltIns.isNullableNothing(it) } -> Nullness.NULLABLE
- types.any { it.isError || TypeUtils.isNullableType(it) || it.isNullabilityFlexible() } -> Nullness.UNKNOWN
- else -> Nullness.NOT_NULL
+ types.isEmpty() -> return Nullability.UNKNOWN
+ types.all { KotlinBuiltIns.isNullableNothing(it) } -> Nullability.NULLABLE
+ types.any { it.isError || TypeUtils.isNullableType(it) || it.isNullabilityFlexible() } -> Nullability.UNKNOWN
+ else -> Nullability.NOT_NULL
}
}
}
diff --git a/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt b/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt
new file mode 100644
index 00000000000..9db3a80d53b
--- /dev/null
+++ b/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
+ * that can be found in the license/LICENSE.txt file.
+ */
+
+@file:Suppress("MissingRecentApi", "IncompatibleAPI")
+
+package org.jetbrains.kotlin.idea.util.compat
+
+import com.intellij.codeInsight.Nullability as IntellijNullability
+import com.intellij.codeInspection.dataFlow.DfaUtil
+import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiMethod
+import com.intellij.psi.PsiVariable
+import com.intellij.slicer.SliceLanguageSupportProvider
+import com.intellij.slicer.SliceLeafEquality
+import com.intellij.slicer.SliceNullnessAnalyzerBase
+
+// BUNCH: 181
+typealias Nullability = IntellijNullability
+
+// BUNCH: 181
+fun dfaCheckNullability(variable: PsiVariable?, context: PsiElement?): Nullability =
+ DfaUtil.checkNullability(variable, context)
+
+// BUNCH: 181
+fun dfaInferMethodNullability(method: PsiMethod): Nullability =
+ DfaUtil.inferMethodNullability(method)
+
+// BUNCH: 181
+abstract class SliceNullnessAnalyzerBaseEx(
+ leafEquality: SliceLeafEquality,
+ provider: SliceLanguageSupportProvider
+) : SliceNullnessAnalyzerBase(leafEquality, provider) {
+ override fun checkNullability(element: PsiElement?): Nullability {
+ return checkNullabilityEx(element)
+ }
+
+ abstract fun checkNullabilityEx(element: PsiElement?): Nullability
+}
\ No newline at end of file
diff --git a/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt.181 b/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt.181
new file mode 100644
index 00000000000..40490cac58a
--- /dev/null
+++ b/idea/src/org/jetbrains/kotlin/idea/util/compat/Nullability.kt.181
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
+ * that can be found in the license/LICENSE.txt file.
+ */
+
+@file:Suppress("MissingRecentApi", "IncompatibleAPI")
+
+package org.jetbrains.kotlin.idea.util.compat
+
+import com.intellij.codeInspection.dataFlow.Nullness
+import com.intellij.codeInspection.dataFlow.DfaUtil
+import com.intellij.psi.PsiElement
+import com.intellij.psi.PsiMethod
+import com.intellij.psi.PsiVariable
+import com.intellij.slicer.SliceLanguageSupportProvider
+import com.intellij.slicer.SliceLeafEquality
+import com.intellij.slicer.SliceNullnessAnalyzerBase
+
+// BUNCH: 181
+typealias Nullability = Nullness
+
+// BUNCH: 181
+fun dfaCheckNullability(variable: PsiVariable?, context: PsiElement?): Nullability =
+ DfaUtil.checkNullness(variable, context)
+
+// BUNCH: 181
+fun dfaInferMethodNullability(method: PsiMethod): Nullability =
+ DfaUtil.inferMethodNullity(method)
+
+// BUNCH: 181
+abstract class SliceNullnessAnalyzerBaseEx(
+ leafEquality: SliceLeafEquality,
+ provider: SliceLanguageSupportProvider
+) : SliceNullnessAnalyzerBase(leafEquality, provider) {
+ override fun checkNullness(element: PsiElement?): Nullability {
+ return checkNullabilityEx(element)
+ }
+
+ abstract fun checkNullabilityEx(element: PsiElement?): Nullability
+}
\ No newline at end of file