diff options
| author | 2022-11-22 13:43:11 +0000 | |
|---|---|---|
| committer | 2022-11-28 23:53:03 +0000 | |
| commit | afc3a227828fe73ceedaa352105e3fde9f43b899 (patch) | |
| tree | 1267517ed827461cad2659c503a4b711d05fceca | |
| parent | b769860c31cec33df924204c62d555aa1bf26e88 (diff) | |
Create AndroidGlobalLintChecker
This change creates a separate lint jar "AndroidGlobalLintChecker". This set of custom checks that is intended to be global. These checks should run across the entire tree, not just the framework.
- separate lint checking code broadly into "common", "framework", and
"global"
- publish AndroidGlobalLintChecker into the android distribution for
consumption by prebuilts/cmdline-tools
Bug: 236558918
Test: AndroidGlobalLintCheckerTest
Change-Id: Ib1606a7bc8adfab2f13974e7366288a4e44bbfa2
| -rw-r--r-- | tools/lint/common/Android.bp | 29 | ||||
| -rw-r--r-- | tools/lint/common/src/main/java/com/google/android/lint/Constants.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/Constants.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/common/src/main/java/com/google/android/lint/PermissionMethodUtils.kt | 36 | ||||
| -rw-r--r-- | tools/lint/common/src/main/java/com/google/android/lint/model/Method.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/model/Method.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/fix/Android.bp | 28 | ||||
| -rw-r--r-- | tools/lint/framework/Android.bp (renamed from tools/lint/Android.bp) | 13 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt) | 4 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/Method.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/parcel/Method.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/framework/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/Android.bp | 57 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/AndroidGlobalIssueRegistry.kt | 48 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/Constants.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt) | 2 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt) | 19 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt (renamed from tools/lint/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt) | 0 | ||||
| -rw-r--r-- | tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt (renamed from tools/lint/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt) | 0 |
33 files changed, 209 insertions, 27 deletions
diff --git a/tools/lint/common/Android.bp b/tools/lint/common/Android.bp new file mode 100644 index 000000000000..898f88b8759c --- /dev/null +++ b/tools/lint/common/Android.bp @@ -0,0 +1,29 @@ +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +java_library_host { + name: "AndroidCommonLint", + srcs: ["src/main/java/**/*.kt"], + libs: ["lint_api"], + kotlincflags: ["-Xjvm-default=all"], +} diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/Constants.kt b/tools/lint/common/src/main/java/com/google/android/lint/Constants.kt index 3d5d01c9b7a0..3d5d01c9b7a0 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/Constants.kt +++ b/tools/lint/common/src/main/java/com/google/android/lint/Constants.kt diff --git a/tools/lint/common/src/main/java/com/google/android/lint/PermissionMethodUtils.kt b/tools/lint/common/src/main/java/com/google/android/lint/PermissionMethodUtils.kt new file mode 100644 index 000000000000..720f8356f050 --- /dev/null +++ b/tools/lint/common/src/main/java/com/google/android/lint/PermissionMethodUtils.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.lint + +import com.android.tools.lint.detector.api.getUMethod +import org.jetbrains.uast.UCallExpression +import org.jetbrains.uast.UMethod +import org.jetbrains.uast.UParameter + +fun isPermissionMethodCall(callExpression: UCallExpression): Boolean { + val method = callExpression.resolve()?.getUMethod() ?: return false + return hasPermissionMethodAnnotation(method) +} + +fun hasPermissionMethodAnnotation(method: UMethod): Boolean = method.annotations + .any { + it.hasQualifiedName(ANNOTATION_PERMISSION_METHOD) + } + +fun hasPermissionNameAnnotation(parameter: UParameter) = parameter.annotations.any { + it.hasQualifiedName(ANNOTATION_PERMISSION_NAME) +} diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/model/Method.kt b/tools/lint/common/src/main/java/com/google/android/lint/model/Method.kt index 3939b6109eaa..3939b6109eaa 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/model/Method.kt +++ b/tools/lint/common/src/main/java/com/google/android/lint/model/Method.kt diff --git a/tools/lint/fix/Android.bp b/tools/lint/fix/Android.bp new file mode 100644 index 000000000000..5f6c6f779f85 --- /dev/null +++ b/tools/lint/fix/Android.bp @@ -0,0 +1,28 @@ +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +python_binary_host { + name: "lint_fix", + main: "lint_fix.py", + srcs: ["lint_fix.py"], +} diff --git a/tools/lint/Android.bp b/tools/lint/framework/Android.bp index 96618f413db1..7f27e8a57d19 100644 --- a/tools/lint/Android.bp +++ b/tools/lint/framework/Android.bp @@ -1,4 +1,4 @@ -// Copyright (C) 2021 The Android Open Source Project +// Copyright (C) 2022 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,6 +29,11 @@ java_library_host { "auto_service_annotations", "lint_api", ], + static_libs: [ + "AndroidCommonLint", + // TODO: remove once b/236558918 is resolved and the below checks actually run globally + "AndroidGlobalLintChecker", + ], kotlincflags: ["-Xjvm-default=all"], } @@ -51,9 +56,3 @@ java_test_host { unit_test: true, }, } - -python_binary_host { - name: "lint_fix", - main: "fix/lint_fix.py", - srcs: ["fix/lint_fix.py"], -} diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt index 413e19717d50..413e19717d50 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/AndroidFrameworkIssueRegistry.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt index 0c375c358e61..0c375c358e61 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingIdentityTokenDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt index fe567da7c017..fe567da7c017 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt index 48540b1da565..48540b1da565 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/PackageVisibilityDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt index 1b0f03564c3b..e12ec3d4a77c 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/PermissionMethodDetector.kt @@ -26,7 +26,6 @@ import com.android.tools.lint.detector.api.Scope import com.android.tools.lint.detector.api.Severity import com.android.tools.lint.detector.api.SourceCodeScanner import com.android.tools.lint.detector.api.getUMethod -import com.google.android.lint.aidl.hasPermissionMethodAnnotation import com.intellij.psi.PsiType import org.jetbrains.uast.UAnnotation import org.jetbrains.uast.UBlockExpression @@ -193,5 +192,8 @@ class PermissionMethodDetector : Detector(), SourceCodeScanner { else -> false } } + + private fun hasPermissionMethodAnnotation(method: UMethod): Boolean = method.annotations + .any { it.hasQualifiedName(ANNOTATION_PERMISSION_METHOD) } } } diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt index c3e0428316c3..c3e0428316c3 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/RegisterReceiverFlagDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt index 06c098df385d..06c098df385d 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/CallMigrators.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/Method.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/Method.kt index 0826e8e74431..0826e8e74431 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/Method.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/Method.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt index f92826316be4..f92826316be4 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt +++ b/tools/lint/framework/checks/src/main/java/com/google/android/lint/parcel/SaferParcelChecker.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt b/tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt index d90f3e31baf9..d90f3e31baf9 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt +++ b/tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingIdentityTokenDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt b/tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt index e72f38416310..e72f38416310 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt +++ b/tools/lint/framework/checks/src/test/java/com/google/android/lint/CallingSettingsNonUserGetterMethodsIssueDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt b/tools/lint/framework/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt index a70644ab8532..a70644ab8532 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt +++ b/tools/lint/framework/checks/src/test/java/com/google/android/lint/PackageVisibilityDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt b/tools/lint/framework/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt index b76342a81972..b76342a81972 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt +++ b/tools/lint/framework/checks/src/test/java/com/google/android/lint/RegisterReceiverFlagDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt b/tools/lint/framework/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt index e686695ca804..e686695ca804 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt +++ b/tools/lint/framework/checks/src/test/java/com/google/android/lint/parcel/SaferParcelCheckerTest.kt diff --git a/tools/lint/global/Android.bp b/tools/lint/global/Android.bp new file mode 100644 index 000000000000..3756abea2330 --- /dev/null +++ b/tools/lint/global/Android.bp @@ -0,0 +1,57 @@ +// Copyright (C) 2022 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "frameworks_base_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["frameworks_base_license"], +} + +java_library_host { + name: "AndroidGlobalLintChecker", + srcs: ["checks/src/main/java/**/*.kt"], + plugins: ["auto_service_plugin"], + libs: [ + "auto_service_annotations", + "lint_api", + ], + static_libs: ["AndroidCommonLint"], + kotlincflags: ["-Xjvm-default=all"], + dist: { + targets: ["droid"], + }, +} + +java_test_host { + name: "AndroidGlobalLintCheckerTest", + // TODO(b/239881504): Since this test was written, Android + // Lint was updated, and now includes classes that were + // compiled for java 15. The soong build doesn't support + // java 15 yet, so we can't compile against "lint". Disable + // the test until java 15 is supported. + enabled: false, + srcs: ["checks/src/test/java/**/*.kt"], + static_libs: [ + "AndroidGlobalLintChecker", + "junit", + "lint", + "lint_tests", + ], + test_options: { + unit_test: true, + }, +} diff --git a/tools/lint/global/checks/src/main/java/com/google/android/lint/AndroidGlobalIssueRegistry.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/AndroidGlobalIssueRegistry.kt new file mode 100644 index 000000000000..b377d503f318 --- /dev/null +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/AndroidGlobalIssueRegistry.kt @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.lint + +import com.android.tools.lint.client.api.IssueRegistry +import com.android.tools.lint.client.api.Vendor +import com.android.tools.lint.detector.api.CURRENT_API +import com.google.android.lint.aidl.EnforcePermissionDetector +import com.google.android.lint.aidl.EnforcePermissionHelperDetector +import com.google.android.lint.aidl.SimpleManualPermissionEnforcementDetector +import com.google.auto.service.AutoService + +@AutoService(IssueRegistry::class) +@Suppress("UnstableApiUsage") +class AndroidGlobalIssueRegistry : IssueRegistry() { + override val issues = listOf( + EnforcePermissionDetector.ISSUE_MISSING_ENFORCE_PERMISSION, + EnforcePermissionDetector.ISSUE_MISMATCHING_ENFORCE_PERMISSION, + EnforcePermissionHelperDetector.ISSUE_ENFORCE_PERMISSION_HELPER, + SimpleManualPermissionEnforcementDetector.ISSUE_USE_ENFORCE_PERMISSION_ANNOTATION, + ) + + override val api: Int + get() = CURRENT_API + + override val minApi: Int + get() = 8 + + override val vendor: Vendor = Vendor( + vendorName = "Android", + feedbackUrl = "http://b/issues/new?component=315013", + contact = "repsonsible-apis@google.com" + ) +}
\ No newline at end of file diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt index 227cdcdc2fec..227cdcdc2fec 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/AidlImplementationDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/Constants.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt index 8ee3763e5079..8ee3763e5079 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/Constants.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/Constants.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt index bba819cd9096..bba819cd9096 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt index d120e1d41c99..f1b634898ec9 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionFix.kt @@ -19,6 +19,8 @@ package com.google.android.lint.aidl import com.android.tools.lint.detector.api.JavaContext import com.android.tools.lint.detector.api.Location import com.android.tools.lint.detector.api.getUMethod +import com.google.android.lint.hasPermissionNameAnnotation +import com.google.android.lint.isPermissionMethodCall import org.jetbrains.kotlin.psi.psiUtil.parameterIndex import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.evaluateString diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt index 3c2ea1db0ad6..3c2ea1db0ad6 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionHelperDetector.kt diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt index edbdd8d2adf3..250ca78bae5e 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/EnforcePermissionUtils.kt @@ -16,14 +16,9 @@ package com.google.android.lint.aidl -import com.android.tools.lint.detector.api.getUMethod -import com.google.android.lint.ANNOTATION_PERMISSION_METHOD -import com.google.android.lint.ANNOTATION_PERMISSION_NAME import com.google.android.lint.CLASS_STUB import com.intellij.psi.PsiAnonymousClass -import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.UMethod -import org.jetbrains.uast.UParameter /** * Given a UMethod, determine if this method is @@ -51,17 +46,3 @@ private fun isInClassCalledStub(node: UMethod): Boolean { it.referenceName == CLASS_STUB } ?: false } - -fun isPermissionMethodCall(callExpression: UCallExpression): Boolean { - val method = callExpression.resolve()?.getUMethod() ?: return false - return hasPermissionMethodAnnotation(method) -} - -fun hasPermissionMethodAnnotation(method: UMethod): Boolean = method.annotations - .any { - it.hasQualifiedName(ANNOTATION_PERMISSION_METHOD) - } - -fun hasPermissionNameAnnotation(parameter: UParameter) = parameter.annotations.any { - it.hasQualifiedName(ANNOTATION_PERMISSION_NAME) -} diff --git a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt index 4c0cbe7b3adf..4c0cbe7b3adf 100644 --- a/tools/lint/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt +++ b/tools/lint/global/checks/src/main/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetector.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt index 3c1d1e8e8a59..3c1d1e8e8a59 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt +++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt index 31e484628a04..31e484628a04 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt +++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/EnforcePermissionHelperDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt index 150fc264506f..150fc264506f 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt +++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/SimpleManualPermissionEnforcementDetectorTest.kt diff --git a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt index bd6b1952847c..bd6b1952847c 100644 --- a/tools/lint/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt +++ b/tools/lint/global/checks/src/test/java/com/google/android/lint/aidl/Stubs.kt |