Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SPARK-6990] [Build] Add Java linting script; fix minor warnings #9867

Closed
wants to merge 38 commits into from
Closed
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
10465b5
[SPARK-6990] Remove whitespace after '>'
dskrvk Nov 13, 2015
38a0007
[SPARK-6990] Add Java linting script
dskrvk Nov 10, 2015
806ae31
[SPARK-6990] Fix some Checkstyle warnings
dskrvk Nov 10, 2015
65db253
[SPARK-6990] Suppress Checkstyle for TimSort
dskrvk Nov 11, 2015
4d7c602
[SPARK-6990] Fix some Checkstyle issues in tests
dskrvk Nov 11, 2015
7ac1bc5
[SPARK-6990] Enable Checkstyle for tests
dskrvk Nov 11, 2015
74dc8df
[SPARK-6990] Enable FallThrough check in Checkstyle
dskrvk Nov 11, 2015
7a88ac2
[SPARK-6990] Fix some Checkstyle warnings
dskrvk Nov 10, 2015
26f6998
[SPARK-6990] Suppress Checkstyle for TimSort
dskrvk Nov 11, 2015
9df236e
[SPARK-6990] Fix some Checkstyle warnings
dskrvk Nov 10, 2015
338f9ae
[SPARK-6990] Suppress Checkstyle for TimSort
dskrvk Nov 11, 2015
2ff1c35
[SPARK-6990] Disable MissingSwitchDefault check
dskrvk Nov 19, 2015
55948e0
[SPARK-6990] Fix qualifier order in SpecificParquetRecordReaderBase
dskrvk Nov 19, 2015
1a57e30
[SPARK-6990] Fix some Checkstyle warnings
dskrvk Nov 10, 2015
59c99c9
[SPARK-6990] Suppress Checkstyle for TimSort
dskrvk Nov 11, 2015
d33ed8d
[SPARK-6990] Fix some Checkstyle issues in tests
dskrvk Nov 11, 2015
7d5cbe1
[SPARK-6990] Enable Checkstyle for tests
dskrvk Nov 11, 2015
b96a61a
[SPARK-6990] Enable FallThrough check in Checkstyle
dskrvk Nov 11, 2015
db17e0e
[SPARK-6990] Disable MissingSwitchDefault check
dskrvk Nov 19, 2015
ae30c6a
[SPARK-6990] Fix qualifier order in SpecificParquetRecordReaderBase
dskrvk Nov 19, 2015
fd6d0e0
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 20, 2015
a9b0393
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 20, 2015
4c27a50
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 20, 2015
ce44d2e
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 21, 2015
b97a675
Merge branch 'master' into spark-6990
dskrvk Nov 21, 2015
7a49ad7
[SPARK-6990] Fix Checkstyle issues in ML examples
dskrvk Nov 21, 2015
9c6fe92
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 23, 2015
0375281
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 23, 2015
065fe98
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 23, 2015
ba90836
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 24, 2015
5b4c7eb
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 24, 2015
1b1a5ab
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 25, 2015
c773e90
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 25, 2015
c74343b
Merge remote-tracking branch 'upstream/master'
dskrvk Nov 30, 2015
b3a192d
Merge remote-tracking branch 'upstream/master'
dskrvk Dec 1, 2015
520e6d2
Merge remote-tracking branch 'upstream/master'
dskrvk Dec 2, 2015
f58340c
Merge remote-tracking branch 'upstream/master'
dskrvk Dec 4, 2015
b079f29
[SPARK-6990] Remove second run of mvn checkstyle
dskrvk Dec 4, 2015
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You 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 suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">

<!--

This file contains suppression rules for Checkstyle checks.
Ideally only files that cannot be modified (e.g. third-party code)
should be added here. All other violations should be fixed.

-->

<suppressions>
<suppress checks=".*"
files="core/src/main/java/org/apache/spark/util/collection/TimSort.java"/>
</suppressions>
164 changes: 164 additions & 0 deletions checkstyle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You 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">

<!--

Checkstyle configuration based on the Google coding conventions from:

- Google Java Style
https://google-styleguide.googlecode.com/svn-history/r130/trunk/javaguide.html

with Spark-specific changes from:

https://cwiki.apache.org/confluence/display/SPARK/Spark+Code+Style+Guide

Checkstyle is very configurable. Be sure to read the documentation at
http://checkstyle.sf.net (or in your downloaded distribution).

Most Checks are configurable, be sure to consult the documentation.

To completely disable a check, just comment it out or delete it from the file.

Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.

-->

<module name = "Checker">
<property name="charset" value="UTF-8"/>

<property name="severity" value="error"/>

<property name="fileExtensions" value="java, properties, xml"/>

<module name="SuppressionFilter">
<property name="file" value="checkstyle-suppressions.xml"/>
</module>

<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>

