KT-12674 "Calling new methods on older versions" errors for inlined constants

Inlined constants from Java should not be detected.
(cherry picked from commit b34ee4e)
This commit is contained in:
Yan Zhulanow
2016-06-15 22:58:40 +03:00
parent 206e439595
commit 8f75ababde
3 changed files with 27 additions and 2 deletions
@@ -24,6 +24,7 @@ import com.android.tools.klint.detector.api.*
import org.jetbrains.uast.*
import org.jetbrains.uast.check.UastAndroidContext
import org.jetbrains.uast.check.UastScanner
import org.jetbrains.uast.java.JavaUVariable
import org.jetbrains.uast.visitor.AbstractUastVisitor
import org.jetbrains.uast.visitor.UastVisitor
import java.util.*
@@ -195,6 +196,17 @@ open class ApiDetector : Detector(), UastScanner {
}
is UVariable -> {
if (declaration.kind != UastVariableKind.MEMBER) return
if (declaration is JavaUVariable
&& declaration.hasModifier(UastModifier.IMMUTABLE)
&& declaration.hasModifier(UastModifier.STATIC)
&& declaration.visibility == UastVisibility.PUBLIC
&& declaration.initializer.evaluate() != null) {
val type = declaration.type
// Kotlin inlines Java field values with the primitive types, so we don't need to check its version.
if (type.isPrimitive || type.isString) {
return
}
}
check(db.getFieldVersion(parentInternalName, declaration.name), parentClass)
}
}