Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions dev/.rat-excludes
Original file line number Diff line number Diff line change
Expand Up @@ -98,3 +98,4 @@ LZ4BlockInputStream.java
spark-deps-.*
.*csv
.*tsv
reference.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
public.abstract.methods.have.type.message = "Public abstract methods must have explicit return types"
public.abstract.methods.have.type.label = "PulicAbstractMethod"
public.abstract.methods.have.type.description = "Check that a pulic abstract method has an explicit return type, it is not inferred"
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* 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.
*/

package org.apache.spark.scala_style

import org.scalastyle.scalariform.AbstractSingleMethodChecker

import scalariform.parser.ProcFunBody

class PublicAbstractMethodsHaveTypeChecker extends AbstractSingleMethodChecker[Unit] {

val errorKey = "public.abstract.methods.have.type"

protected def matchParameters() = Unit

protected def matches(t: FullDefOrDclVisit, p: Unit) = {

t.funDefOrDcl.funBodyOpt match {
case Some(ProcFunBody(newlineOpt, bodyBlock)) => false
case _ => // None or Some(ExprFunBody)
t.funDefOrDcl.returnTypeOpt.isEmpty &&
!isConstructor(t.fullDefOrDcl.defOrDcl) &&
!privateOrProtected(t.fullDefOrDcl.modifiers) &&
!t.insideDefOrValOrVar &&
!t.funDefOrDcl.nameToken.text.equals("main") // public static void main(...) is OK
}

}
}
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2237,6 +2237,13 @@
<inputEncoding>${project.build.sourceEncoding}</inputEncoding>
<outputEncoding>${project.reporting.outputEncoding}</outputEncoding>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>scala_style_checker</artifactId>
Copy link
Member

Choose a reason for hiding this comment

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

Yikes, do we have to maintain and publish this as a module to use it? it may not be worth it

Copy link
Contributor Author

@lw-lin lw-lin Apr 15, 2016

Choose a reason for hiding this comment

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

@srowen yeah I think you're right -- doing that is heavy and not worth it. :-)
I'm working on a light-weight manner to do this, after all all we need is to install the custom rules jar locally in the dev & build environment, other than publishing that into run-time environment or maven-central.
Thanks for the review!

<version>${project.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
Expand Down
2 changes: 2 additions & 0 deletions scalastyle-config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ This file is divided into 3 sections:

<check level="error" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"></check>

<check level="error" class="org.apache.spark.scala_style.PublicAbstractMethodsHaveTypeChecker" enabled="true"></check>

<check level="error" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"></check>

<check customId="nonascii" level="error" class="org.scalastyle.scalariform.NonASCIICharacterChecker" enabled="true"></check>
Expand Down