<module name="TreeWalker">
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<!-- TODO: 11/09/15 disabled - the lengths are currently > 100 in many places -->
<!--
<module name="LineLength">
<property name="max" value="100"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
-->
<module name="NoLineWrap"/>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="NeedBraces">
<property name="allowSingleLineStatement" value="true"/>
</module>
<module name="OneStatementPerLine"/>
<module name="ArrayTypeStyle"/>
<module name="FallThrough"/>
<module name="UpperEll"/>
<module name="ModifierOrder"/>
<module name="SeparatorWrap">
<property name="tokens" value="DOT"/>
<property name="option" value="nl"/>
</module>
<module name="SeparatorWrap">
<property name="tokens" value="COMMA"/>
<property name="option" value="EOL"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="([A-Z][a-zA-Z0-9]*$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="([A-Z][a-zA-Z0-9]*)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<!-- TODO: 11/09/15 disabled - indentation is currently inconsistent -->
<!--
<module name="Indentation">
<property name="basicOffset" value="4"/>
<property name="braceAdjustment" value="0"/>
<property name="caseIndent" value="4"/>
<property name="throwsIndent" value="4"/>
<property name="lineWrappingIndentation" value="4"/>
<property name="arrayInitIndent" value="4"/>
</module>
-->
<!-- TODO: 11/09/15 disabled - order is currently wrong in many places -->
<!--
<module name="ImportOrder">
<property name="separated" value="true"/>
<property name="ordered" value="true"/>
<property name="groups" value="/^javax?\./,scala,*,org.apache.spark"/>
</module>
-->
<module name="MethodParamPad"/>
<module name="AnnotationLocation">
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<module name="CommentsIndentation"/>
</module>
</module>
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ private SortedIterator(int numRecords) {
this.position = 0;
}

