summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorMike Dodd <mdodd@google.com>2015-08-11 11:16:59 -0700
committerMike Dodd <mdodd@google.com>2015-08-12 12:47:26 -0700
commitd3b009ae55651f1e60950342468e3c37fdeb0796 (patch)
treebc4b489af52d0e2521e21167d2ad76a47256f348 /build
parentef8c7abbcfc9c770385d6609a4b4bc70240ebdc4 (diff)
downloadpackages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.zip
packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.gz
packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.bz2
Initial checkin of AOSP Messaging app.
b/23110861 Change-Id: I11db999bd10656801e618f78ab2b2ef74136fff1
Diffstat (limited to 'build')
-rw-r--r--build/README8
-rw-r--r--build/android_lint.mk59
-rw-r--r--build/android_lint.xslt40
-rwxr-xr-xbuild/colorize_errors.py42
-rw-r--r--build/gcheckstyle.mk45
-rw-r--r--build/gcheckstyle/google-style-checker_deploy.jarbin0 -> 3621944 bytes
-rw-r--r--build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml411
-rwxr-xr-xbuild/process_style_output.py38
8 files changed, 643 insertions, 0 deletions
diff --git a/build/README b/build/README
new file mode 100644
index 0000000..3398014
--- /dev/null
+++ b/build/README
@@ -0,0 +1,8 @@
+Files in this folder are build extensions specific to the Bugle project, but currently could be merged into the core Android build.
+
+gcheckstyle is a tool from google3 to validate java from google3. The config file is baked into the jar, but can be updated with a little hackery.
+
+Files last pulled around CL 66008148:
+gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml is the config file which came from /home/build/nonconf/google3/tools/java/checkstyle and was modified to use Android specific styles. It must keep the same name and path in order to correctly update the jar
+
+google-style-checker_deploy.jar is pulled from the build share at /google/data/ro/teams/devtools/glint/linters/live/google-style-checker_deploy.jar and can be pulled from there as needed.
diff --git a/build/android_lint.mk b/build/android_lint.mk
new file mode 100644
index 0000000..3a9a3d7
--- /dev/null
+++ b/build/android_lint.mk
@@ -0,0 +1,59 @@
+# Copyright (C) 2015 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.
+
+# Android lint checks for common code/resource errors specific to Android
+
+# Lint tool expects the intermediates dir to match the project name Bugle rather
+# than $(LOCAL_PACKAGE_NAME) which is messaging
+# Create a symbolic link to redirect the tool
+$(LOCAL_PACKAGE_NAME)BUGLE_RENAME := $(subst $(LOCAL_PACKAGE_NAME)_intermediates,Bugle_intermediates,$(intermediates.COMMON))
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): SOURCE_PATH := $(abspath $(intermediates.COMMON)/)
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): DST_PATH := $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME)
+$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) :
+ ln -f -s $(SOURCE_PATH) $(DST_PATH)
+
+# Lint tool expects api-versions.xml from the SDK to be in development/sdk but
+# it's not. Create a symbolic link to the android SDK to fix it
+API_VERSIONS_XML := $(abspath development/sdk/api-versions.xml)
+$(API_VERSIONS_XML):
+ ln -f -s $(abspath prebuilts/fullsdk/linux/platform-tools/api/api-versions.xml) $(API_VERSIONS_XML)
+
+# The output xml file from the lint tool
+$(LOCAL_PACKAGE_NAME)LINT_XML := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.xml
+
+# The transformed text file from the output xml
+$(LOCAL_PACKAGE_NAME)LINT_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.txt
+
+# Creates the output xml from the lint tool by running the linting tool if the
+# package has been updated
+$($(LOCAL_PACKAGE_NAME)LINT_XML): PRIVATE_PATH := $(LOCAL_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_XML): LINT_CMD = $(LINT) --quiet -Wall --disable UnusedIds,UnusedResources,MissingTranslation $(PRIVATE_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_XML) : $(LOCAL_BUILT_MODULE) $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) $(API_VERSIONS_XML)
+ $(LINT_CMD) --xml $@ > /dev/null
+
+# Creates the transformed text file from the output xml by running an xslt on it
+# which filters out issues from the support library and formats it for console
+# output
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): PRIVATE_PATH := $(LOCAL_PATH)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): INPUT := $($(LOCAL_PACKAGE_NAME)LINT_XML)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT): XSLT_CMD = xsltproc $(PRIVATE_PATH)/build/android_lint.xslt $(INPUT)
+$($(LOCAL_PACKAGE_NAME)LINT_TXT) : $($(LOCAL_PACKAGE_NAME)LINT_XML)
+ $(hide) $(XSLT_CMD) > $@
+
+# The root of the lint rule which just prints the lint errors txt file to the
+# console
+$(LOCAL_PACKAGE_NAME)lint: PRIVATE_PATH := $(LOCAL_PATH)
+$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)LINT_TXT)
+ $(hide) $(PRIVATE_PATH)/build/colorize_errors.py < $<
+
diff --git a/build/android_lint.xslt b/build/android_lint.xslt
new file mode 100644
index 0000000..d0ddc1c
--- /dev/null
+++ b/build/android_lint.xslt
@@ -0,0 +1,40 @@
+<!--
+ Copyright (C) 2015 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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
+<xsl:template match="/issues">
+ <xsl:for-each select="issue">
+ <!-- Exclude errors/warnings with
+ /android/support in the location, these are outside our control
+ /com/google/common in the location, these are outside our control
+ res/values- in the location, these are localized resources, and we only need to be notified of the neutral resource issues
+ .class in the location, these don't have source we can do anything about -->
+ <xsl:if test="not(./location) or (not(contains(./location/@file, '/android/support/')) and not(contains(./location/@file, '/com/google/common/')) and not(starts-with(./location/@file, 'res/values-')) and not(contains(./location/@file, '.class')))">
+ <xsl:value-of select="@severity" />: <xsl:value-of select="@message" disable-output-escaping="yes"/><xsl:text> </xsl:text>[<xsl:value-of select="@id" />]<xsl:text>&#xa;</xsl:text>
+ <xsl:for-each select="./location">
+ <xsl:text> </xsl:text><xsl:value-of select="@file" />
+ <xsl:if test="@line">
+ <xsl:text>:</xsl:text><xsl:value-of select="@line" />
+ <xsl:if test="@column">
+ <xsl:text>,</xsl:text><xsl:value-of select="@column" />
+ </xsl:if>
+ </xsl:if>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/build/colorize_errors.py b/build/colorize_errors.py
new file mode 100755
index 0000000..e33edc0
--- /dev/null
+++ b/build/colorize_errors.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+# Copyright (C) 2015 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.
+#
+# Given an input stream look for Error: and Warning: lines and colorize those to
+# the output
+
+import fileinput
+import re
+import sys
+
+RED = "\033[31m"
+YELLOW = "\033[33m"
+RESET = "\033[0m"
+
+ERROR = re.compile(r"^Error:")
+WARNING = re.compile(r"^Warning:")
+STARTS_WITH_WS = re.compile(r"^\s")
+
+for line in fileinput.input():
+ if ERROR.match(line):
+ print RED + line,
+ elif WARNING.match(line):
+ print YELLOW + line,
+ elif STARTS_WITH_WS.match(line):
+ # If the line starts with a space use the same coloring as the previous line
+ print line,
+ else:
+ print RESET + line,
+print RESET
+
diff --git a/build/gcheckstyle.mk b/build/gcheckstyle.mk
new file mode 100644
index 0000000..61890ee
--- /dev/null
+++ b/build/gcheckstyle.mk
@@ -0,0 +1,45 @@
+# Copyright (C) 2015 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.
+
+# The config file to use when checking style issues
+STYLE_CONFIG := $(LOCAL_PATH)/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
+
+# The jar file to use to perform the checking
+STYLE_JAR := $(LOCAL_PATH)/build/gcheckstyle/google-style-checker_deploy.jar
+
+# The output file to cache the results of style error checking
+$(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_style_errors.txt
+
+# The set of input files to check
+$(LOCAL_PACKAGE_NAME)JAVA_FILES = $(shell find $(LOCAL_PATH)/src/ -name '*.java')
+
+# Updates the JAR file with the new config if the config has changed
+# The config file has to be packaged into the jar, and jar uf command expects the current working directory
+# to match the jar structure
+$(STYLE_JAR): PRIVATE_PATH := $(LOCAL_PATH)
+$(STYLE_JAR) : $(STYLE_CONFIG)
+ $(hide) pushd $(PRIVATE_PATH)/build/gcheckstyle && \
+ jar uf google-style-checker_deploy.jar tools/java/checkstyle/googlestyle-5.0.xml && \
+ popd
+
+# Rebuilds the style errors text if the style checker or any of the java files have changed
+# FLAG: It may be more efficient to cache individual file results rather than grouping them all together
+$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT): SOURCES := $($(LOCAL_PACKAGE_NAME)JAVA_FILES)
+$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT) : $($(LOCAL_PACKAGE_NAME)JAVA_FILES) $(STYLE_JAR)
+ $(hide) -/usr/local/buildtools/java/jdk/bin/java -jar $(STYLE_JAR) $(SOURCES) > $@
+
+# The root of the lint rule which just prints the style errors txt file to the console
+$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT)
+ $(hide) $(PRIVATE_PATH)/build/process_style_output.py -omit $(abspath $(PRIVATE_PATH))/ < $< | $(PRIVATE_PATH)/build/colorize_errors.py
+
diff --git a/build/gcheckstyle/google-style-checker_deploy.jar b/build/gcheckstyle/google-style-checker_deploy.jar
new file mode 100644
index 0000000..86afcbc
--- /dev/null
+++ b/build/gcheckstyle/google-style-checker_deploy.jar
Binary files differ
diff --git a/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml b/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
new file mode 100644
index 0000000..6960849
--- /dev/null
+++ b/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
@@ -0,0 +1,411 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (C) 2015 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.
+-->
+<!DOCTYPE module PUBLIC
+ "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
+ "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+
+<!-- This is a checkstyle configuration file. For descriptions of
+what the following rules do, please see the checkstyle configuration
+page at http://checkstyle.sourceforge.net/config.html -->
+
+<!-- Checks with numbered comments refer to recommendations made
+by Joshua Bloch in his book Effective Java -->
+
+<module name="Checker">
+ <property name="charset" value="UTF-8"/>
+ <module name="SuppressionCommentFilter"/>
+ <module name="SuppressionCommentFilter">
+ <property name="offCommentFormat" value="__Generated_"/>
+ <property name="onCommentFormat" value="END GENERATED CODE"/>
+ </module>
+ <module name="FileTabCharacter">
+ <!-- Checks that there are no tab characters in the file.
+ -->
+ </module>
+
+ <module name="RegexpSingleline">
+ <!-- Checks that FIXME is not used in comments. TODO is preferred.
+ -->
+ <property name="format" value="((//.*)|(\*.*))FIXME" />
+ <property name="message" value='TODO is preferred to FIXME. e.g. "TODO(johndoe): Refactor when v2 is released."' />
+ </module>
+
+ <module name="RegexpSingleline">
+ <!-- Checks that TODOs are properly formatted.
+
+ The (?&lt;!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
+ so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
+ because of the second TODO. (The {0,100} is because java doesn't recoginize arbitrary
+ length look backs, but we know each java line should be < 100 chars.)
+ -->
+ <property name="format" value="((//.*)|(\*.*))(?&lt;!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
+ <property name="message" value='All TODOs should be named. e.g. "TODO(johndoe): Refactor when v2 is released."' />
+ </module>
+
+
+ <!-- All Java AST specific tests live under TreeWalker module. -->
+ <module name="TreeWalker">
+ <module name="FileContentsHolder"/>
+ <!--module name="SuppressWarningsFilter" /-->
+ <!--module name="SuppressWarningsHolder" /-->
+ <!--
+
+ IMPORT CHECKS
+
+ -->
+
+ <module name="RedundantImport">
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="AvoidStarImport">
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="UnusedImports">
+ <!-- DPL is a notable violator of this rule. -->
+ <property name="severity" value="error"/>
+ <!-- Imports used only in Javadoc are tolerated. See http://b/838496 -->
+ <property name="processJavadoc" value="true"/>
+ <message
+ key="import.unused"
+ value="Unused import: {0}." />
+ </module>
+
+ <module name="checkstyle.patches.checks.imports.ImportOrder">
+ <!-- Checks for out of order import statements. -->
+
+ <metadata name="altname" value="ImportOrder"/>
+ <property name="severity" value="warning"/>
+ <property name="groups" value="android,com.android,com.google,*,java,javax"/>
+ <!-- This ensures that static imports go first. -->
+ <property name="option" value="top"/>
+ <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
+ <message
+ key="import.ordering"
+ value="Wrong order for {0} import." />
+ </module>
+
+ <!-- Checks that nested classes are not statically imported. -->
+ <module name="com.google.devtools.checkstyle.checks.imports.StaticImportNestedClassCheck">
+ <metadata name="altname" value="StaticImportNestedClass"/>
+ <property name="severity" value="warning"/>
+ <message key="import.staticNestedClass"
+ value="Use of static import for nested classes is disallowed."/>
+ </module>
+
+ <!--
+
+ JAVADOC CHECKS
+
+ -->
+
+ <module name="com.google.devtools.checkstyle.checks.javadoc.GoogleJavadocTypeCheck">
+ <!-- Item 28 - Write doc comments for all exposed API elements. -->
+ <!-- Ensure all classes with visability greater than or equal to
+ protected have class level documentation. -->
+ <property name="scope" value="protected"/>
+ <property name="severity" value="ignore"/>
+ <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
+ <property name="allowUnknownTags" value="true"/>
+ <property name="allowMissingParamTags" value="true"/>
+ </module>
+
+ <!--
+
+ NAMING CHECKS
+
+ -->
+
+ <!-- Item 38 - Adhere to generally accepted naming conventions -->
+
+ <module name="PackageName">
+ <!-- Validates identifiers for package names against the
+ supplied expression. -->
+ <!-- Here the default checkstyle rule restricts package name parts to
+ seven characters, this is not in line with common practice at Google.
+ -->
+ <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="TypeNameCheck">
+ <!-- Validates static, final fields against the
+ expression "^[A-Z][a-zA-Z0-9]*$". -->
+ <metadata name="altname" value="TypeName"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="com.google.devtools.checkstyle.checks.coding.ConstantNameCheck">
+ <!-- Validates that constant fields are named in ALL_CAPS. -->
+ <metadata name="altname" value="ConstantName"/>
+ <property name="applyToPublic" value="true"/>
+ <property name="applyToProtected" value="true"/>
+ <property name="applyToPackage" value="true"/>
+ <property name="applyToPrivate" value="true"/>
+ <property name="format" value="^_?[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
+ <message key="name.invalidPattern"
+ value="Variable ''{0}'' is a constant and thus should be in ALL_CAPS."/>
+ <property name="severity" value="ignore"/>
+ </module>
+
+ <module name="StaticVariableNameCheck">
+ <!-- Validates static, non-final fields against the supplied
+ expression "^[a-z][a-zA-Z0-9]*_?$". -->
+ <metadata name="altname" value="StaticVariableName"/>
+ <property name="applyToPublic" value="true"/>
+ <property name="applyToProtected" value="true"/>
+ <property name="applyToPackage" value="true"/>
+ <property name="applyToPrivate" value="true"/>
+ <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
+ <property name="severity" value="ignore"/>
+ </module>
+
+ <module name="MemberNameCheck">
+ <!-- Validates non-static members against the supplied expression. -->
+ <metadata name="altname" value="MemberName"/>
+ <property name="applyToPublic" value="true"/>
+ <property name="applyToProtected" value="true"/>
+ <property name="applyToPackage" value="true"/>
+ <property name="applyToPrivate" value="true"/>
+ <!-- allows for googles deprecated foo_ member naming scheme -->
+ <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
+ <property name="severity" value="ignore"/>
+ </module>
+
+ <module name="MethodNameCheck">
+ <!-- Validates identifiers for method names. -->
+ <metadata name="altname" value="MethodName"/>
+ <property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="ParameterName">
+ <!-- Validates identifiers for method parameters against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="LocalFinalVariableName">
+ <!-- Validates identifiers for local final variables against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="LocalVariableName">
+ <!-- Validates identifiers for local variables against the
+ expression "^[a-z][a-zA-Z0-9]*$". -->
+ <property name="severity" value="warning"/>
+ </module>
+
+
+ <!--
+
+ LENGTH and CODING CHECKS
+
+ -->
+
+ <module name="LineLength">
+ <!-- Checks if a line is too long. -->
+ <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
+ <property name="severity" value="error"/>
+
+ <!--
+ The default ignore pattern exempts the following elements:
+ - import statements
+ - long URLs inside comments
+ - certain JSNI method signatures used in GWT, see http://wiki/Nonconf/GwtInGoogle3Faq#JsniLineBreaks.
+ -->
+
+ <!--
+ The JSNI/GWT exemption only is for the JNI-style signature, that cannot be split across multiple lines.
+ Both the instance expression and the parameter list may and must go on separate lines.
+
+ These examples are exempt:
+ <pre>
+ private native void foo() /*-{
+ // Method call, signature as the only long line (> 100 chars)
+ this.
+ @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
+ (param);
+
+ // Static method call, signature as the only long line (> 100 chars)
+ @com.google.gwt.foo.bar.baz.ClassUsingJsni::staticMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
+ (param);
+
+ // Method reference in dictionary, signature as the only long line
+ var dict = {
+ key:
+ @com.google.gwt.foo.bar.baz.ClassUsingJsni::otherMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;Z),
+ }
+ }-*/;
+ </pre>
+
+ These exampls are NOT exempt, as the line can be broken further:
+ <pre>
+ private native void foo() /*-{
+ // Instance expression on same line
+ this.@com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
+ (param);
+
+ // Parameters on same line
+ this.
+ @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
+
+ // All on one line
+ this.@com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
+ }-*/;
+ </pre>
+ -->
+ <property name="ignorePattern"
+ value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
+ default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
+ </module>
+
+ <module name="LeftCurly">
+ <!-- Checks for placement of the left curly brace ('{'). -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <module name="RightCurly">
+ <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
+ the same line. e.g., the following example is fine:
+ <pre>
+ if {
+ ...
+ } else
+ </pre>
+ -->
+ <!-- This next example is not fine:
+ <pre>
+ if {
+ ...
+ }
+ else
+ </pre>
+ -->
+ <property name="option" value="same"/>
+ <property name="severity" value="warning"/>
+ </module>
+
+ <!-- Checks for braces around if and else blocks -->
+ <module name="NeedBraces">
+ <property name="severity" value="warning"/>
+ <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
+ </module>
+
+ <!-- Checks for empty catch blocks in non-test files. -->
+ <module name="com.google.devtools.checkstyle.checks.blocks.EmptyCatchBlockCheck">
+ <metadata name="altname" value="EmptyCatchBlock"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="UpperEll">
+ <!-- Checks that long constants are defined with an upper ell.-->
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="FallThrough">
+ <!-- Warn about falling through to the next case statement. Similar to
+ javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
+ on the last non-blank line preceding the fallen-into case.
+ -->
+ <property name="reliefPattern"
+ value=".*"/>
+ <property name="severity" value="error"/>
+ </module>
+
+
+ <!--
+
+ MODIFIERS CHECKS
+
+ -->
+
+ <module name="ModifierOrder">
+ <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
+ 8.4.3. The prescribed order is:
+ public, protected, private, abstract, static, final, transient, volatile,
+ synchronized, native, strictfp
+ -->
+ </module>
+
+
+ <!--
+
+ WHITESPACE CHECKS
+
+ -->
+
+ <module name="WhitespaceAround">
+ <!-- Checks that various tokens are surrounded by whitespace.
+ This includes most binary operators and keywords followed
+ by regular or curly braces.
+ -->
+ <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
+ BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
+ EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
+ LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
+ LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
+ MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
+ SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
+ <property name="severity" value="error"/>
+ <property name="ignoreEnhancedForColon" value="false"/>
+ </module>
+
+ <module name="WhitespaceAfter">
+ <!-- Checks that commas, semicolons and typecasts are followed by
+ whitespace.
+ -->
+ <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
+ </module>
+
+ <module name="NoWhitespaceAfter">
+ <!-- Checks that there is no whitespace after various unary operators.
+ Linebreaks are allowed.
+ -->
+ <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
+ UNARY_PLUS"/>
+ <property name="allowLineBreaks" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="NoWhitespaceBefore">
+ <!-- Checks that there is no whitespace before various unary operators.
+ Linebreaks are allowed.
+ -->
+ <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
+ <property name="allowLineBreaks" value="true"/>
+ <property name="severity" value="error"/>
+ </module>
+
+ <module name="ParenPad">
+ <!-- Checks that there is no whitespace before close parens or after
+ open parens.
+ -->
+ <property name="severity" value="warning"/>
+ </module>
+
+ <!--
+
+ MISC CHECKS
+
+ -->
+
+ </module>
+</module>
+
diff --git a/build/process_style_output.py b/build/process_style_output.py
new file mode 100755
index 0000000..63ca9a0
--- /dev/null
+++ b/build/process_style_output.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+# Copyright (C) 2015 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.
+#
+# Take the output from gstylechecker and clean up into a more friendly format
+
+import argparse
+import fileinput
+import re
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-omit')
+args = parser.parse_args()
+
+PATTERN = re.compile(r"(?P<file>[^:]+):(?P<line>\d+)(?P<column>:\d+)?:\s(?P<message>.*)")
+
+for line in fileinput.input([]):
+ match = PATTERN.match(line)
+ if match:
+ filename = match.group("file");
+ if args.omit:
+ filename = filename.replace(args.omit, "")
+ message = match.group("message")
+ message = message[0].upper() + message[1:]
+ print message
+ print " " + filename + ':' + match.group("line") + (match.group("column") if match.group("column") else "")
+