Skip to content
This repository was archived by the owner on May 25, 2023. It is now read-only.

Commit 5a6d2e5

Browse files
committed
Introduce scalastyle and fixed warnnings
1 parent 97d3a16 commit 5a6d2e5

23 files changed

+329
-214
lines changed

project/plugins.sbt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")

scalastyle-config.xml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<scalastyle>
2+
<name>Scalastyle standard configuration</name>
3+
<check level="warning" class="org.scalastyle.file.FileTabChecker" enabled="true"></check>
4+
<check level="warning" class="org.scalastyle.file.FileLengthChecker" enabled="true">
5+
<parameters>
6+
<parameter name="maxFileLength"><![CDATA[800]]></parameter>
7+
</parameters>
8+
</check>
9+
<check level="warning" class="org.scalastyle.file.HeaderMatchesChecker" enabled="false">
10+
<parameters>
11+
<parameter name="header"><![CDATA[// Copyright (C) 2011-2012 the original author or authors.
12+
// See the LICENCE.txt file distributed with this work for additional
13+
// information regarding copyright ownership.
14+
//
15+
// Licensed under the Apache License, Version 2.0 (the "License");
16+
// you may not use this file except in compliance with the License.
17+
// You may obtain a copy of the License at
18+
//
19+
// http://www.apache.org/licenses/LICENSE-2.0
20+
//
21+
// Unless required by applicable law or agreed to in writing, software
22+
// distributed under the License is distributed on an "AS IS" BASIS,
23+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24+
// See the License for the specific language governing permissions and
25+
// limitations under the License.]]></parameter>
26+
</parameters>
27+
</check>
28+
<check level="warning" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"></check>
29+
<check level="warning" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"></check>
30+
<check level="warning" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"></check>
31+
<check level="warning" class="org.scalastyle.file.FileLineLengthChecker" enabled="true">
32+
<parameters>
33+
<parameter name="maxLineLength"><![CDATA[160]]></parameter>
34+
<parameter name="tabSize"><![CDATA[4]]></parameter>
35+
</parameters>
36+
</check>
37+
<check level="warning" class="org.scalastyle.scalariform.ClassNamesChecker" enabled="true">
38+
<parameters>
39+
<parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
40+
</parameters>
41+
</check>
42+
<check level="warning" class="org.scalastyle.scalariform.ObjectNamesChecker" enabled="true">
43+
<parameters>
44+
<parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
45+
</parameters>
46+
</check>
47+
<check level="warning" class="org.scalastyle.scalariform.PackageObjectNamesChecker" enabled="true">
48+
<parameters>
49+
<parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
50+
</parameters>
51+
</check>
52+
<check level="warning" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"></check>
53+
<check level="warning" class="org.scalastyle.scalariform.IllegalImportsChecker" enabled="true">
54+
<parameters>
55+
<parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter>
56+
</parameters>
57+
</check>
58+
<check level="warning" class="org.scalastyle.scalariform.ParameterNumberChecker" enabled="true">
59+
<parameters>
60+
<parameter name="maxParameters"><![CDATA[8]]></parameter>
61+
</parameters>
62+
</check>
63+
<check level="warning" class="org.scalastyle.scalariform.MagicNumberChecker" enabled="false">
64+
<parameters>
65+
<parameter name="ignore"><![CDATA[-1,0,1,2,3]]></parameter>
66+
</parameters>
67+
</check>
68+
<check level="warning" class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" enabled="true"></check>
69+
<check level="warning" class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" enabled="true"></check>
70+
<check level="warning" class="org.scalastyle.scalariform.ReturnChecker" enabled="true"></check>
71+
<check level="warning" class="org.scalastyle.scalariform.NullChecker" enabled="true"></check>
72+
<check level="warning" class="org.scalastyle.scalariform.NoCloneChecker" enabled="true"></check>
73+
<check level="warning" class="org.scalastyle.scalariform.NoFinalizeChecker" enabled="true"></check>
74+
<check level="warning" class="org.scalastyle.scalariform.CovariantEqualsChecker" enabled="true"></check>
75+
<check level="warning" class="org.scalastyle.scalariform.StructuralTypeChecker" enabled="true"></check>
76+
<check level="warning" class="org.scalastyle.file.RegexChecker" enabled="true">
77+
<parameters>
78+
<parameter name="regex"><![CDATA[println]]></parameter>
79+
</parameters>
80+
</check>
81+
<check level="warning" class="org.scalastyle.scalariform.NumberOfTypesChecker" enabled="true">
82+
<parameters>
83+
<parameter name="maxTypes"><![CDATA[30]]></parameter>
84+
</parameters>
85+
</check>
86+
<check level="warning" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="true">
87+
<parameters>
88+
<parameter name="maximum"><![CDATA[10]]></parameter>
89+
</parameters>
90+
</check>
91+
<check level="warning" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"></check>
92+
<check level="warning" class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" enabled="true"></check>
93+
<check level="warning" class="org.scalastyle.scalariform.IfBraceChecker" enabled="false">
94+
<parameters>
95+
<parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
96+
<parameter name="doubleLineAllowed"><![CDATA[false]]></parameter>
97+
</parameters>
98+
</check>
99+
<check level="warning" class="org.scalastyle.scalariform.MethodLengthChecker" enabled="true">
100+
<parameters>
101+
<parameter name="maxLength"><![CDATA[50]]></parameter>
102+
</parameters>
103+
</check>
104+
<check level="warning" class="org.scalastyle.scalariform.MethodNamesChecker" enabled="true">
105+
<parameters>
106+
<parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*$]]></parameter>
107+
</parameters>
108+
</check>
109+
<check level="warning" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" enabled="true">
110+
<parameters>
111+
<parameter name="maxMethods"><![CDATA[30]]></parameter>
112+
</parameters>
113+
</check>
114+
<check level="warning" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"></check>
115+
<check level="warning" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"></check>
116+
<check level="warning" class="org.scalastyle.file.NoNewLineAtEofChecker" enabled="false"></check>
117+
</scalastyle>

