Skip to content

Commit a3a6b70

Browse files
feat(#286): fix CI "No ClassTag available for Nothing" error
1 parent 49dfdae commit a3a6b70

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

modules/flink-common-api/src/main/scala/org/apache/flinkx/api/serializers.scala

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import java.math.{BigInteger => JBigInteger}
3333
import java.math.{BigDecimal => JBigDecimal}
3434
import java.time._
3535
import java.util.UUID
36-
import scala.{Nothing => Nothing}
3736
import scala.collection.immutable.{SortedSet, TreeSet}
3837
import scala.concurrent.duration.{Duration, FiniteDuration, TimeUnit}
3938
import scala.reflect.{ClassTag, classTag}
@@ -116,9 +115,7 @@ trait serializers extends LowPrioImplicits {
116115
implicit lazy val finiteDurationInfo: TypeInformation[FiniteDuration] = SimpleTypeInfo(2, 2, keyType = true)
117116
implicit lazy val flinkNothingInfo: TypeInformation[FlinkNothing] =
118117
SimpleTypeInfo(0)(classTag[FlinkNothing], new NothingSerializer().asInstanceOf[TypeSerializer[FlinkNothing]])
119-
implicit lazy val scalaNothingInfo: TypeInformation[Nothing] =
120-
// At runtime scala.Nothing is scala.runtime.Nothing$ and extends Throwable
121-
SimpleTypeInfo[Nothing](6, 11)(classTag[Nothing], new NothingSerializer().asInstanceOf[TypeSerializer[Nothing]])
118+
implicit lazy val scalaNothingInfo: TypeInformation[scala.Nothing] = ScalaNothingTypeInfo
122119
implicit lazy val timeUnitInfo: TypeInformation[TimeUnit] = new EnumTypeInfo(classOf[TimeUnit])
123120
implicit lazy val uuidMapper: TypeMapper[UUID, Array[Byte]] = new UuidMapper()
124121
implicit lazy val uuidInfo: TypeInformation[UUID] = mappedTypeInfo[UUID, Array[Byte]]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.apache.flinkx.api.typeinfo
2+
3+
import org.apache.flink.api.common.ExecutionConfig
4+
import org.apache.flink.api.common.serialization.SerializerConfig
5+
import org.apache.flink.api.common.typeinfo.TypeInformation
6+
import org.apache.flink.api.common.typeutils.TypeSerializer
7+
import org.apache.flinkx.api.serializer.NothingSerializer
8+
9+
object ScalaNothingTypeInfo extends TypeInformation[Nothing] {
10+
11+
override def createSerializer(config: SerializerConfig): TypeSerializer[Nothing] =
12+
new NothingSerializer().asInstanceOf[TypeSerializer[Nothing]]
13+
// override modifier removed to satisfy both implementation requirement of Flink 1.x and removal in 2.x
14+
def createSerializer(config: ExecutionConfig): TypeSerializer[Nothing] =
15+
new NothingSerializer().asInstanceOf[TypeSerializer[Nothing]]
16+
17+
override def isKeyType: Boolean = false
18+
override def getTotalFields: Int = 11 // At runtime scala.Nothing is scala.runtime.Nothing$ and extends Throwable
19+
override def isTupleType: Boolean = false
20+
override def canEqual(obj: Any): Boolean = obj.isInstanceOf[ScalaNothingTypeInfo.type]
21+
override def getTypeClass: Class[Nothing] = classOf[Nothing]
22+
override def getArity: Int = 6 // At runtime scala.Nothing is scala.runtime.Nothing$ and extends Throwable
23+
override def isBasicType: Boolean = false
24+
override def toString: String = "ScalaNothingTypeInfo()"
25+
override def equals(obj: Any): Boolean = this.eq(obj.asInstanceOf[AnyRef])
26+
override def hashCode(): Int = 0
27+
28+
}

0 commit comments

Comments
 (0)