KT-12015 (Kotlin Lint False Positive for Bundle.getInt())

Java approach is not sufficient here, in Kotlin receivers can be implicit.
Use Kotlin extension/dispatch receivers to figure out the receiver type for our method call.
(cherry picked from commit cdedf1d)
This commit is contained in:
Yan Zhulanow
2016-06-10 21:35:41 +03:00
parent 530ab42de6
commit 1de05b965e
6 changed files with 90 additions and 16 deletions
@@ -27,6 +27,9 @@ class JavaUAssertExpression(
val condition: UExpression by lz { JavaConverter.convertOrEmpty(psi.assertCondition, this) }
val message: UExpression? by lz { JavaConverter.convertOrNull(psi.assertDescription, this) }
override val receiverType: UType?
get() = null
override val functionReference: USimpleReferenceExpression?
get() = null
@@ -26,6 +26,13 @@ class JavaUCallExpression(
override val psi: PsiMethodCallExpression,
override val parent: UElement
) : JavaAbstractUElement(), UCallExpression, PsiElementBacked, JavaUElementWithType {
override val receiverType: UType?
get() {
val qualifiedExpression = parent as? UQualifiedExpression ?: return null
if (qualifiedExpression.selector != this) return null
return qualifiedExpression.receiver.getExpressionType()
}
override val kind: UastCallKind
get() = UastCallKind.FUNCTION_CALL
@@ -63,6 +70,9 @@ class JavaConstructorUCallExpression(
}
}
override val receiverType: UType?
get() = null
override val functionReference: USimpleReferenceExpression?
get() = null
@@ -119,6 +129,9 @@ class JavaArrayInitializerUCallExpression(
override val psi: PsiArrayInitializerExpression,
override val parent: UElement
) : JavaAbstractUElement(), UCallExpression, PsiElementBacked, JavaUElementWithType, JavaEvaluatableUElement {
override val receiverType: UType?
get() = null
override val functionReference: USimpleReferenceExpression?
get() = null
@@ -150,6 +163,9 @@ class JavaAnnotationArrayInitializerUCallExpression(
override val psi: PsiArrayInitializerMemberValue,
override val parent: UElement
) : JavaAbstractUElement(), UCallExpression, PsiElementBacked, JavaUElementWithType, JavaEvaluatableUElement {
override val receiverType: UType?
get() = null
override val kind: UastCallKind
get() = UastCallKind.ARRAY_INITIALIZER