@@ -12,17 +12,18 @@ import com.android.tools.lint.detector.api.Severity
1212import com.android.tools.lint.detector.api.SourceCodeScanner
1313import com.android.tools.lint.detector.api.isJava
1414import com.intellij.psi.PsiAnnotation
15+ import com.intellij.psi.PsiEnumConstant
1516import com.intellij.psi.PsiPrimitiveType
1617import org.jetbrains.uast.UAnnotated
1718import org.jetbrains.uast.UAnnotationMethod
1819import org.jetbrains.uast.UAnonymousClass
1920import org.jetbrains.uast.UElement
20- import org.jetbrains.uast.UEnumConstant
2121import org.jetbrains.uast.UField
2222import org.jetbrains.uast.UMethod
2323import org.jetbrains.uast.UParameter
2424import org.jetbrains.uast.UVariable
2525import org.jetbrains.uast.getContainingUClass
26+ import org.jetbrains.uast.getContainingUMethod
2627
2728class MissingNullAnnotationDetector : Detector (), SourceCodeScanner {
2829 override fun getApplicableUastTypes (): List <Class <out UElement >> = listOf (
@@ -101,7 +102,7 @@ class MissingNullAnnotationDetector : Detector(), SourceCodeScanner {
101102private val UVariable .isPrimitive
102103 get() = type is PsiPrimitiveType
103104private val UVariable .isEnum
104- get() = this is UEnumConstant
105+ get() = this is PsiEnumConstant
105106private val UVariable .isInjected
106107 get() = annotations.hasInject
107108private val UVariable .isConstant
@@ -111,15 +112,23 @@ private val UVariable.isInitializedFinalField
111112private val UVariable .requiresNullAnnotation
112113 get() = ! (isPrimitive || isEnum || isConstant || isInitializedFinalField || isInjected)
113114
115+ /* UParameter Extensions */
116+ private val UParameter .requiresNullAnnotation
117+ get() = this .getContainingUMethod()?.uastBody != null
118+ && (this as UVariable ).requiresNullAnnotation
119+
114120/* UMethod Extensions */
115121private val UMethod .isPrimitive
116122 get() = returnType is PsiPrimitiveType
117123private val UMethod .requiresNullAnnotation
118- get() = this !is UAnnotationMethod && ! isPrimitive && ! isConstructor
124+ get() = this !is UAnnotationMethod && uastBody != null && ! isPrimitive && ! isConstructor
125+ && ! isEnum
119126private val UMethod .isAnonymousConstructor
120127 get() = isConstructor && getContainingUClass()?.let { it is UAnonymousClass } == true
121128private val UMethod .isInjected
122129 get() = annotations.hasInject
130+ private val UMethod .isEnum
131+ get() = returnType is PsiEnumConstant
123132
124133/* UAnnotated Extensions */
125134private val UAnnotated .isNullAnnotated
0 commit comments