summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorriking <rikingcoding@gmail.com>2018-08-26 09:47:05 -0700
committerriking <rikingcoding@gmail.com>2018-08-26 19:18:31 -0700
commitc5ecb718ac9615ca2cb0ce331e8588f48cd83665 (patch)
tree1a59186e8aa5575813ce7adec01f9dbcf34156e0
parent31b4461ff6cdedd3ef557b4bcc0874c21975fec4 (diff)
Add Android code style enforcement to lint.sh
This requires buildbot changes: the path to the Android Studio installation must be supplied in an environment variable. Modified files are copied out to a temporary directory, Android Studio is asked to format the files, and a git diff is performed.
-rw-r--r--Source/Android/code-style-java.xml204
-rwxr-xr-xTools/lint.sh41
2 files changed, 245 insertions, 0 deletions
diff --git a/Source/Android/code-style-java.xml b/Source/Android/code-style-java.xml
new file mode 100644
index 0000000000..f51bcf3281
--- /dev/null
+++ b/Source/Android/code-style-java.xml
@@ -0,0 +1,204 @@
+<code_scheme name="Dolphin-Java">
+ <option name="FIELD_NAME_PREFIX" value="m" />
+ <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+ <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
+ <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
+ <value />
+ </option>
+ <option name="IMPORT_LAYOUT_TABLE">
+ <value>
+ <package name="android" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="com" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="junit" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="net" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="org" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="java" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="javax" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="" withSubpackages="true" static="false" />
+ <emptyLine />
+ <package name="" withSubpackages="true" static="true" />
+ <emptyLine />
+ </value>
+ </option>
+ <option name="RIGHT_MARGIN" value="100" />
+ <AndroidXmlCodeStyleSettings>
+ <option name="USE_CUSTOM_SETTINGS" value="true" />
+ </AndroidXmlCodeStyleSettings>
+ <XML>
+ <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
+ </XML>
+ <codeStyleSettings language="JAVA">
+ <option name="BRACE_STYLE" value="2" />
+ <option name="CLASS_BRACE_STYLE" value="2" />
+ <option name="METHOD_BRACE_STYLE" value="2" />
+ <option name="ELSE_ON_NEW_LINE" value="true" />
+ <option name="CATCH_ON_NEW_LINE" value="true" />
+ <indentOptions>
+ <option name="USE_TAB_CHARACTER" value="true" />
+ </indentOptions>
+ </codeStyleSettings>
+ <codeStyleSettings language="XML">
+ <option name="FORCE_REARRANGE_MODE" value="1" />
+ <indentOptions>
+ <option name="CONTINUATION_INDENT_SIZE" value="4" />
+ </indentOptions>
+ <arrangement>
+ <rules>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>xmlns:android</NAME>
+ <XML_NAMESPACE>Namespace:</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>xmlns:.*</NAME>
+ <XML_NAMESPACE>Namespace:</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:id</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:name</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>name</NAME>
+ <XML_NAMESPACE>^$</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>style</NAME>
+ <XML_NAMESPACE>^$</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*</NAME>
+ <XML_NAMESPACE>^$</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:layout_width</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:layout_height</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:layout_.*</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:width</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*:height</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*</NAME>
+ <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ <section>
+ <rule>
+ <match>
+ <AND>
+ <NAME>.*</NAME>
+ <XML_NAMESPACE>.*</XML_NAMESPACE>
+ </AND>
+ </match>
+ <order>BY_NAME</order>
+ </rule>
+ </section>
+ </rules>
+ </arrangement>
+ </codeStyleSettings>
+</code_scheme> \ No newline at end of file
diff --git a/Tools/lint.sh b/Tools/lint.sh
index 795dfdd0b5..3fe608f613 100755
--- a/Tools/lint.sh
+++ b/Tools/lint.sh
@@ -41,6 +41,23 @@ if [ $FORCE -eq 0 ]; then
fi
fi
+did_java_setup=0
+JAVA_CODESTYLE_FILE="./$(git rev-parse --show-cdup)/Source/Android/code-style-java.xml"
+java_temp_dir=""
+
+function java_setup() {
+ if [ "$did_java_setup" = 1 ]; then
+ return
+ fi
+ if [ ! -x "${ANDROID_STUDIO_ROOT}/bin/format.sh" ]; then
+ echo >&2 "error: must set ANDROID_STUDIO_ROOT environment variable to the IDE installation directory (current: ${ANDROID_STUDIO_ROOT})"
+ exit 1
+ fi
+ java_temp_dir="$(mktemp -d)"
+ trap "{ rm -r ${java_temp_dir}; }" EXIT
+ did_java_setup=1
+}
+
fail=0
# Default to staged files, unless a commit was passed.
@@ -49,9 +66,29 @@ COMMIT=${1:---cached}
# Get modified files (must be on own line for exit-code handling)
modified_files=$(git diff --name-only --diff-filter=ACMRTUXB $COMMIT)
+function java_check() {
+ echo >&0 "Java changes detected, running Android Studio formatter." || true
+ "${ANDROID_STUDIO_ROOT}/bin/format.sh" -s "${JAVA_CODESTYLE_FILE}" -R "${java_temp_dir}" >/dev/null
+
+ # ignore 'added'/'deleted' files, we copied only files of interest to the tmpdir
+ d=$(git diff --diff-filter=ad . "${java_temp_dir}" || true)
+ if ! [ -z "${d}" ]; then
+ echo "!!! Java code is not compliant to coding style, here is the fix:"
+ echo "${d}"
+ fail=1
+ fi
+}
+
# Loop through each modified file.
for f in ${modified_files}; do
# Filter them.
+ if echo "${f}" | egrep -q "[.]java$"; then
+ # Copy Java files to a temporary directory
+ java_setup
+ mkdir -p $(dirname "${java_temp_dir}/${f}")
+ cp "${f}" "${java_temp_dir}/${f}"
+ continue
+ fi
if ! echo "${f}" | egrep -q "[.](cpp|h|mm)$"; then
continue
fi
@@ -76,4 +113,8 @@ for f in ${modified_files}; do
fi
done
+if [ "${did_java_setup}" = 1 ]; then
+ java_check
+fi
+
exit ${fail}