Merge "Use the underlying language, instead of sourcePsi" into androidx-main
diff --git a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/AnnotationRetentionDetector.kt b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/AnnotationRetentionDetector.kt
index 50643b2..0b9a0bc 100644
--- a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/AnnotationRetentionDetector.kt
+++ b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/AnnotationRetentionDetector.kt
@@ -49,7 +49,7 @@
private inner class AnnotationChecker(val context: JavaContext) : UElementHandler() {
override fun visitAnnotation(node: UAnnotation) {
val annotated = node.uastParent as? UAnnotated ?: return
- val isKotlin = isKotlin(annotated.sourcePsi)
+ val isKotlin = isKotlin(annotated.lang)
val qualifiedName = node.qualifiedName
if (isKotlin && qualifiedName == JAVA_REQUIRES_OPT_IN_ANNOTATION) {
@@ -69,7 +69,7 @@
* if it does not.
*/
private fun validateAnnotationRetention(annotated: UAnnotated) {
- val isKotlin = isKotlin(annotated.sourcePsi)
+ val isKotlin = isKotlin(annotated.lang)
val annotations = context.evaluator.getAllAnnotations(annotated, false)
val annotationClass: String
diff --git a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
index 719a480..7b3fab7 100644
--- a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
+++ b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
@@ -473,7 +473,7 @@
// compiler handles that already. Allow either Java or Kotlin annotations, since
// we can enforce both and it's possible that a Kotlin-sourced experimental library
// is being used from Java without the Kotlin stdlib in the classpath.
- if (!isKotlin(usage.sourcePsi)) {
+ if (!isKotlin(usage.lang)) {
checkExperimentalUsage(
context,
annotation,
@@ -633,7 +633,7 @@
val lintFixes = fix().alternatives()
var addedFix = false
usage.getContainingUMethod()?.let { containingMethod ->
- val isKotlin = isKotlin(usage.sourcePsi)
+ val isKotlin = isKotlin(usage.lang)
val optInAnnotation = if (isKotlin) {
"@androidx.annotation.OptIn($annotation::class)"
} else {
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt
index 817bdc4..3c27b95 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/OnCreateDialogIncorrectCallbackDetector.kt
@@ -74,14 +74,14 @@
private inner class UastHandler(val context: JavaContext) : UElementHandler() {
override fun visitClass(node: UClass) {
- if (isKotlin(context.psiFile) &&
+ if (isKotlin(node.lang) &&
(node.sourcePsi as? KtClassOrObject)?.getSuperNames()?.firstOrNull() !=
DIALOG_FRAGMENT_CLASS
) {
return
}
- if (!isKotlin(context.psiFile) &&
+ if (!isKotlin(node.lang) &&
(node.uastSuperTypes.firstOrNull()?.type as? PsiClassReferenceType)
?.className != DIALOG_FRAGMENT_CLASS
) {
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UnsafeFragmentLifecycleObserverDetector.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UnsafeFragmentLifecycleObserverDetector.kt
index 8ed43ac..b07db9f 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UnsafeFragmentLifecycleObserverDetector.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UnsafeFragmentLifecycleObserverDetector.kt
@@ -178,7 +178,7 @@
) {
val argType = PsiTypesUtil.getPsiClass(arg.getExpressionType())
if (argType == call.getContainingUClass()?.javaPsi) {
- val methodFix = if (isKotlin(context.psiFile)) {
+ val methodFix = if (isKotlin(call.lang)) {
"viewLifecycleOwner"
} else {
"getViewLifecycleOwner()"
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseGetLayoutInflater.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseGetLayoutInflater.kt
index ffd14a5..853bac5 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseGetLayoutInflater.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseGetLayoutInflater.kt
@@ -31,6 +31,7 @@
import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiType
import org.jetbrains.uast.UCallExpression
+import org.jetbrains.uast.UElement
import org.jetbrains.uast.getContainingUClass
/**
@@ -85,8 +86,8 @@
issue = ISSUE,
location = context.getLocation(node),
message = "Use of LayoutInflater.from($methodParameter) detected. Consider using " +
- "${correctMethod(context)} instead",
- quickfixData = createFix(correctMethod(context), methodParameter)
+ "${correctMethod(node)} instead",
+ quickfixData = createFix(correctMethod(node), methodParameter)
)
}
@@ -105,13 +106,13 @@
issue = ISSUE,
location = context.getLocation(node),
message = "Use of LayoutInflater.from(Context) detected. Consider using " +
- "${correctMethod(context)} instead",
+ "${correctMethod(node)} instead",
quickfixData = null
)
}
- private fun correctMethod(context: JavaContext): String {
- return if (isKotlin(context.psiFile)) {
+ private fun correctMethod(context: UElement): String {
+ return if (isKotlin(context.lang)) {
"layoutInflater"
} else {
"getLayoutInflater()"
diff --git a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
index 193833b..82e4caf 100644
--- a/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
+++ b/fragment/fragment-lint/src/main/java/androidx/fragment/lint/UseRequireInsteadOfGet.kt
@@ -99,7 +99,6 @@
}
override fun createUastHandler(context: JavaContext): UElementHandler? {
- val isKotlin = isKotlin(context.psiFile)
return object : UElementHandler() {
/** This covers Kotlin accessor syntax expressions like "fragment.arguments" */
@@ -159,7 +158,7 @@
// Note we go up potentially two parents - the first one may just be the qualified reference expression
val nearestNonQualifiedReferenceParent =
skipParenthesizedExprUp(node.nearestNonQualifiedReferenceParent) ?: return
- if (isKotlin && nearestNonQualifiedReferenceParent.isNullCheckBlock()) {
+ if (isKotlin(node.lang) && nearestNonQualifiedReferenceParent.isNullCheckBlock()) {
// We're a double-bang expression (!!)
val parentSourceToReplace =
nearestNonQualifiedReferenceParent.asSourceString()
@@ -216,7 +215,7 @@
nearestNonQualifiedRefParent: UCallExpression
) = enclosingMethodCall.parameterList.parametersCount == 1 ||
(
- isKotlin &&
+ isKotlin(nearestNonQualifiedRefParent.lang) &&
nearestNonQualifiedRefParent.getArgumentForParameter(1) == null
)
diff --git a/lifecycle/lifecycle-livedata-core-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt b/lifecycle/lifecycle-livedata-core-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt
index ad4d5df..0a2556d 100644
--- a/lifecycle/lifecycle-livedata-core-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt
+++ b/lifecycle/lifecycle-livedata-core-lint/src/main/java/androidx/lifecycle/lint/NonNullableMutableLiveDataDetector.kt
@@ -119,7 +119,7 @@
}
override fun visitCallExpression(node: UCallExpression) {
- if (!isKotlin(node.sourcePsi) || !methods.contains(node.methodName) ||
+ if (!isKotlin(node.lang) || !methods.contains(node.methodName) ||
!context.evaluator.isMemberInSubClassOf(
node.resolve()!!, "androidx.lifecycle.LiveData", false
)
diff --git a/lifecycle/lifecycle-runtime-lint/src/main/java/androidx/lifecycle/lint/RepeatOnLifecycleDetector.kt b/lifecycle/lifecycle-runtime-lint/src/main/java/androidx/lifecycle/lint/RepeatOnLifecycleDetector.kt
index 7d42aa1..a2192eb 100644
--- a/lifecycle/lifecycle-runtime-lint/src/main/java/androidx/lifecycle/lint/RepeatOnLifecycleDetector.kt
+++ b/lifecycle/lifecycle-runtime-lint/src/main/java/androidx/lifecycle/lint/RepeatOnLifecycleDetector.kt
@@ -59,7 +59,7 @@
override fun applicableSuperClasses(): List<String>? = listOf(FRAGMENT_CLASS, ACTIVITY_CLASS)
override fun visitClass(context: JavaContext, declaration: UClass) {
- if (!isKotlin(context.psiFile)) return // Check only Kotlin files
+ if (!isKotlin(declaration.lang)) return // Check only Kotlin files
val visitedMethods = mutableSetOf<PsiMethod>()
declaration.methods.forEach { method ->