It's a python script that runs the framework linter, and then copies modified files back into the source tree.
Why python, you ask? Because python is cool ¯_(ツ)_/¯.
Lint is not allowed to modify source files directly via lint's --apply-suggestions
flag. As a compromise, soong zips up the (potentially) modified sources and leaves them in an intermediate directory. This script runs the lint, unpacks those files, and copies them back into the tree.
WARNING: You probably want to commit/stash any changes to your working tree before doing this...
From this directory, run python lint_fix.py -h
. The script's help output explains things that are omitted here.
Alternatively, there is a python binary target you can build to make this available anywhere in your tree:
m lint_fix lint_fix -h
Gotcha: You must have run source build/envsetup.sh
and lunch
first.
Example: lint_fix frameworks/base/services/core/services.core.unboosted UseEnforcePermissionAnnotation --dry-run
( export ANDROID_LINT_CHECK=UseEnforcePermissionAnnotation; cd $ANDROID_BUILD_TOP; source build/envsetup.sh; rm out/soong/.intermediates/frameworks/base/services/core/services.core.unboosted/android_common/lint/lint-report.html; m out/soong/.intermediates/frameworks/base/services/core/services.core.unboosted/android_common/lint/lint-report.html; cd out/soong/.intermediates/frameworks/base/services/core/services.core.unboosted/android_common/lint; unzip suggested-fixes.zip -d suggested-fixes; cd suggested-fixes; find . -path ./out -prune -o -name '*.java' -print | xargs -n 1 sh -c 'cp $1 $ANDROID_BUILD_TOP/$1' --; rm -rf suggested-fixes )