@@ -12,17 +12,18 @@ import com.android.tools.lint.detector.api.Severity
12
12
import com.android.tools.lint.detector.api.SourceCodeScanner
13
13
import com.android.tools.lint.detector.api.isJava
14
14
import com.intellij.psi.PsiAnnotation
15
+ import com.intellij.psi.PsiEnumConstant
15
16
import com.intellij.psi.PsiPrimitiveType
16
17
import org.jetbrains.uast.UAnnotated
17
18
import org.jetbrains.uast.UAnnotationMethod
18
19
import org.jetbrains.uast.UAnonymousClass
19
20
import org.jetbrains.uast.UElement
20
- import org.jetbrains.uast.UEnumConstant
21
21
import org.jetbrains.uast.UField
22
22
import org.jetbrains.uast.UMethod
23
23
import org.jetbrains.uast.UParameter
24
24
import org.jetbrains.uast.UVariable
25
25
import org.jetbrains.uast.getContainingUClass
26
+ import org.jetbrains.uast.getContainingUMethod
26
27
27
28
class MissingNullAnnotationDetector : Detector (), SourceCodeScanner {
28
29
override fun getApplicableUastTypes (): List <Class <out UElement >> = listOf (
@@ -101,7 +102,7 @@ class MissingNullAnnotationDetector : Detector(), SourceCodeScanner {
101
102
private val UVariable .isPrimitive
102
103
get() = type is PsiPrimitiveType
103
104
private val UVariable .isEnum
104
- get() = this is UEnumConstant
105
+ get() = this is PsiEnumConstant
105
106
private val UVariable .isInjected
106
107
get() = annotations.hasInject
107
108
private val UVariable .isConstant
@@ -111,15 +112,23 @@ private val UVariable.isInitializedFinalField
111
112
private val UVariable .requiresNullAnnotation
112
113
get() = ! (isPrimitive || isEnum || isConstant || isInitializedFinalField || isInjected)
113
114
115
+ /* UParameter Extensions */
116
+ private val UParameter .requiresNullAnnotation
117
+ get() = this .getContainingUMethod()?.uastBody != null
118
+ && (this as UVariable ).requiresNullAnnotation
119
+
114
120
/* UMethod Extensions */
115
121
private val UMethod .isPrimitive
116
122
get() = returnType is PsiPrimitiveType
117
123
private val UMethod .requiresNullAnnotation
118
- get() = this !is UAnnotationMethod && ! isPrimitive && ! isConstructor
124
+ get() = this !is UAnnotationMethod && uastBody != null && ! isPrimitive && ! isConstructor
125
+ && ! isEnum
119
126
private val UMethod .isAnonymousConstructor
120
127
get() = isConstructor && getContainingUClass()?.let { it is UAnonymousClass } == true
121
128
private val UMethod .isInjected
122
129
get() = annotations.hasInject
130
+ private val UMethod .isEnum
131
+ get() = returnType is PsiEnumConstant
123
132
124
133
/* UAnnotated Extensions */
125
134
private val UAnnotated .isNullAnnotated
0 commit comments