src/main/scala/com/lightbend/kafka/scala/streams/FunctionConversions.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import org.apache.kafka.streams.KeyValue
88
import org.apache.kafka.streams.kstream._
99

1010
/**
11-
* Implicit classes that offer conversions of Scala function literals to
11+
* Implicit classes that offer conversions of Scala function literals to
1212
* SAM (Single Abstract Method) objects in Java. These make the Scala APIs much
1313
* more expressive, with less boilerplate and more succinct.
14-
*/
14+
*/
1515
object FunctionConversions {
1616

1717
implicit class PredicateFromFunction[K, V](val test: (K, V) => Boolean) extends AnyVal {

src/main/scala/com/lightbend/kafka/scala/streams/ImplicitConversions.scala

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import scala.language.implicitConversions
1313
/**
1414
* Implicit conversions between the Scala wrapper objects and the underlying Java
1515
* objects.
16-
*/
16+
*/
1717
object ImplicitConversions {
1818

1919
implicit def wrapKStream[K, V](inner: KStream[K, V]): KStreamS[K, V] =
@@ -34,9 +34,9 @@ object ImplicitConversions {
3434
implicit def wrapKGroupedTable[K, V](inner: KGroupedTable[K, V]): KGroupedTableS[K, V] =
3535
new KGroupedTableS[K, V](inner)
3636

37-
implicit def Tuple2ToKeyValue[K, V](tuple: (K, V)): KeyValue[K, V] = new KeyValue(tuple._1, tuple._2)
37+
implicit def tuple2ToKeyValue[K, V](tuple: (K, V)): KeyValue[K, V] = new KeyValue(tuple._1, tuple._2)
3838

39-
// technique for optional implicits adopted from
39+
// technique for optional implicits adopted from
4040
// http://missingfaktor.blogspot.in/2013/12/optional-implicit-trick-in-scala.html
4141

4242
case class Perhaps[E](value: Option[E]) {
@@ -45,24 +45,22 @@ object ImplicitConversions {
4545
}
4646
}
4747

48-
implicit def perhaps[E](implicit ev: E = null): Perhaps[E] = {
49-
Perhaps(Option(ev))
50-
}
51-
48+
//scalastyle:off null
49+
implicit def perhaps[E](implicit ev: E = null): Perhaps[E] = Perhaps(Option(ev))
50+
//scalastyle:on null
5251
// we would also like to allow users implicit serdes
5352
// and these implicits will convert them to `Serialized`, `Produced` or `Consumed`
5453

55-
implicit def SerializedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Serialized[K, V] =
54+
implicit def serializedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Serialized[K, V] =
5655
Serialized.`with`(keySerde, valueSerde)
5756

58-
implicit def ConsumedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Consumed[K, V] =
57+
implicit def consumedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Consumed[K, V] =
5958
Consumed.`with`(keySerde, valueSerde)
6059

61-
implicit def ProducedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Produced[K, V] =
60+
implicit def producedFromSerde[K, V](implicit keySerde: Serde[K], valueSerde: Serde[V]): Produced[K, V] =
6261
Produced.`with`(keySerde, valueSerde)
6362

64-
implicit def JoinedFromKVOSerde[K, V, VO](implicit keySerde: Serde[K], valueSerde: Serde[V], otherValueSerde: Serde[VO]): Joined[K, V, VO] = {
65-
println(s"ks: $keySerde vs: $valueSerde ovs: $otherValueSerde")
63+
implicit def joinedFromKVOSerde[K, V, VO](implicit keySerde: Serde[K], valueSerde: Serde[V],
64+
otherValueSerde: Serde[VO]): Joined[K, V, VO] =
6665
Joined.`with`(keySerde, valueSerde, otherValueSerde)
67-
}
6866
}

src/main/scala/com/lightbend/kafka/scala/streams/KGroupedStreamS.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import FunctionConversions._
1414

1515
/**
1616
* Wraps the Java class KGroupedStream and delegates method calls to the underlying Java object.
17-
*/
17+
*/
1818
class KGroupedStreamS[K, V](inner: KGroupedStream[K, V]) {
1919

2020
def count(): KTableS[K, Long] = {

src/main/scala/com/lightbend/kafka/scala/streams/KGroupedTableS.scala

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import FunctionConversions._
1212

1313
/**
1414
* Wraps the Java class KGroupedTable and delegates method calls to the underlying Java object.
15-
*/
15+
*/
1616
class KGroupedTableS[K, V](inner: KGroupedTable[K, V]) {
1717

1818
type ByteArrayKVStore = KeyValueStore[Bytes, Array[Byte]]
@@ -26,34 +26,34 @@ class KGroupedTableS[K, V](inner: KGroupedTable[K, V]) {
2626
inner.count(materialized)
2727

2828
def reduce(adder: (V, V) => V,
29-
subtractor: (V, V) => V): KTableS[K, V] = {
29+
subTractor: (V, V) => V): KTableS[K, V] = {
3030

3131
// need this explicit asReducer for Scala 2.11 or else the SAM conversion doesn't take place
3232
// works perfectly with Scala 2.12 though
33-
inner.reduce(((v1, v2) => adder(v1, v2)).asReducer, ((v1, v2) => subtractor(v1, v2)).asReducer)
33+
inner.reduce(((v1, v2) => adder(v1, v2)).asReducer, ((v1, v2) => subTractor(v1, v2)).asReducer)
3434
}
3535

3636
def reduce(adder: (V, V) => V,
37-
subtractor: (V, V) => V,
38-
materialized: Materialized[K, V, ByteArrayKVStore]): KTableS[K, V] = {
37+
subTractor: (V, V) => V,
38+
materialized: Materialized[K, V, ByteArrayKVStore]): KTableS[K, V] = {
3939

4040
// need this explicit asReducer for Scala 2.11 or else the SAM conversion doesn't take place
4141
// works perfectly with Scala 2.12 though
42-
inner.reduce(((v1, v2) => adder(v1, v2)).asReducer, ((v1, v2) => subtractor(v1, v2)).asReducer, materialized)
42+
inner.reduce(((v1, v2) => adder(v1, v2)).asReducer, ((v1, v2) => subTractor(v1, v2)).asReducer, materialized)
4343
}
4444

4545
def aggregate[VR](initializer: () => VR,
46-
adder: (K, V, VR) => VR,
47-
subtractor: (K, V, VR) => VR): KTableS[K, VR] = {
46+
adder: (K, V, VR) => VR,
47+
subTractor: (K, V, VR) => VR): KTableS[K, VR] = {
4848

49-
inner.aggregate(initializer.asInitializer, adder.asAggregator, subtractor.asAggregator)
49+
inner.aggregate(initializer.asInitializer, adder.asAggregator, subTractor.asAggregator)
5050
}
5151

5252
def aggregate[VR](initializer: () => VR,
53-
adder: (K, V, VR) => VR,
54-
subtractor: (K, V, VR) => VR,
55-
materialized: Materialized[K, VR, ByteArrayKVStore]): KTableS[K, VR] = {
53+
adder: (K, V, VR) => VR,
54+
subTractor: (K, V, VR) => VR,
55+
materialized: Materialized[K, VR, ByteArrayKVStore]): KTableS[K, VR] = {
5656

57-
inner.aggregate(initializer.asInitializer, adder.asAggregator, subtractor.asAggregator, materialized)
57+
inner.aggregate(initializer.asInitializer, adder.asAggregator, subTractor.asAggregator, materialized)
5858
}
5959
}

src/main/scala/com/lightbend/kafka/scala/streams/KStreamS.scala

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
3030
}
3131

3232
def map[KR, VR](mapper: (K, V) => (KR, VR)): KStreamS[KR, VR] = {
33-
val kvMapper = mapper.tupled andThen Tuple2ToKeyValue
33+
val kvMapper = mapper.tupled andThen tuple2ToKeyValue
3434
inner.map[KR, VR]((k, v) => kvMapper(k,v))
3535
}
3636

@@ -39,7 +39,7 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
3939
}
4040

4141
def flatMap[KR, VR](mapper: (K, V) => Iterable[(KR, VR)]): KStreamS[KR, VR] = {
42-
val kvMapper = mapper.tupled andThen (iter => iter.map(Tuple2ToKeyValue).asJava)
42+
val kvMapper = mapper.tupled andThen (iter => iter.map(tuple2ToKeyValue).asJava)
4343
inner.flatMap[KR, VR]((k,v) => kvMapper(k , v))
4444
}
4545

@@ -57,12 +57,13 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
5757
inner.branch(predicates.map(_.asPredicate): _*).map(kstream => wrapKStream(kstream))
5858
}
5959

60-
def through(topic: String)(implicit produced: Perhaps[Produced[K, V]]): KStreamS[K, V] =
60+
def through(topic: String)(implicit produced: Perhaps[Produced[K, V]]): KStreamS[K, V] =
6161
produced.fold[KStreamS[K, V]] { inner.through(topic) } { ev => inner.through(topic, ev) }
6262

6363
def to(topic: String)(implicit produced: Perhaps[Produced[K, V]]): Unit =
6464
produced.fold[Unit] { inner.to(topic) } { implicit ev => inner.to(topic, ev) }
6565

66+
//scalastyle:off null
6667
def transform[K1, V1](transformerSupplier: () => Transformer[K, V, (K1, V1)],
6768
stateStoreNames: String*): KStreamS[K1, V1] = {
6869

@@ -78,7 +79,7 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
7879

7980
override def init(context: ProcessorContext): Unit = transformerS.init(context)
8081

81-
@deprecated ("Please use Punctuator functional interface at https://kafka.apache.org/10/javadoc/org/apache/kafka/streams/processor/Punctuator.html instead", "0.1.3")
82+
@deprecated ("Please use Punctuator functional interface at https://kafka.apache.org/10/javadoc/org/apache/kafka/streams/processor/Punctuator.html instead", "0.1.3") // scalastyle:ignore
8283
override def punctuate(timestamp: Long): KeyValue[K1, V1] = {
8384
transformerS.punctuate(timestamp) match {
8485
case (k1, v1) => KeyValue.pair[K1, V1](k1, v1)
@@ -91,6 +92,7 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
9192
}
9293
inner.transform(transformerSupplierJ, stateStoreNames: _*)
9394
}
95+
//scalastyle:on null
9496

9597
def transformValues[VR](valueTransformerSupplier: () => ValueTransformer[V, VR],
9698
stateStoreNames: String*): KStreamS[K, VR] = {
@@ -121,34 +123,34 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
121123
* implicit val stringSerde: Serde[String] = Serdes.String()
122124
* implicit val longSerde: Serde[Long] = Serdes.Long().asInstanceOf[Serde[Long]]
123125
* - .groupByKey
124-
*/
126+
*/
125127
def groupByKey(implicit serialized: Perhaps[Serialized[K, V]]): KGroupedStreamS[K, V] =
126128
serialized.fold[KGroupedStreamS[K, V]] { inner.groupByKey } { implicit ev => inner.groupByKey(ev) }
127129

128130
def groupBy[KR](selector: (K, V) => KR)(implicit serialized: Perhaps[Serialized[KR, V]]): KGroupedStreamS[KR, V] = {
129-
serialized.fold[KGroupedStreamS[KR, V]] {
130-
inner.groupBy(selector.asKeyValueMapper)
131-
} { implicit ev =>
132-
inner.groupBy(selector.asKeyValueMapper, ev)
131+
serialized.fold[KGroupedStreamS[KR, V]] {
132+
inner.groupBy(selector.asKeyValueMapper)
133+
} { implicit ev =>
134+
inner.groupBy(selector.asKeyValueMapper, ev)
133135
}
134136
}
135137

136138
def join[VO, VR](otherStream: KStreamS[K, VO],
137139
joiner: (V, VO) => VR,
138140
windows: JoinWindows)(implicit joined: Perhaps[Joined[K, V, VO]]): KStreamS[K, VR] = {
139141

140-
joined.fold[KStreamS[K, VR]] {
141-
inner.join[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
142-
inner.join[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
142+
joined.fold[KStreamS[K, VR]] {
143+
inner.join[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
144+
inner.join[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
143145
}
144146
}
145147

146148
def join[VT, VR](table: KTableS[K, VT],
147149
joiner: (V, VT) => VR)(implicit joined: Perhaps[Joined[K, V, VT]]): KStreamS[K, VR] = {
148150

149-
joined.fold[KStreamS[K, VR]] {
150-
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner) } { implicit ev =>
151-
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner, ev)
151+
joined.fold[KStreamS[K, VR]] {
152+
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner) } { implicit ev =>
153+
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner, ev)
152154
}
153155
}
154156

@@ -163,18 +165,18 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
163165
joiner: (V, VO) => VR,
164166
windows: JoinWindows)(implicit joined: Perhaps[Joined[K, V, VO]]): KStreamS[K, VR] = {
165167

166-
joined.fold[KStreamS[K, VR]] {
167-
inner.leftJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
168-
inner.leftJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
168+
joined.fold[KStreamS[K, VR]] {
169+
inner.leftJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
170+
inner.leftJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
169171
}
170172
}
171173

172174
def leftJoin[VT, VR](table: KTableS[K, VT],
173175
joiner: (V, VT) => VR)(implicit joined: Perhaps[Joined[K, V, VT]]): KStreamS[K, VR] = {
174176

175-
joined.fold[KStreamS[K, VR]] {
176-
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner) } { implicit ev =>
177-
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner, ev)
177+
joined.fold[KStreamS[K, VR]] {
178+
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner) } { implicit ev =>
179+
inner.leftJoin[VT, VR](table.inner, joiner.asValueJoiner, ev)
178180
}
179181
}
180182

@@ -189,9 +191,9 @@ class KStreamS[K, V](val inner: KStream[K, V]) {
189191
joiner: (V, VO) => VR,
190192
windows: JoinWindows)(implicit joined: Perhaps[Joined[K, V, VO]]): KStreamS[K, VR] = {
191193

192-
joined.fold[KStreamS[K, VR]] {
193-
inner.outerJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
194-
inner.outerJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
194+
joined.fold[KStreamS[K, VR]] {
195+
inner.outerJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows) } { implicit ev =>
196+
inner.outerJoin[VO, VR](otherStream.inner, joiner.asValueJoiner, windows, ev)
195197
}
196198
}
197199

0 commit comments

Comments
 (0)