public SortedIterator clone () {
public SortedIterator clone() {
SortedIterator iter = new SortedIterator(numRecords);
iter.position = position;
iter.baseObject = baseObject;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,8 @@ public void iteratingOverDataPagesWithWastedSpace() throws Exception {

final java.util.BitSet valuesSeen = new java.util.BitSet(NUM_ENTRIES);
final Iterator<BytesToBytesMap.Location> iter = map.iterator();
final long key[] = new long[KEY_LENGTH / 8];
final long value[] = new long[VALUE_LENGTH / 8];
final long[] key = new long[KEY_LENGTH / 8];
final long[] value = new long[VALUE_LENGTH / 8];
while (iter.hasNext()) {
final BytesToBytesMap.Location loc = iter.next();
Assert.assertTrue(loc.isDefined());
Expand Down
34 changes: 34 additions & 0 deletions dev/lint-java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env bash

#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#

SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
SPARK_ROOT_DIR="$(dirname $SCRIPT_DIR)"

$SCRIPT_DIR/../build/mvn -Pkinesis-asl -Phive -Phive-thriftserver checkstyle:check > checkstyle.txt
$SCRIPT_DIR/../build/mvn -Pkinesis-asl -Pyarn -Phadoop-2.2 checkstyle:check >> checkstyle.txt
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick question: why do you need to run twice with different profiles? AFAIK the set of source files should be the same under all of the Hadoop profiles, so I don't think we need to set -Phadoop-2.2 here.

Why can't we just use one Maven run with the profiles -Pkinesis-asl -Phive -Phive-thriftserver -Pyarn?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't actually observe any differences between the two profiles in terms of Checkstyle warnings, but decided to add the second run just to be thorough.

My reasoning was that since some profiles omit some of the modules, we need to exercise all of the possible ones, even though at the moment the set of Java sources may be the same. In any case, this only adds a few seconds to the build - negligible compared to the overall run-tests time.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should be able to have a single run with "-Pkinesis-asl -Pyarn -Phive -Phive-thriftserver" - I even think "-Phive" is unnecessary, I think it only affects packaging right now.

"-Phadoop2.2" is unnecessary, that's the default.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point; changed.


ERRORS=$(grep ERROR checkstyle.txt)
rm checkstyle.txt

if test ! -z "$ERRORS"; then
echo -e "Checkstyle checks failed at following occurrences:\n$ERRORS"
exit 1
else
echo -e "Checkstyle checks passed."
fi
1 change: 1 addition & 0 deletions dev/run-tests-jenkins.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ def run_tests(tests_timeout):
ERROR_CODES["BLOCK_GENERAL"]: 'some tests',
ERROR_CODES["BLOCK_RAT"]: 'RAT tests',
ERROR_CODES["BLOCK_SCALA_STYLE"]: 'Scala style tests',
ERROR_CODES["BLOCK_JAVA_STYLE"]: 'Java style tests',
ERROR_CODES["BLOCK_PYTHON_STYLE"]: 'Python style tests',
ERROR_CODES["BLOCK_R_STYLE"]: 'R style tests',
ERROR_CODES["BLOCK_DOCUMENTATION"]: 'to generate documentation',
Expand Down
7 changes: 7 additions & 0 deletions dev/run-tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,11 @@ def run_scala_style_checks():
run_cmd([os.path.join(SPARK_HOME, "dev", "lint-scala")])


def run_java_style_checks():
set_title_and_block("Running Java style checks", "BLOCK_JAVA_STYLE")
run_cmd([os.path.join(SPARK_HOME, "dev", "lint-java")])


def run_python_style_checks():
set_title_and_block("Running Python style checks", "BLOCK_PYTHON_STYLE")
run_cmd([os.path.join(SPARK_HOME, "dev", "lint-python")])
Expand Down Expand Up @@ -522,6 +527,8 @@ def main():
# style checks
if not changed_files or any(f.endswith(".scala") for f in changed_files):
run_scala_style_checks()
if not changed_files or any(f.endswith(".java") for f in changed_files):
run_java_style_checks()
if not changed_files or any(f.endswith(".py") for f in changed_files):
run_python_style_checks()
if not changed_files or any(f.endswith(".R") for f in changed_files):
Expand Down
1 change: 1 addition & 0 deletions dev/sparktestsupport/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@
"BLOCK_SPARK_UNIT_TESTS": 18,
"BLOCK_PYSPARK_UNIT_TESTS": 19,
"BLOCK_SPARKR_UNIT_TESTS": 20,
"BLOCK_JAVA_STYLE": 21,
"BLOCK_TIMEOUT": 124
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static void main(String[] args) {
ParamMap paramMap = new ParamMap();
paramMap.put(lr.maxIter().w(20)); // Specify 1 Param.
paramMap.put(lr.maxIter(), 30); // This overwrites the original maxIter.
double thresholds[] = {0.45, 0.55};
double[] thresholds = {0.45, 0.55};
paramMap.put(lr.regParam().w(0.1), lr.thresholds().w(thresholds)); // Specify multiple Params.

// One can also combine ParamMaps.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ public static void main(String[] args) {
public Vector call(String s) {
String[] sarray = s.trim().split(" ");
double[] values = new double[sarray.length];
for (int i = 0; i < sarray.length; i++)
for (int i = 0; i < sarray.length; i++) {
values[i] = Double.parseDouble(sarray[i]);
}
return Vectors.dense(values);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ public static void main(String[] args) {

// Stats by labels
for (int i = 0; i < metrics.labels().length - 1; i++) {
System.out.format("Class %1.1f precision = %f\n", metrics.labels()[i], metrics.precision
(metrics.labels()[i]));
System.out.format("Class %1.1f recall = %f\n", metrics.labels()[i], metrics.recall(metrics
.labels()[i]));
System.out.format("Class %1.1f F1 score = %f\n", metrics.labels()[i], metrics.f1Measure
(metrics.labels()[i]));
System.out.format("Class %1.1f precision = %f\n", metrics.labels()[i], metrics.precision(
metrics.labels()[i]));
System.out.format("Class %1.1f recall = %f\n", metrics.labels()[i], metrics.recall(
metrics.labels()[i]));
System.out.format("Class %1.1f F1 score = %f\n", metrics.labels()[i], metrics.f1Measure(
metrics.labels()[i]));
}

// Micro stats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ public Tuple2<Object, Object> call(LabeledPoint p) {

// Stats by labels
for (int i = 0; i < metrics.labels().length; i++) {
System.out.format("Class %f precision = %f\n", metrics.labels()[i],metrics.precision
(metrics.labels()[i]));
System.out.format("Class %f recall = %f\n", metrics.labels()[i], metrics.recall(metrics
.labels()[i]));
System.out.format("Class %f F1 score = %f\n", metrics.labels()[i], metrics.fMeasure
(metrics.labels()[i]));
System.out.format("Class %f precision = %f\n", metrics.labels()[i],metrics.precision(
metrics.labels()[i]));
System.out.format("Class %f recall = %f\n", metrics.labels()[i], metrics.recall(
metrics.labels()[i]));
System.out.format("Class %f F1 score = %f\n", metrics.labels()[i], metrics.fMeasure(
metrics.labels()[i]));
}

//Weighted stats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ public List<Integer> call(Rating[] docs) {
}
}
);
JavaRDD<Tuple2<List<Integer>, List<Integer>>> relevantDocs = userMoviesList.join
(userRecommendedList).values();
JavaRDD<Tuple2<List<Integer>, List<Integer>>> relevantDocs = userMoviesList.join(
userRecommendedList).values();

// Instantiate the metrics object
RankingMetrics metrics = RankingMetrics.of(relevantDocs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
// $example off$

public class JavaRecommendationExample {
public static void main(String args[]) {
public static void main(String[] args) {
// $example on$
SparkConf conf = new SparkConf().setAppName("Java Collaborative Filtering Example");
JavaSparkContext jsc = new JavaSparkContext(conf);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ public static void main(String[] args) {
public LabeledPoint call(String line) {
String[] parts = line.split(" ");
double[] v = new double[parts.length - 1];
for (int i = 1; i < parts.length - 1; i++)
for (int i = 1; i < parts.length - 1; i++) {
v[i - 1] = Double.parseDouble(parts[i].split(":")[1]);
}
return new LabeledPoint(Double.parseDouble(parts[0]), Vectors.dense(v));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ public JavaRecord call(String word) {

/** Lazily instantiated singleton instance of SQLContext */
class JavaSQLContextSingleton {
static private transient SQLContext instance = null;
static public SQLContext getInstance(SparkContext sparkContext) {
private static transient SQLContext instance = null;
public static SQLContext getInstance(SparkContext sparkContext) {
if (instance == null) {
instance = new SQLContext(sparkContext);
}
Expand Down
Loading