Skip to content

Commit 9ecd001

Browse files
author
Michel Davit
committed
Fix bugs
1 parent 30cdf43 commit 9ecd001

File tree

3 files changed

+27
-32
lines changed

3 files changed

+27
-32
lines changed

src/main/scala/com/spotify/scio/AnnotationTypeInjector.scala

+10-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package com.spotify.scio
1919

2020
import java.io.File
2121
import java.nio.charset.Charset
22-
import java.nio.file.{Paths, Files as JFiles}
22+
import java.nio.file.{Files as JFiles, Paths}
2323
import com.google.common.base.Charsets
2424
import com.google.common.hash.Hashing
2525
import com.google.common.io.Files
@@ -34,6 +34,15 @@ import scala.collection.mutable
3434

3535
object AnnotationTypeInjector {
3636
private val Log = Logger.getInstance(classOf[AnnotationTypeInjector])
37+
38+
// case classes implement Product trait
39+
val CaseClassSuper: String = "_root_.scala.Product"
40+
val CaseClassFunctions: Seq[String] = Seq(
41+
"def productArity: _root_.scala.Int = ???",
42+
"def productElement(n: _root_.scala.Int): _root_.scala.Any = ???",
43+
"def canEqual(x: _root_.scala.Any): _root_.scala.Boolean = ???"
44+
)
45+
3746
private val CaseClassArgs = """case\s+class\s+[^(]+\((.*)\).*""".r
3847
private val TypeArg = """[a-zA-Z0-9_$]+\s*:\s*[a-zA-Z0-9._$]+([\[(](.*?)[)\]]+)?""".r
3948
private val AlertEveryMissedXInvocations = 5

src/main/scala/com/spotify/scio/AvroTypeInjector.scala

+8-14
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ object AvroTypeInjector {
2626
s"$AvroTNamespace.fromPath",
2727
s"$AvroTNamespace.toSchema"
2828
)
29-
private val CaseClassSuper =
30-
"_root_.scala.Product"
29+
3130
private val HasAvroAnnotationSuper =
3231
"_root_.com.spotify.scio.avro.types.AvroType.HasAvroAnnotation"
3332

@@ -46,19 +45,14 @@ final class AvroTypeInjector extends AnnotationTypeInjector {
4645
override def injectFunctions(source: ScTypeDefinition): Seq[String] =
4746
source match {
4847
case c: ScClass if avroAnnotation(c).isDefined =>
49-
val result = for {
50-
cc <- Option(c.containingClass)
51-
qn <- Option(cc.getQualifiedName)
48+
val fields = for {
49+
cc <- Option(c.containingClass).toSeq
50+
qn <- Option(cc.getQualifiedName).toSeq
5251
parent = qn.init
53-
defs <- {
54-
generatedCaseClasses(parent, c)
55-
.find(_.contains(HasAvroAnnotationSuper))
56-
.map(getApplyPropsSignature)
57-
.map(v => s"def $v = ???")
58-
}
59-
} yield defs
60-
61-
result.toSeq
52+
cls <- generatedCaseClasses(parent, c).find(_.contains(HasAvroAnnotationSuper)).toSeq
53+
v <- getApplyPropsSignature(cls)
54+
} yield s"def $v = ???"
55+
CaseClassFunctions ++ fields
6256
case _ => Seq.empty
6357
}
6458

src/main/scala/com/spotify/scio/BigQueryTypeInjector.scala

+9-17
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ object BigQueryTypeInjector {
3939
s"$BQTNamespace.toTable"
4040
)
4141

42-
private val CaseClassSuper =
43-
"_root_.scala.Product"
4442
private val HasAnnotationSuper =
4543
"_root_.com.spotify.scio.bigquery.types.BigQueryType.HasAnnotation"
4644

@@ -78,14 +76,12 @@ object BigQueryTypeInjector {
7876
annotation match {
7977
case a if a.contains(FromQuery) =>
8078
val simple = """
81-
|def query: _root_.java.lang.String = ???
8279
|def queryRaw: _root_.java.lang.String = ???
8380
|""".stripMargin
8481

8582
bqQuerySignature(c)
8683
.map { params =>
8784
simple + s"""
88-
|def query($params): _root_.java.lang.String = ???
8985
|def queryAsSource($params): _root_.com.spotify.scio.bigquery.Query = ???
9086
|""".stripMargin
9187
}
@@ -112,20 +108,16 @@ final class BigQueryTypeInjector extends AnnotationTypeInjector {
112108
override def injectFunctions(source: ScTypeDefinition): Seq[String] =
113109
source match {
114110
case c: ScClass if bqAnnotation(c).isDefined =>
115-
val result = for {
116-
cc <- Option(c.containingClass)
117-
qn <- Option(cc.getQualifiedName)
111+
val fields = for {
112+
cc <- Option(c.containingClass).toSeq
113+
qn <- Option(cc.getQualifiedName).toSeq
118114
parent = qn.init
119-
defs <- {
120-
generatedCaseClasses(parent, c)
121-
.find(_.contains(HasAnnotationSuper))
122-
.map(getApplyPropsSignature)
123-
.map(v => s"def $v = ???")
124-
}
125-
} yield defs
126-
127-
result.toSeq
128-
case _ => Seq.empty
115+
cls <- generatedCaseClasses(parent, c).find(_.contains(HasAnnotationSuper)).toSeq
116+
v <- getApplyPropsSignature(cls)
117+
} yield s"def $v = ???"
118+
CaseClassFunctions ++ fields
119+
case _ =>
120+
Seq.empty
129121
}
130122

131123
override def injectSupers(source: ScTypeDefinition): Seq[String] =

0 commit comments

Comments
 (0)