Skip to content

Commit e712582

Browse files
committed
Fix issue#3: Custom lint rules failed to work caused by Android X migrating
1 parent 31afbb4 commit e712582

26 files changed

+1940
-1488
lines changed

android_project_common.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ ext {
7474
'guava' : "23.5-android",
7575

7676
// debug
77-
'leakcanary' : "1.5.4",
77+
'leakcanary' : "1.6.3",
7878
'stetho' : "1.5.0",
7979
'ktlint' : "0.29.0",
8080

archLintRules/build.gradle

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
apply plugin: 'java-library'
2-
3-
sourceCompatibility = JavaVersion.VERSION_1_8
4-
targetCompatibility = JavaVersion.VERSION_1_8
1+
apply plugin: 'kotlin'
52

63
dependencies {
74
compileOnly "com.android.tools.lint:lint-api:${versions.lintLib}"
@@ -18,3 +15,11 @@ jar {
1815
attributes("Lint-Registry-v2": "me.ycdev.android.arch.lint.MyIssueRegistry")
1916
}
2017
}
18+
19+
test {
20+
testLogging {
21+
events "passed", "skipped", "failed", "standardOut", "standardError"
22+
outputs.upToDateWhen { false }
23+
showStandardStreams = true
24+
}
25+
}

archLintRules/src/main/java/me/ycdev/android/arch/lint/MyBaseActivityDetector.java

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package me.ycdev.android.arch.lint
2+
3+
import com.android.tools.lint.detector.api.Category
4+
import com.android.tools.lint.detector.api.Implementation
5+
import com.android.tools.lint.detector.api.Issue
6+
import com.android.tools.lint.detector.api.JavaContext
7+
import com.android.tools.lint.detector.api.Scope
8+
import com.android.tools.lint.detector.api.Severity
9+
import me.ycdev.android.arch.lint.base.InheritDetectorBase
10+
import org.jetbrains.uast.UElement
11+
import java.util.HashSet
12+
13+
class MyBaseActivityDetector : InheritDetectorBase() {
14+
override val applicableClasses: List<String> = arrayListOf("android.app.Activity")
15+
16+
override val wrapperClasses: HashSet<String> = hashSetOf(
17+
"me.ycdev.android.arch.activity.BaseActivity",
18+
"me.ycdev.android.arch.activity.PreferenceBaseActivity",
19+
"me.ycdev.android.arch.activity.AppCompatBaseActivity"
20+
)
21+
22+
override fun reportViolation(context: JavaContext, element: UElement) {
23+
context.report(
24+
ISSUE, element, context.getNameLocation(element),
25+
"Please use the base classes for Activity."
26+
)
27+
}
28+
29+
companion object {
30+
internal val ISSUE = Issue.create(
31+
"MyBaseActivity",
32+
"Base classes for Activity should be used.",
33+
"Please use the base classes for Activity." + " So that we can do some unified behaviors.",
34+
Category.CORRECTNESS, 5, Severity.ERROR,
35+
Implementation(MyBaseActivityDetector::class.java, Scope.JAVA_FILE_SCOPE)
36+
)
37+
}
38+
}

archLintRules/src/main/java/me/ycdev/android/arch/lint/MyBroadcastHelperDetector.java

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package me.ycdev.android.arch.lint
2+
3+
import com.android.tools.lint.detector.api.Category
4+
import com.android.tools.lint.detector.api.Implementation
5+
import com.android.tools.lint.detector.api.Issue
6+
import com.android.tools.lint.detector.api.JavaContext
7+
import com.android.tools.lint.detector.api.Scope
8+
import com.android.tools.lint.detector.api.Severity
9+
import me.ycdev.android.arch.lint.base.WrapperDetectorBase
10+
import org.jetbrains.uast.UElement
11+
12+
class MyBroadcastHelperDetector : WrapperDetectorBase() {
13+
override val applicableMethods = arrayListOf("registerReceiver", "sendBroadcast")
14+
15+
override val wrapperClassName = "me.ycdev.android.lib.common.wrapper.BroadcastHelper"
16+
17+
override val targetClassNames = arrayOf("android.content.Context")
18+
19+
override fun reportViolation(context: JavaContext, element: UElement) {
20+
context.report(
21+
ISSUE, element, context.getLocation(element),
22+
"Please use the wrapper class 'BroadcastHelper'."
23+
)
24+
}
25+
26+
companion object {
27+
internal val ISSUE = Issue.create(
28+
"MyBroadcastHelper",
29+
"BroadcastHelper should be used.",
30+
"Please use the wrapper class 'BroadcastHelper' to register broadcast receivers"
31+
+ " and send broadcasts to avoid security issues.",
32+
Category.CORRECTNESS, 5, Severity.ERROR,
33+
Implementation(MyBroadcastHelperDetector::class.java, Scope.JAVA_FILE_SCOPE)
34+
)
35+
}
36+
}

archLintRules/src/main/java/me/ycdev/android/arch/lint/MyIntentHelperDetector.java

Lines changed: 0 additions & 84 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package me.ycdev.android.arch.lint
2+
3+
import com.android.tools.lint.detector.api.Category
4+
import com.android.tools.lint.detector.api.Implementation
5+
import com.android.tools.lint.detector.api.Issue
6+
import com.android.tools.lint.detector.api.JavaContext
7+
import com.android.tools.lint.detector.api.Scope
8+
import com.android.tools.lint.detector.api.Severity
9+
import me.ycdev.android.arch.lint.base.WrapperDetectorBase
10+
import org.jetbrains.uast.UElement
11+
12+
class MyIntentHelperDetector : WrapperDetectorBase() {
13+
override val applicableMethods = arrayListOf(
14+
"hasExtra",
15+
"getBooleanArrayExtra",
16+
"getBooleanExtra",
17+
"getBundleExtra",
18+
"getByteArrayExtra",
19+
"getByteExtra",
20+
"getCharArrayExtra",
21+
"getCharExtra",
22+
"getCharSequenceArrayExtra",
23+
"getCharSequenceArrayListExtra",
24+
"getCharSequenceExtra",
25+
"getDoubleArrayExtra",
26+
"getDoubleExtra",
27+
"getExtra",
28+
"getExtras",
29+
"getFloatArrayExtra",
30+
"getFloatExtra",
31+
"getIBinderExtra",
32+
"getIntArrayExtra",
33+
"getIBinderExtra",
34+
"getIntArrayExtra",
35+
"getIntegerArrayListExtra",
36+
"getIntExtra",
37+
"getLongArrayExtra",
38+
"getLongExtra",
39+
"getParcelableArrayExtra",
40+
"getParcelableArrayListExtra",
41+
"getParcelableExtra",
42+
"getSerializableExtra",
43+
"getShortArrayExtra",
44+
"getShortExtra",
45+
"getStringArrayExtra",
46+
"getStringArrayListExtra",
47+
"getStringExtra"
48+
)
49+
50+
override val wrapperClassName = "me.ycdev.android.lib.common.wrapper.IntentHelper"
51+
52+
override val targetClassNames = arrayOf("android.content.Intent")
53+
54+
override fun reportViolation(context: JavaContext, element: UElement) {
55+
context.report(
56+
ISSUE, element, context.getLocation(element),
57+
"Please use the wrapper class 'IntentHelper'."
58+
)
59+
}
60+
61+
companion object {
62+
internal val ISSUE = Issue.create(
63+
"MyIntentHelper",
64+
"IntentHelper should be used.",
65+
"Please use the wrapper class 'IntentHelper' to get Intent extras" + " to avoid security issues.",
66+
Category.CORRECTNESS, 5, Severity.ERROR,
67+
Implementation(MyIntentHelperDetector::class.java, Scope.JAVA_FILE_SCOPE)
68+
)
69+
}
70+
}

archLintRules/src/main/java/me/ycdev/android/arch/lint/MyIssueRegistry.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)