Skip to content

Commit b374448

Browse files
authored
Merge pull request #19 from wordpress-mobile/fix/ignore-enums-in-nullannotation-detector
Ignore enums in null annotation detector
2 parents e668b09 + 13b02ce commit b374448

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Pluggable lint module for WordPress-Android.
66
* In your build.gradle:
77
```groovy
88
dependencies {
9-
lintChecks 'org.wordpress:lint:2.0.0' // use version 2.0.0
9+
lintChecks 'org.wordpress:lint:2.1.0' // use version 2.1.0
1010
}
1111
```
1212

WordPressLint/src/main/java/org/wordpress/android/lint/MissingNullAnnotationDetector.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,18 @@ import com.android.tools.lint.detector.api.Severity
1212
import com.android.tools.lint.detector.api.SourceCodeScanner
1313
import com.android.tools.lint.detector.api.isJava
1414
import com.intellij.psi.PsiAnnotation
15+
import com.intellij.psi.PsiEnumConstant
1516
import com.intellij.psi.PsiPrimitiveType
1617
import org.jetbrains.uast.UAnnotated
1718
import org.jetbrains.uast.UAnnotationMethod
1819
import org.jetbrains.uast.UAnonymousClass
1920
import org.jetbrains.uast.UElement
20-
import org.jetbrains.uast.UEnumConstant
2121
import org.jetbrains.uast.UField
2222
import org.jetbrains.uast.UMethod
2323
import org.jetbrains.uast.UParameter
2424
import org.jetbrains.uast.UVariable
2525
import org.jetbrains.uast.getContainingUClass
26+
import org.jetbrains.uast.getContainingUMethod
2627

2728
class MissingNullAnnotationDetector : Detector(), SourceCodeScanner {
2829
override fun getApplicableUastTypes(): List<Class<out UElement>> = listOf(
@@ -101,7 +102,7 @@ class MissingNullAnnotationDetector : Detector(), SourceCodeScanner {
101102
private val UVariable.isPrimitive
102103
get() = type is PsiPrimitiveType
103104
private val UVariable.isEnum
104-
get() = this is UEnumConstant
105+
get() = this is PsiEnumConstant
105106
private val UVariable.isInjected
106107
get() = annotations.hasInject
107108
private val UVariable.isConstant
@@ -111,15 +112,23 @@ private val UVariable.isInitializedFinalField
111112
private 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 */
115121
private val UMethod.isPrimitive
116122
get() = returnType is PsiPrimitiveType
117123
private val UMethod.requiresNullAnnotation
118-
get() = this !is UAnnotationMethod && !isPrimitive && !isConstructor
124+
get() = this !is UAnnotationMethod && uastBody != null && !isPrimitive && !isConstructor
125+
&& !isEnum
119126
private val UMethod.isAnonymousConstructor
120127
get() = isConstructor && getContainingUClass()?.let { it is UAnonymousClass } == true
121128
private val UMethod.isInjected
122129
get() = annotations.hasInject
130+
private val UMethod.isEnum
131+
get() = returnType is PsiEnumConstant
123132

124133
/* UAnnotated Extensions */
125134
private val UAnnotated.isNullAnnotated

WordPressLint/src/test/java/org/wordpress/android/lint/MissingNullAnnotationDetectorTest.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,24 @@ class MissingNullAnnotationDetectorTest {
271271
.run()
272272
.expectClean()
273273
}
274+
@Test
275+
fun `it ignores enums`() {
276+
lint().files(LintDetectorTest.java("""
277+
package test;
278+
279+
public enum TrafficLightState {
280+
RED,
281+
YELLOW,
282+
GREEN
283+
}
284+
""").indented())
285+
.issues(
286+
MissingNullAnnotationDetector.MISSING_FIELD_ANNOTATION,
287+
MissingNullAnnotationDetector.MISSING_CONSTRUCTOR_PARAMETER_ANNOTATION,
288+
MissingNullAnnotationDetector.MISSING_METHOD_PARAMETER_ANNOTATION,
289+
MissingNullAnnotationDetector.MISSING_METHOD_RETURN_TYPE_ANNOTATION
290+
)
291+
.run()
292+
.expectClean()
293+
}
274294
}

0 commit comments

Comments
 (0)